From 39fa982ef2626aaade953749e3b67e80b4f34fa5 Mon Sep 17 00:00:00 2001 From: yackob03 Date: Tue, 31 Dec 2013 16:22:27 -0500 Subject: [PATCH] Add some logging to the registry for failure cases. --- endpoints/registry.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/endpoints/registry.py b/endpoints/registry.py index e6b34493e..b449f7fca 100644 --- a/endpoints/registry.py +++ b/endpoints/registry.py @@ -43,6 +43,7 @@ def require_completion(f): def wrapper(namespace, repository, *args, **kwargs): if store.exists(store.image_mark_path(namespace, repository, kwargs['image_id'])): + logger.warning('Image is already being uploaded: %s', kwargs['image_id']) abort(400) # 'Image is being uploaded, retry later') return f(namespace, repository, *args, **kwargs) return wrapper @@ -87,6 +88,7 @@ def get_image_layer(namespace, repository, image_id, headers): try: return Response(store.stream_read(path), headers=headers) except IOError: + logger.warning('Image not found: %s', image_id) abort(404) # 'Image not found', 404) abort(403) @@ -141,7 +143,7 @@ def put_image_layer(namespace, repository, image_id): return make_response('true', 200) # We check if the checksums provided matches one the one we computed if checksum not in csums: - logger.debug('put_image_layer: Wrong checksum') + logger.warning('put_image_layer: Wrong checksum') abort(400) # 'Checksum mismatch, ignoring the layer') # Checksum is ok, we remove the marker store.remove(mark_path) @@ -168,8 +170,10 @@ def put_image_checksum(namespace, repository, image_id): checksum = request.headers.get('X-Docker-Checksum') if not checksum: + logger.warning('Missing Image\'s checksum: %s', image_id) abort(400) # 'Missing Image\'s checksum') if not session.get('checksum'): + logger.warning('Checksum not found in Cookie for image: %s', image_id) abort(400) # 'Checksum not found in Cookie') if not store.exists(store.image_json_path(namespace, repository, image_id)): abort(404) # 'Image not found', 404) @@ -287,8 +291,11 @@ def put_image_json(namespace, repository, image_id): except json.JSONDecodeError: pass if not data or not isinstance(data, dict): + logger.warning('Invalid JSON for image: %s json: %s', image_id, + request.data) abort(400) # 'Invalid JSON') if 'id' not in data: + logger.warning('Missing key `id\' in JSON for image: %s', image_id) abort(400) # 'Missing key `id\' in JSON') # Read the checksum checksum = request.headers.get('X-Docker-Checksum') @@ -301,11 +308,14 @@ def put_image_json(namespace, repository, image_id): # We cleanup any old checksum in case it's a retry after a fail store.remove(store.image_checksum_path(namespace, repository, image_id)) if image_id != data['id']: + logger.warning('JSON data contains invalid id for image: %s', image_id) abort(400) # 'JSON data contains invalid id') parent_id = data.get('parent') if parent_id and not store.exists(store.image_json_path(namespace, repository, data['parent'])): + logger.warning('Image depends on a non existing parent image: %s', + image_id) abort(400) # 'Image depends on a non existing parent') json_path = store.image_json_path(namespace, repository, image_id) mark_path = store.image_mark_path(namespace, repository, image_id)