diff --git a/docker_registry/app.py b/docker_registry/app.py index 846fd2ec6..a4de07d10 100644 --- a/docker_registry/app.py +++ b/docker_registry/app.py @@ -27,9 +27,10 @@ @app.route('/_ping') @app.route('/v1/_ping') def ping(): - return toolkit.response(headers={ - 'X-Docker-Registry-Standalone': cfg.standalone is not False - }) + headers = {'X-Docker-Registry-Standalone': cfg.standalone is not False} + if cfg.mirroring: + headers['X-Docker-Registry-Standalone'] = 'mirror' + return toolkit.response(headers=headers) @app.route('/') diff --git a/docker_registry/lib/mirroring.py b/docker_registry/lib/mirroring.py index e5160630c..daeb9fe0c 100644 --- a/docker_registry/lib/mirroring.py +++ b/docker_registry/lib/mirroring.py @@ -18,6 +18,18 @@ def is_mirror(): return bool(cfg.get('mirroring', False)) +def _response_headers(base): + headers = {} + if not base: + return headers + for k, v in base.iteritems(): + if k.lower() == 'content-encoding': + continue + headers[k.lower()] = v + logger.warn(headers) + return headers + + def lookup_source(path, stream=False, source=None): if not source: cfg = config.load() @@ -77,10 +89,7 @@ def wrapper(namespace, repository, *args, **kwargs): if not source_resp: return resp - headers = source_resp.headers - if 'Content-Encoding' in headers: - del headers['Content-Encoding'] - + headers = _response_headers(source_resp.headers) return toolkit.response(data=source_resp.content, headers=headers, raw=True) @@ -105,10 +114,7 @@ def wrapper(namespace, repository, *args, **kwargs): if not source_resp: return resp data = source_resp.content - headers = source_resp.headers - if 'Content-Encoding' in headers: - del headers['Content-Encoding'] - + headers = _response_headers(source_resp.headers) cache.redis_conn.setex('{0}:{1}'.format( cache.cache_prefix, tag_path ), tags_cache_ttl, data) @@ -142,11 +148,9 @@ def wrapper(*args, **kwargs): store = storage.load() - headers = source_resp.headers - if 'Content-Encoding' in headers: - del headers['Content-Encoding'] - if index_route and 'X-Docker-Endpoints' in headers: - headers['X-Docker-Endpoints'] = toolkit.get_endpoints() + headers = _response_headers(source_resp.headers) + if index_route and 'x-docker-endpoints' in headers: + headers['x-docker-endpoints'] = toolkit.get_endpoints() if not stream: logger.debug('JSON data found on source, writing response') diff --git a/docker_registry/toolkit.py b/docker_registry/toolkit.py index 6b7a2cf20..b1da0c219 100644 --- a/docker_registry/toolkit.py +++ b/docker_registry/toolkit.py @@ -48,14 +48,12 @@ def iterate(self, chunk_size=-1): if chunk_size == -1: chunk_size = 1024 for chunk in self._fp.iter_content(chunk_size): - logger.debug('Read %d bytes' % len(chunk)) for handler in self.handlers: handler(chunk) yield chunk else: chunk = self._fp.read(chunk_size) while chunk: - logger.debug('Read %d bytes' % len(chunk)) for handler in self.handlers: handler(chunk) yield chunk