)]}'
{"zuul_registry/main.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2fa2ed09c6c45c505b5a85de0d26fcdd66d31026","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                self.log.debug(\u0027Manifest %s %s digest found %s\u0027,"},{"line_number":292,"context_line":"                               repository, ref, manifest[ct])"},{"line_number":293,"context_line":"                data \u003d self.storage.get_blob(namespace, manifest[ct])"},{"line_number":294,"context_line":"                if not data:"},{"line_number":295,"context_line":"                    self.log.error("},{"line_number":296,"context_line":"                        \u0027Blob %s %s not found\u0027, namespace, manifest[ct])"},{"line_number":297,"context_line":"                    return self.not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_d49a6160","line":294,"range":{"start_line":294,"start_character":19,"end_line":294,"end_character":27},"updated":"2019-10-09 20:19:21.000000000","message":"Do we ever expect that data might be b\u0027\u0027?","commit_id":"fec0efbcf498d088e44e6ca58ee1767fa3aeb820"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"96625b04aa411bd6062329c9b3278b7241fc3d7d","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                self.log.debug(\u0027Manifest %s %s digest found %s\u0027,"},{"line_number":292,"context_line":"                               repository, ref, manifest[ct])"},{"line_number":293,"context_line":"                data \u003d self.storage.get_blob(namespace, manifest[ct])"},{"line_number":294,"context_line":"                if not data:"},{"line_number":295,"context_line":"                    self.log.error("},{"line_number":296,"context_line":"                        \u0027Blob %s %s not found\u0027, namespace, manifest[ct])"},{"line_number":297,"context_line":"                    return self.not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0f38e69d","line":294,"updated":"2019-10-09 20:37:03.000000000","message":"This is an entirely unexpected error.  We have a log entry indicating the blob was uploaded: http://paste.openstack.org/show/782465/ but it\u0027s not there now and we don\u0027t know why.  I\u0027m going to propose a patch to try to narrow some things down.  At any rate, no -- this blob should be the contents of the image manifest, which should never be the empty string/bytearray.","commit_id":"fec0efbcf498d088e44e6ca58ee1767fa3aeb820"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"96625b04aa411bd6062329c9b3278b7241fc3d7d","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                res.headers[\u0027Docker-Content-Digest\u0027] \u003d manifest[ct]"},{"line_number":300,"context_line":"                hasher \u003d hashlib.sha256()"},{"line_number":301,"context_line":"                hasher.update(data)"},{"line_number":302,"context_line":"                self.log.debug(\u0027Retrieved sha256 %s\u0027, hasher.hexdigest())"},{"line_number":303,"context_line":"                return data"},{"line_number":304,"context_line":"        self.log.error(\u0027Manifest %s %s not found\u0027, repository, ref)"},{"line_number":305,"context_line":"        return self.not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_2f3da28e","line":302,"updated":"2019-10-09 20:37:03.000000000","message":"Kilobytes at most -- get_blob was a deliberate choice here for simplicity.  Though, I want to say the hash debug has outlived its usefulness, however, we\u0027re just starting to investigate really weird bugs, so maybe let\u0027s leave it for now.","commit_id":"fec0efbcf498d088e44e6ca58ee1767fa3aeb820"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2fa2ed09c6c45c505b5a85de0d26fcdd66d31026","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                res.headers[\u0027Docker-Content-Digest\u0027] \u003d manifest[ct]"},{"line_number":300,"context_line":"                hasher \u003d hashlib.sha256()"},{"line_number":301,"context_line":"                hasher.update(data)"},{"line_number":302,"context_line":"                self.log.debug(\u0027Retrieved sha256 %s\u0027, hasher.hexdigest())"},{"line_number":303,"context_line":"                return data"},{"line_number":304,"context_line":"        self.log.error(\u0027Manifest %s %s not found\u0027, repository, ref)"},{"line_number":305,"context_line":"        return self.not_found()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_14c479f4","line":302,"updated":"2019-10-09 20:19:21.000000000","message":"Off-topic: What\u0027s an upper-bound on how big we might expect data to be? Since we seem to only slurp it all into memory for the sake of calculating this sha256 for logging, I wonder if it\u0027d be better to switch to a streaming API and log after we\u0027ve read the whole stream...","commit_id":"fec0efbcf498d088e44e6ca58ee1767fa3aeb820"}]}
