Simplifying queries around images and placements
Only verbs needs to load placements for multiple images, so we can vastly simplify and optimize most queries by making it two-step, and having the rest of the image loads not worry about placements
This commit is contained in:
parent
0c7c9a7a0a
commit
8146646761
7 changed files with 78 additions and 141 deletions
|
@ -30,8 +30,9 @@ class PreOCIModel(VerbsDataInterface):
|
|||
repo_image_record = model.image.get_image_by_id(
|
||||
repo_image.repository.namespace_name, repo_image.repository.name, repo_image.image_id)
|
||||
|
||||
parents = model.image.get_parent_images_with_placements(
|
||||
parents = model.image.get_parent_images(
|
||||
repo_image.repository.namespace_name, repo_image.repository.name, repo_image_record)
|
||||
placements_map = model.image.get_placements_for_images(parents)
|
||||
|
||||
yield repo_image
|
||||
|
||||
|
@ -42,9 +43,10 @@ class PreOCIModel(VerbsDataInterface):
|
|||
except ValueError:
|
||||
pass
|
||||
|
||||
locations = [placement.location.name for placement in placements_map[parent.storage.id]]
|
||||
yield ImageWithBlob(
|
||||
image_id=parent.docker_image_id,
|
||||
blob=_blob(parent.storage),
|
||||
blob=_blob(parent.storage, locations=locations),
|
||||
repository=repo_image.repository,
|
||||
compat_metadata=metadata,
|
||||
v1_metadata=_docker_v1_metadata(repo_image.repository.namespace_name,
|
||||
|
@ -175,15 +177,11 @@ def _derived_image(blob_record, repo_image):
|
|||
internal_source_image_db_id=repo_image.internal_db_id,)
|
||||
|
||||
|
||||
def _blob(blob_record):
|
||||
def _blob(blob_record, locations=None):
|
||||
"""
|
||||
Returns a Blob object for the given Pre-OCI data model blob instance.
|
||||
"""
|
||||
if hasattr(blob_record, 'locations'):
|
||||
locations = blob_record.locations
|
||||
else:
|
||||
locations = model.storage.get_storage_locations(blob_record.uuid)
|
||||
|
||||
locations = locations or model.storage.get_storage_locations(blob_record.uuid)
|
||||
return Blob(
|
||||
uuid=blob_record.uuid,
|
||||
size=blob_record.image_size,
|
||||
|
|
Reference in a new issue