Merge remote-tracking branch 'upstream/phase4-11-07-2015' into python-registry-v2
This commit is contained in:
commit
c2fcf8bead
177 changed files with 4354 additions and 1462 deletions
|
@ -152,7 +152,7 @@ def get_image_layer(namespace, repository, image_id, headers):
|
|||
image_id=image_id)
|
||||
|
||||
try:
|
||||
path = store.blob_path(repo_image.storage.checksum)
|
||||
path = store.blob_path(repo_image.storage.content_checksum)
|
||||
if not repo_image.storage.cas_path:
|
||||
path = store.v1_image_layer_path(repo_image.storage.uuid)
|
||||
logger.info('Serving legacy v1 image from path: %s', path)
|
||||
|
@ -233,6 +233,10 @@ def put_image_layer(namespace, repository, image_id):
|
|||
h, sum_hndlr = checksums.simple_checksum_handler(json_data)
|
||||
sr.add_handler(sum_hndlr)
|
||||
|
||||
# Add a handler which computes the content checksum only
|
||||
ch, content_sum_hndlr = checksums.content_checksum_handler()
|
||||
sr.add_handler(content_sum_hndlr)
|
||||
|
||||
# Stream write the data to storage.
|
||||
with database.CloseForLongOperation(app.config):
|
||||
try:
|
||||
|
@ -258,13 +262,14 @@ def put_image_layer(namespace, repository, image_id):
|
|||
except (IOError, checksums.TarError) as exc:
|
||||
logger.debug('put_image_layer: Error when computing tarsum %s', exc)
|
||||
|
||||
if repo_image.storage.checksum is None:
|
||||
if repo_image.v1_checksum is None:
|
||||
# We don't have a checksum stored yet, that's fine skipping the check.
|
||||
# Not removing the mark though, image is not downloadable yet.
|
||||
session['checksum'] = csums
|
||||
session['content_checksum'] = 'sha256:{0}'.format(ch.hexdigest())
|
||||
return make_response('true', 200)
|
||||
|
||||
checksum = repo_image.storage.checksum
|
||||
checksum = repo_image.v1_checksum
|
||||
|
||||
# We check if the checksums provided matches one the one we computed
|
||||
if checksum not in csums:
|
||||
|
@ -323,8 +328,9 @@ def put_image_checksum(namespace, repository, image_id):
|
|||
abort(409, 'Cannot set checksum for image %(image_id)s',
|
||||
issue='image-write-error', image_id=image_id)
|
||||
|
||||
logger.debug('Storing image checksum')
|
||||
err = store_checksum(repo_image.storage, checksum)
|
||||
logger.debug('Storing image and content checksums')
|
||||
content_checksum = session.get('content_checksum', None)
|
||||
err = store_checksum(repo_image, checksum, content_checksum)
|
||||
if err:
|
||||
abort(400, err)
|
||||
|
||||
|
@ -398,14 +404,17 @@ def get_image_ancestry(namespace, repository, image_id, headers):
|
|||
return response
|
||||
|
||||
|
||||
def store_checksum(image_storage, checksum):
|
||||
def store_checksum(image_with_storage, checksum, content_checksum):
|
||||
checksum_parts = checksum.split(':')
|
||||
if len(checksum_parts) != 2:
|
||||
return 'Invalid checksum format'
|
||||
|
||||
# We store the checksum
|
||||
image_storage.checksum = checksum
|
||||
image_storage.save()
|
||||
image_with_storage.storage.content_checksum = content_checksum
|
||||
image_with_storage.storage.save()
|
||||
|
||||
image_with_storage.v1_checksum = checksum
|
||||
image_with_storage.save()
|
||||
|
||||
|
||||
@v1_bp.route('/images/<image_id>/json', methods=['PUT'])
|
||||
|
@ -519,7 +528,7 @@ def process_image_changes(namespace, repository, image_id):
|
|||
parent_trie.frombytes(parent_trie_bytes)
|
||||
|
||||
# Read in the file entries from the layer tar file
|
||||
layer_path = store.blob_path(repo_image.storage.checksum)
|
||||
layer_path = store.blob_path(repo_image.storage.content_checksum)
|
||||
if not repo_image.storage.cas_path:
|
||||
logger.info('Processing diffs for newly stored v1 image at %s', layer_path)
|
||||
layer_path = store.v1_image_layer_path(uuid)
|
||||
|
|
Reference in a new issue