Add content-length headers and debug messages
According to the docs, these content-length headers should be present, so include them. We should also return a 202 on the PUT rather than a 204. None of that seems to matter, but as long as that's the case, why not match the spec? Also, adjust some log lines to match others and add a few more useful lines. Change-Id: Ib06d282891984918f369a562d075ad2b8c7349e2
This commit is contained in:
parent
326cdca31e
commit
0d97c0738e
@ -199,10 +199,13 @@ class RegistryAPI:
|
||||
@cherrypy.expose
|
||||
def head_blob(self, repository, digest):
|
||||
namespace, repository = self.get_namespace(repository)
|
||||
self.log.info('Head blob %s %s %s', namespace, repository, digest)
|
||||
size = self.storage.blob_size(namespace, digest)
|
||||
if size is None:
|
||||
self.log.info('Head blob %s %s %s not found',
|
||||
namespace, repository, digest)
|
||||
return self.not_found()
|
||||
self.log.info('Head blob %s %s %s size %s',
|
||||
namespace, repository, digest, size)
|
||||
res = cherrypy.response
|
||||
res.headers['Docker-Content-Digest'] = digest
|
||||
res.headers['Content-Length'] = str(size)
|
||||
@ -248,6 +251,7 @@ class RegistryAPI:
|
||||
orig_repository, uuid)
|
||||
res.headers['Docker-Upload-UUID'] = uuid
|
||||
res.headers['Range'] = '0-0'
|
||||
res.headers['Content-Length'] = '0'
|
||||
res.status = '202 Accepted'
|
||||
|
||||
@cherrypy.expose
|
||||
@ -263,8 +267,9 @@ class RegistryAPI:
|
||||
res.headers['Location'] = '/v2/%s/blobs/uploads/%s' % (
|
||||
orig_repository, uuid)
|
||||
res.headers['Docker-Upload-UUID'] = uuid
|
||||
res.headers['Content-Length'] = '0'
|
||||
res.headers['Range'] = '0-%s' % (new_length,)
|
||||
res.status = '204 No Content'
|
||||
res.status = '202 Accepted'
|
||||
self.log.info(
|
||||
'[u: %s] Finish Upload chunk %s %s', uuid, repository, new_length)
|
||||
|
||||
@ -273,19 +278,20 @@ class RegistryAPI:
|
||||
def finish_upload(self, repository, uuid, digest):
|
||||
orig_repository = repository
|
||||
namespace, repository = self.get_namespace(repository)
|
||||
self.log.info('[u: %s] Upload final chunk %s %s',
|
||||
uuid, namespace, repository)
|
||||
self.log.info('[u: %s] Upload final chunk %s %s digest %s',
|
||||
uuid, namespace, repository, digest)
|
||||
old_length, new_length = self.storage.upload_chunk(
|
||||
namespace, uuid, cherrypy.request.body)
|
||||
self.log.debug('[u: %s] Store upload %s %s',
|
||||
uuid, namespace, repository)
|
||||
self.storage.store_upload(namespace, uuid, digest)
|
||||
self.log.info('[u: %s] Upload complete %s %s',
|
||||
uuid, namespace, repository)
|
||||
self.log.info('[u: %s] Upload complete %s %s digest %s',
|
||||
uuid, namespace, repository, digest)
|
||||
res = cherrypy.response
|
||||
res.headers['Location'] = '/v2/%s/blobs/%s' % (orig_repository, digest)
|
||||
res.headers['Docker-Content-Digest'] = digest
|
||||
res.headers['Content-Range'] = '%s-%s' % (old_length, new_length)
|
||||
res.headers['Content-Length'] = '0'
|
||||
res.status = '201 Created'
|
||||
|
||||
@cherrypy.expose
|
||||
|
@ -250,8 +250,8 @@ class Storage:
|
||||
# The lock is in force, another simultaneous upload
|
||||
# must be handling this; assume it will succeed and go
|
||||
# ahead and clean up this upload.
|
||||
self.log.warning("Failed to obtain lock(1) on digest %s "
|
||||
"for upload %s", digest, uuid)
|
||||
self.log.warning("[u: %s] Failed to obtain lock(1) on "
|
||||
"digest %s", uuid, digest)
|
||||
return False
|
||||
|
||||
# Lock the blob
|
||||
@ -266,13 +266,17 @@ class Storage:
|
||||
# We lost a race for the lock, another simultaneous upload
|
||||
# must be handling this; assume it will succeed and go
|
||||
# ahead and clean up this upload.
|
||||
self.log.warning("Failed to obtain lock(2) on digest %s "
|
||||
"for upload %s", digest, uuid)
|
||||
self.log.warning("[u: %s] Failed to obtain lock(2) on digest %s",
|
||||
uuid, digest)
|
||||
return False
|
||||
|
||||
if waslocked:
|
||||
self.log.warning("Breaking lock on digest %s "
|
||||
"for upload %s", digest, uuid)
|
||||
self.log.warning("[u: %s] Breaking lock on digest %s",
|
||||
uuid, digest)
|
||||
else:
|
||||
self.log.debug("[u: %s] Locked digest %s",
|
||||
uuid, digest)
|
||||
|
||||
return True
|
||||
|
||||
def store_upload(self, namespace, uuid, digest):
|
||||
|
Loading…
x
Reference in New Issue
Block a user