)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"990ff45743c50575e21f4114514702b6b37cd00c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a9039459_ec27d0d1","updated":"2022-01-18 21:05:07.000000000","message":"I\u0027m not sure the disconnect during resume change is needed - but this one seems to make sense separately ","commit_id":"7be5cb0ab2fd73b552ad64b72d8a07e7006ec721"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c05db83ea65cb0f4f03b26fe1bae7dfaf37ccb3f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4493f7b6_97d1f6ed","updated":"2022-01-18 22:25:20.000000000","message":"recheck","commit_id":"7be5cb0ab2fd73b552ad64b72d8a07e7006ec721"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"411ba0d92e871ee773cf1be7aca56ec06c4b320d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"532b11ec_433a867b","updated":"2022-01-19 17:43:46.000000000","message":"recheck","commit_id":"7be5cb0ab2fd73b552ad64b72d8a07e7006ec721"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8ff06e82fabf01ce6471d6bb7eade6f9558f55c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6feddd6d_08f49c69","updated":"2022-01-19 23:32:14.000000000","message":"recheck","commit_id":"7be5cb0ab2fd73b552ad64b72d8a07e7006ec721"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1ad19fde574b36869b6a452146d69d66cb445fc","unresolved":true,"context_lines":[{"line_number":2580,"context_line":"                            break"},{"line_number":2581,"context_line":"                        buf \u003d b\u0027\u0027"},{"line_number":2582,"context_line":"                        old_node \u003d self.node"},{"line_number":2583,"context_line":"                        new_source, new_node \u003d self._dig_for_source_and_node()"},{"line_number":2584,"context_line":"                        if new_source:"},{"line_number":2585,"context_line":"                            self.app.error_occurred("},{"line_number":2586,"context_line":"                                old_node, \u0027Trying to read EC fragment \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e95b807_8fb407f5","line":2583,"range":{"start_line":2583,"start_character":36,"end_line":2583,"end_character":44},"updated":"2021-06-17 16:34:30.000000000","message":"OK, so I take it this not only returns new_node but also updates self.node.","commit_id":"ac17619e848df8f2c450337ae73664e1f49370fa"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"b3b9a5c014c609f47788dccc668afc70582a8df9","unresolved":true,"context_lines":[{"line_number":2580,"context_line":"                            break"},{"line_number":2581,"context_line":"                        buf \u003d b\u0027\u0027"},{"line_number":2582,"context_line":"                        old_node \u003d self.node"},{"line_number":2583,"context_line":"                        new_source, new_node \u003d self._dig_for_source_and_node()"},{"line_number":2584,"context_line":"                        if new_source:"},{"line_number":2585,"context_line":"                            self.app.error_occurred("},{"line_number":2586,"context_line":"                                old_node, \u0027Trying to read EC fragment \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1b8728f_fc3edd55","line":2583,"range":{"start_line":2583,"start_character":36,"end_line":2583,"end_character":44},"in_reply_to":"3e95b807_8fb407f5","updated":"2021-07-15 23:56:11.000000000","message":"Indeed this is excessively confusing that self.node set by _source_and_node_gen. The self.node is also explicitly set with returns of _dig_for_source_and_node sometimes. Why do it twice? Which is right?","commit_id":"ac17619e848df8f2c450337ae73664e1f49370fa"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3580a8172a02f51ebf816b357bf02179677e784a","unresolved":true,"context_lines":[{"line_number":2583,"context_line":"                        new_source, new_node \u003d self._dig_for_source_and_node()"},{"line_number":2584,"context_line":"                        if new_source:"},{"line_number":2585,"context_line":"                            self.app.error_occurred("},{"line_number":2586,"context_line":"                                old_node, \u0027Trying to read EC fragment \u0027"},{"line_number":2587,"context_line":"                                \u0027during GET (retrying)\u0027)"},{"line_number":2588,"context_line":"                            # Close-out the connection as best as possible."},{"line_number":2589,"context_line":"                            if getattr(self.source, \u0027swift_conn\u0027, None):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f500d87_89620db6","line":2586,"updated":"2021-06-16 20:15:43.000000000","message":"this deserves it\u0027s own test","commit_id":"ac17619e848df8f2c450337ae73664e1f49370fa"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1ad19fde574b36869b6a452146d69d66cb445fc","unresolved":true,"context_lines":[{"line_number":2716,"context_line":"                        if end - begin + 1 \u003d\u003d self.bytes_used_from_backend:"},{"line_number":2717,"context_line":"                            warn \u003d False"},{"line_number":2718,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2719,"context_line":"                req.environ[\u0027swift.client_disconnect\u0027] \u003d True"},{"line_number":2720,"context_line":"                self.app.logger.warning("},{"line_number":2721,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2722,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"874173b4_71c99c98","line":2719,"updated":"2021-06-17 16:34:30.000000000","message":":-/ I don\u0027t like that we\u0027ve got these two keys that mean almost-but-not-quite opposite things.","commit_id":"ac17619e848df8f2c450337ae73664e1f49370fa"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"b3b9a5c014c609f47788dccc668afc70582a8df9","unresolved":true,"context_lines":[{"line_number":2716,"context_line":"                        if end - begin + 1 \u003d\u003d self.bytes_used_from_backend:"},{"line_number":2717,"context_line":"                            warn \u003d False"},{"line_number":2718,"context_line":"            if not req.environ.get(\u0027swift.non_client_disconnect\u0027) and warn:"},{"line_number":2719,"context_line":"                req.environ[\u0027swift.client_disconnect\u0027] \u003d True"},{"line_number":2720,"context_line":"                self.app.logger.warning("},{"line_number":2721,"context_line":"                    \u0027Client disconnected on read of EC frag %r\u0027, self.path)"},{"line_number":2722,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"a426d1c6_53755d38","line":2719,"in_reply_to":"874173b4_71c99c98","updated":"2021-07-15 23:56:11.000000000","message":"Maybe \"was_client_disconnect\", \"clnt_dsc_occrd\", or something.","commit_id":"ac17619e848df8f2c450337ae73664e1f49370fa"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"990ff45743c50575e21f4114514702b6b37cd00c","unresolved":true,"context_lines":[{"line_number":2579,"context_line":"                        new_source, new_node \u003d self._dig_for_source_and_node()"},{"line_number":2580,"context_line":"                        if new_source:"},{"line_number":2581,"context_line":"                            self.app.error_occurred("},{"line_number":2582,"context_line":"                                old_node, \u0027Trying to read EC fragment \u0027"},{"line_number":2583,"context_line":"                                \u0027during GET (retrying)\u0027)"},{"line_number":2584,"context_line":"                            # Close-out the connection as best as possible."},{"line_number":2585,"context_line":"                            if getattr(self.source, \u0027swift_conn\u0027, None):"}],"source_content_type":"text/x-python","patch_set":3,"id":"e7430c7f_efb6aac3","line":2582,"updated":"2022-01-18 21:05:07.000000000","message":"hopefully this is pretty obvious","commit_id":"7be5cb0ab2fd73b552ad64b72d8a07e7006ec721"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3580a8172a02f51ebf816b357bf02179677e784a","unresolved":true,"context_lines":[{"line_number":2346,"context_line":"                              headers\u003dheaders) as log:"},{"line_number":2347,"context_line":"            resp \u003d req.get_response(self.app)"},{"line_number":2348,"context_line":"            self.assertEqual(resp.status_int, 200)"},{"line_number":2349,"context_line":"            resp.app_iter.close()"},{"line_number":2350,"context_line":"        self.assertEqual(len(log.requests),"},{"line_number":2351,"context_line":"                         self.policy.ec_ndata + num_slow)"},{"line_number":2352,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7d0f5ff5_5780a319","line":2349,"updated":"2021-06-16 20:15:43.000000000","message":"i don\u0027t think this is actually hitting the race where the hub might service a ECFragGetter that\u0027s timed out and try to resume after a client has already disconnected... but it\u0027s rolling over the relevant code to some extent.","commit_id":"ac17619e848df8f2c450337ae73664e1f49370fa"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"990ff45743c50575e21f4114514702b6b37cd00c","unresolved":true,"context_lines":[{"line_number":2361,"context_line":"            }"},{"line_number":2362,"context_line":"            for r in log.requests[:4]"},{"line_number":2363,"context_line":"        }"},{"line_number":2364,"context_line":"        self.assertEqual(self.app._error_limiting, expected_error_limiting)"},{"line_number":2365,"context_line":""},{"line_number":2366,"context_line":"    def test_GET_not_found_when_404_newer(self):"},{"line_number":2367,"context_line":"        # if proxy receives a 404, it keeps waiting for other connections until"}],"source_content_type":"text/x-python","patch_set":3,"id":"59b0f84b_51b35537","line":2364,"updated":"2022-01-18 21:05:07.000000000","message":"but if not there\u0027s this ...\n\n\tFAIL: test_GET_disconnect (test.unit.proxy.controllers.test_obj.TestECObjController)\n\t----------------------------------------------------------------------\n\tTraceback (most recent call last):\n\t  File \"/home/vagrant/swift/test/unit/proxy/controllers/test_obj.py\", line 2364, in test_GET_disconnect\n\t    self.assertEqual(self.app._error_limiting, expected_error_limiting)\n\tAssertionError: {\u002710.0.0.7:1007/sdh\u0027: {\u0027last_error\u0027: 1642539819.116878, \u0027errors\u0027: 1}, \u002710.0.0.8: [truncated]... !\u003d {\u002710.0.0.11:1011/sdl\u0027: {\u0027last_error\u0027: \u003cANY\u003e, \u0027errors\u0027: 1}, \u002710.0.0.2:1002/sdc\u0027:  [truncated]...","commit_id":"7be5cb0ab2fd73b552ad64b72d8a07e7006ec721"}]}
