Change tag history call in OCI to not load the contents of the manifest

Just in case that load is slow on the DB
This commit is contained in:
Joseph Schorr 2019-03-08 14:59:33 -05:00
parent 0d6343871e
commit 2027d13d2b
3 changed files with 8 additions and 6 deletions

View file

@ -78,10 +78,11 @@ def list_repository_tag_history(repository_id, page, page_size, specific_tag_nam
active_tags_only=False): active_tags_only=False):
""" Returns a tuple of the full set of tags found in the specified repository, including those """ Returns a tuple of the full set of tags found in the specified repository, including those
that are no longer alive (unless active_tags_only is True), and whether additional tags exist. that are no longer alive (unless active_tags_only is True), and whether additional tags exist.
If specific_tag_name is given, the tags are further filtered by name. If specific_tag_name is given, the tags are further filtered by name. Note that the
returned Manifest will not contain the manifest contents.
""" """
query = (Tag query = (Tag
.select(Tag, Manifest) .select(Tag, Manifest.id, Manifest.digest, Manifest.media_type)
.join(Manifest) .join(Manifest)
.where(Tag.repository == repository_id) .where(Tag.repository == repository_id)
.order_by(Tag.lifetime_start_ms.desc(), Tag.name) .order_by(Tag.lifetime_start_ms.desc(), Tag.name)

View file

@ -217,9 +217,12 @@ class Manifest(datatype('Manifest', ['digest', 'media_type', 'internal_manifest_
if manifest is None: if manifest is None:
return None return None
# NOTE: `manifest_bytes` will be None if not selected by certain join queries.
manifest_bytes = (Bytes.for_string_or_unicode(manifest.manifest_bytes)
if manifest.manifest_bytes is not None else None)
return Manifest(db_id=manifest.id, return Manifest(db_id=manifest.id,
digest=manifest.digest, digest=manifest.digest,
internal_manifest_bytes=Bytes.for_string_or_unicode(manifest.manifest_bytes), internal_manifest_bytes=manifest_bytes,
media_type=ManifestTable.media_type.get_name(manifest.media_type_id), media_type=ManifestTable.media_type.get_name(manifest.media_type_id),
inputs=dict(legacy_image=legacy_image, tag_manifest=False)) inputs=dict(legacy_image=legacy_image, tag_manifest=False))
@ -245,6 +248,7 @@ class Manifest(datatype('Manifest', ['digest', 'media_type', 'internal_manifest_
def get_parsed_manifest(self, validate=True): def get_parsed_manifest(self, validate=True):
""" Returns the parsed manifest for this manifest. """ """ Returns the parsed manifest for this manifest. """
assert self.internal_manifest_bytes
return parse_manifest_from_bytes(self.internal_manifest_bytes, self.media_type, return parse_manifest_from_bytes(self.internal_manifest_bytes, self.media_type,
validate=validate) validate=validate)

View file

@ -41,9 +41,6 @@ def _tag_dict(tag):
if tag.manifest: if tag.manifest:
tag_info['is_manifest_list'] = tag.manifest.is_manifest_list tag_info['is_manifest_list'] = tag.manifest.is_manifest_list
if 'size' not in tag_info:
tag_info['size'] = tag.manifest.layers_compressed_size
if tag.lifetime_start_ts > 0: if tag.lifetime_start_ts > 0:
last_modified = format_date(datetime.utcfromtimestamp(tag.lifetime_start_ts)) last_modified = format_date(datetime.utcfromtimestamp(tag.lifetime_start_ts))
tag_info['last_modified'] = last_modified tag_info['last_modified'] = last_modified