)]}'
{"swift/common/middleware/dlo.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"865ed02c1a9453d83cc289137e4844d9a5597e71","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        for header, value in self._response_headers:"},{"line_number":378,"context_line":"            if (header.lower() \u003d\u003d \u0027x-object-manifest\u0027):"},{"line_number":379,"context_line":"                content_length \u003d self._response_header_value(\u0027content-length\u0027)"},{"line_number":380,"context_line":"                print(content_length)"},{"line_number":381,"context_line":"                if content_length is not None and int(content_length) \u003c 1024:"},{"line_number":382,"context_line":"                    # Go ahead and consumer small bodies"},{"line_number":383,"context_line":"                    for _chunk in resp_iter:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_47d4fabb","line":380,"updated":"2020-09-15 18:29:03.000000000","message":"oops!","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b7ed2b4184941c5e3f0770d5af6abafcb43d4e9","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                content_length \u003d self._response_header_value(\u0027content-length\u0027)"},{"line_number":380,"context_line":"                print(content_length)"},{"line_number":381,"context_line":"                if content_length is not None and int(content_length) \u003c 1024:"},{"line_number":382,"context_line":"                    # Go ahead and consumer small bodies"},{"line_number":383,"context_line":"                    for _chunk in resp_iter:"},{"line_number":384,"context_line":"                        pass"},{"line_number":385,"context_line":"                close_if_possible(resp_iter)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_02115005","line":382,"range":{"start_line":382,"start_character":42,"end_line":382,"end_character":43},"updated":"2020-09-15 18:51:52.000000000","message":"\u003e consume","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"865ed02c1a9453d83cc289137e4844d9a5597e71","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                    # Go ahead and consumer small bodies"},{"line_number":383,"context_line":"                    for _chunk in resp_iter:"},{"line_number":384,"context_line":"                        pass"},{"line_number":385,"context_line":"                close_if_possible(resp_iter)"},{"line_number":386,"context_line":"                response \u003d self.get_or_head_response("},{"line_number":387,"context_line":"                    req, wsgi_to_str(wsgi_unquote(value)))"},{"line_number":388,"context_line":"                return response(req.environ, start_response)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_c7f12a6d","line":385,"updated":"2020-09-15 18:29:03.000000000","message":"isn\u0027t there an environ swift.non_client_disconnect we can set that would work in all cases and also prevents the 499 and let\u0027s just close it?","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b7ed2b4184941c5e3f0770d5af6abafcb43d4e9","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                    # Go ahead and consumer small bodies"},{"line_number":383,"context_line":"                    for _chunk in resp_iter:"},{"line_number":384,"context_line":"                        pass"},{"line_number":385,"context_line":"                close_if_possible(resp_iter)"},{"line_number":386,"context_line":"                response \u003d self.get_or_head_response("},{"line_number":387,"context_line":"                    req, wsgi_to_str(wsgi_unquote(value)))"},{"line_number":388,"context_line":"                return response(req.environ, start_response)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_a28ea476","line":385,"in_reply_to":"9f560f44_c7f12a6d","updated":"2020-09-15 18:51:52.000000000","message":"I\u0027ve had troubles with the GeneratorExit not immediately being raised when the iterator is closed. That\u0027s also why I took this approach in https://review.opendev.org/#/c/700959/ ... I should respin this to use that drain_and_close() helper :-/\n\nIt\u0027s probably something to do with iterator nesting and garbage collection -- might also explain my occasional deadlock at home that manifests like http://paste.openstack.org/show/797139/ ...","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"}],"swift/common/middleware/slo.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b7ed2b4184941c5e3f0770d5af6abafcb43d4e9","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        if not sub_resp.is_success:"},{"line_number":550,"context_line":"            # Error message should be short"},{"line_number":551,"context_line":"            body \u003d sub_resp.body"},{"line_number":552,"context_line":"            if not six.PY2:"},{"line_number":553,"context_line":"                body \u003d body.decode(\u0027utf-8\u0027)"},{"line_number":554,"context_line":"            msg \u003d (\u0027while fetching %s, GET of submanifest %s \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_a2e34434","line":551,"updated":"2020-09-15 18:51:52.000000000","message":"So this part is a little sneaky and could maybe use a comment -- the .body property reads and closes the underlying app iter, so this is about more than just logging.","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"}],"test/unit/common/middleware/test_dlo.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"865ed02c1a9453d83cc289137e4844d9a5597e71","unresolved":false,"context_lines":[{"line_number":363,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/mancon/big-manifest\u0027,"},{"line_number":364,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002717000\u0027, \u0027Etag\u0027: \u0027manifest-etag\u0027,"},{"line_number":365,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/seg\u0027},"},{"line_number":366,"context_line":"            b\u0027manifest-contents\u0027 * 1000)"},{"line_number":367,"context_line":"        req \u003d swob.Request.blank(\u0027/v1/AUTH_test/mancon/big-manifest\u0027,"},{"line_number":368,"context_line":"                                 environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":369,"context_line":"        status, headers, body \u003d self.call_dlo(req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_c7bf6a5e","line":366,"updated":"2020-09-15 18:29:03.000000000","message":"I\u0027m surprised to consider a non-zero-byte DLO manifest - perhaps we should enforce that?  I don\u0027t think we log 499 on a GET of a zero-byte object - i\u0027m not sure how practically relevant this is.","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b7ed2b4184941c5e3f0770d5af6abafcb43d4e9","unresolved":false,"context_lines":[{"line_number":363,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/mancon/big-manifest\u0027,"},{"line_number":364,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002717000\u0027, \u0027Etag\u0027: \u0027manifest-etag\u0027,"},{"line_number":365,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/seg\u0027},"},{"line_number":366,"context_line":"            b\u0027manifest-contents\u0027 * 1000)"},{"line_number":367,"context_line":"        req \u003d swob.Request.blank(\u0027/v1/AUTH_test/mancon/big-manifest\u0027,"},{"line_number":368,"context_line":"                                 environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":369,"context_line":"        status, headers, body \u003d self.call_dlo(req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_a2bce406","line":366,"in_reply_to":"9f560f44_c7bf6a5e","updated":"2020-09-15 18:51:52.000000000","message":"I\u0027ve definitely heard of clients (for better or worse) using the DLO manifest to store the first segment\u0027s data.","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"}],"test/unit/common/middleware/test_slo.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d4e413e4659d95830344227ddc6d340cd0f4935a","unresolved":false,"context_lines":[{"line_number":2000,"context_line":""},{"line_number":2001,"context_line":"    def tearDown(self):"},{"line_number":2002,"context_line":"        self.assertEqual(self.app.unclosed_requests, {})"},{"line_number":2003,"context_line":"        #self.assertEqual(self.app.unread_requests, {})"},{"line_number":2004,"context_line":""},{"line_number":2005,"context_line":"    def test_get_manifest_passthrough(self):"},{"line_number":2006,"context_line":"        req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_9bbf305f","line":2003,"updated":"2020-09-04 19:45:42.000000000","message":"pep8: E265 block comment should start with \u0027# \u0027","commit_id":"e1c906d50cfdc459459c07dddd9b3c24c565a776"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"865ed02c1a9453d83cc289137e4844d9a5597e71","unresolved":false,"context_lines":[{"line_number":3316,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":3317,"context_line":""},{"line_number":3318,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":3319,"context_line":"        self.assertEqual(self.app.unread_requests, {})"},{"line_number":3320,"context_line":"        self.assertEqual(self.slo.logger.get_lines_for_level(\u0027error\u0027), ["},{"line_number":3321,"context_line":"            \u0027while fetching /v1/AUTH_test/gettest/manifest-manifest-a, GET \u0027"},{"line_number":3322,"context_line":"            \u0027of submanifest /v1/AUTH_test/gettest/manifest-a failed with \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_47fd1a3a","line":3319,"updated":"2020-09-15 18:29:03.000000000","message":"nice.","commit_id":"1bb124d444940f1f5bd5156b42538d58c4cc00bf"}]}
