From 2117688a2af1946800ceebb1a4d29cd1a96549cd Mon Sep 17 00:00:00 2001 From: Dan LaManna Date: Mon, 2 Oct 2023 15:50:09 -0400 Subject: [PATCH] Remove n+1 queries when using full_metadata --- dandiapi/api/manifests.py | 11 +++++++++-- dandiapi/api/services/metadata/__init__.py | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dandiapi/api/manifests.py b/dandiapi/api/manifests.py index ddb913d12..b28c44422 100644 --- a/dandiapi/api/manifests.py +++ b/dandiapi/api/manifests.py @@ -86,7 +86,9 @@ def write_dandiset_jsonld(version: Version): def write_assets_jsonld(version: Version): # Use full metadata when writing externally - assets_metadata = (asset.full_metadata for asset in version.assets.iterator()) + assets_metadata = ( + asset.full_metadata for asset in version.assets.select_related('blob', 'zarr').iterator() + ) with streaming_file_upload(assets_jsonld_path(version)) as stream: stream.write('[') for i, obj in enumerate(assets_metadata): @@ -120,7 +122,12 @@ def write_assets_yaml(version: Version): _yaml_dump_sequence_from_generator( stream, # Use full metadata when writing externally - (asset.full_metadata for asset in version.assets.order_by('created').iterator()), + ( + asset.full_metadata + for asset in version.assets.select_related('blob', 'zarr') + .order_by('created') + .iterator() + ), ) diff --git a/dandiapi/api/services/metadata/__init__.py b/dandiapi/api/services/metadata/__init__.py index 2c79d2b7b..e8049e6d5 100644 --- a/dandiapi/api/services/metadata/__init__.py +++ b/dandiapi/api/services/metadata/__init__.py @@ -81,7 +81,9 @@ def version_aggregate_assets_summary(version: Version) -> None: version.metadata['assetsSummary'] = aggregate_assets_summary( ( asset.full_metadata - for asset in version.assets.filter(status=Asset.Status.VALID).iterator() + for asset in version.assets.filter(status=Asset.Status.VALID) + .select_related('blob', 'zarr') + .iterator() ) )