Skip to content

Commit

Permalink
Remove n+1 queries when using full_metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
danlamanna committed Oct 2, 2023
1 parent 64b5a41 commit 2117688
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
11 changes: 9 additions & 2 deletions dandiapi/api/manifests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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()
),
)


Expand Down
4 changes: 3 additions & 1 deletion dandiapi/api/services/metadata/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
)
)

Expand Down

0 comments on commit 2117688

Please sign in to comment.