diff --git a/zuul_registry/main.py b/zuul_registry/main.py index af71043..13f6261 100644 --- a/zuul_registry/main.py +++ b/zuul_registry/main.py @@ -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 diff --git a/zuul_registry/storage.py b/zuul_registry/storage.py index 44ef28d..ba21f5f 100644 --- a/zuul_registry/storage.py +++ b/zuul_registry/storage.py @@ -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):