)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1c57768e62afd6f8f66370d83fa5c4debdcb1abd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"12714c5d_29d85cdb","updated":"2023-10-03 19:34:10.000000000","message":"i doubt the probetest failure is related:\n\n```\n...\ntest/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_listing_no_replicators\ntest/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_listing_no_replicators\ntest/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_listing_no_replicators\ntest/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_listing_no_replicators\ntest/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_listing_no_replicators\ntest/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_listing_no_replicators\ntest/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_listing_no_replicators\n...\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d 1 failed, 1 passed, 57 deselected, 218 warnings in 82.75 seconds \u003d\u003d\u003d\u003d\u003d\u003d\u003d\n```","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ad7dc99e2d06e78de2b385b81a024a06c253ad42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e79a1f49_f6735a7d","updated":"2023-10-04 10:03:53.000000000","message":"squashing this to parent","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1c57768e62afd6f8f66370d83fa5c4debdcb1abd","unresolved":true,"context_lines":[{"line_number":1279,"context_line":"            app\u003dapp, req\u003dreq, node_iter\u003dnode_iter,"},{"line_number":1280,"context_line":"            partition\u003dpartition, policy\u003dpolicy, path\u003dpath,"},{"line_number":1281,"context_line":"            backend_headers\u003dbackend_headers, node_timeout\u003dnode_timeout,"},{"line_number":1282,"context_line":"            resource_type\u003d\u0027object\u0027,"},{"line_number":1283,"context_line":"            logger\u003dlogger)"},{"line_number":1284,"context_line":"        self.server_type \u003d server_type"},{"line_number":1285,"context_line":"        self.used_nodes \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"590e44ea_606aaedf","side":"PARENT","line":1282,"updated":"2023-10-03 19:34:10.000000000","message":"given the test perhaps it would make more sense to call this:\n\n    resource_is_retryable\u003dserver_type in (\u0027Object\u0027, \u0027EC Frag Getter\u0027)","commit_id":"149b927450847ec736604e50d2ec2a42816b3caa"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ad7dc99e2d06e78de2b385b81a024a06c253ad42","unresolved":true,"context_lines":[{"line_number":1279,"context_line":"            app\u003dapp, req\u003dreq, node_iter\u003dnode_iter,"},{"line_number":1280,"context_line":"            partition\u003dpartition, policy\u003dpolicy, path\u003dpath,"},{"line_number":1281,"context_line":"            backend_headers\u003dbackend_headers, node_timeout\u003dnode_timeout,"},{"line_number":1282,"context_line":"            resource_type\u003d\u0027object\u0027,"},{"line_number":1283,"context_line":"            logger\u003dlogger)"},{"line_number":1284,"context_line":"        self.server_type \u003d server_type"},{"line_number":1285,"context_line":"        self.used_nodes \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"c38c87f2_22330256","side":"PARENT","line":1282,"in_reply_to":"590e44ea_606aaedf","updated":"2023-10-04 10:03:53.000000000","message":"resource_type does not determine retrying, x-newest is involved too, and it is implemented in the subclass\n\nOn reflection, the test is somewhat orthogonal to the significance of resource_type: but the different treatments of retrying at least reveals the log message in which resource_type is used.","commit_id":"149b927450847ec736604e50d2ec2a42816b3caa"}],"test/unit/proxy/controllers/test_base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1c57768e62afd6f8f66370d83fa5c4debdcb1abd","unresolved":true,"context_lines":[{"line_number":1757,"context_line":"            req \u003d Request.blank(\u0027/v1/a/c/o\u0027)"},{"line_number":1758,"context_line":"            headers \u003d {\u0027content-type\u0027: \u0027text/plain\u0027}"},{"line_number":1759,"context_line":"            # provoke a read timeout..."},{"line_number":1760,"context_line":"            sources \u003d [FakeSource([None, \u0027body\u0027], headers\u003dheaders)]"},{"line_number":1761,"context_line":"            self.app.node_timeout \u003d self.app.recoverable_node_timeout \u003d 0.01"},{"line_number":1762,"context_line":"            node \u003d {\u0027ip\u0027: \u00271.2.3.4\u0027, \u0027port\u0027: 6200, \u0027device\u0027: \u0027sda\u0027}"},{"line_number":1763,"context_line":"            handler \u003d GetOrHeadHandler("}],"source_content_type":"text/x-python","patch_set":2,"id":"0431f641_adeabfe4","line":1760,"updated":"2023-10-03 19:34:10.000000000","message":"ok, only one source","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ad7dc99e2d06e78de2b385b81a024a06c253ad42","unresolved":false,"context_lines":[{"line_number":1757,"context_line":"            req \u003d Request.blank(\u0027/v1/a/c/o\u0027)"},{"line_number":1758,"context_line":"            headers \u003d {\u0027content-type\u0027: \u0027text/plain\u0027}"},{"line_number":1759,"context_line":"            # provoke a read timeout..."},{"line_number":1760,"context_line":"            sources \u003d [FakeSource([None, \u0027body\u0027], headers\u003dheaders)]"},{"line_number":1761,"context_line":"            self.app.node_timeout \u003d self.app.recoverable_node_timeout \u003d 0.01"},{"line_number":1762,"context_line":"            node \u003d {\u0027ip\u0027: \u00271.2.3.4\u0027, \u0027port\u0027: 6200, \u0027device\u0027: \u0027sda\u0027}"},{"line_number":1763,"context_line":"            handler \u003d GetOrHeadHandler("}],"source_content_type":"text/x-python","patch_set":2,"id":"4ed29adb_a5b231bd","line":1760,"in_reply_to":"0431f641_adeabfe4","updated":"2023-10-04 10:03:53.000000000","message":"Ack","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fc203b407191bf7898adb1ed569b067779708abd","unresolved":true,"context_lines":[{"line_number":1776,"context_line":"                resp \u003d handler.get_working_response(req)"},{"line_number":1777,"context_line":"                b\u0027\u0027.join(resp.app_iter)"},{"line_number":1778,"context_line":""},{"line_number":1779,"context_line":"        # for the object server type the handler retries before raising timeout"},{"line_number":1780,"context_line":"        with self.assertRaises(ChunkReadTimeout):"},{"line_number":1781,"context_line":"            do_test(\u0027Object\u0027)"},{"line_number":1782,"context_line":"        lines \u003d self.logger.get_lines_for_level(\u0027error\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f2cec80b_fb1cce43","line":1779,"updated":"2023-10-04 10:34:08.000000000","message":"I\u0027m going to add a case with x-newest -\u003e no retries!","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1c57768e62afd6f8f66370d83fa5c4debdcb1abd","unresolved":true,"context_lines":[{"line_number":1781,"context_line":"            do_test(\u0027Object\u0027)"},{"line_number":1782,"context_line":"        lines \u003d self.logger.get_lines_for_level(\u0027error\u0027)"},{"line_number":1783,"context_line":"        self.assertEqual(1, len(lines))"},{"line_number":1784,"context_line":"        self.assertIn(\u0027Trying to read object during GET (retrying)\u0027, lines[0])"},{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":"        # for other server types the handler will raise the timeout"},{"line_number":1787,"context_line":"        self.logger.clear()"}],"source_content_type":"text/x-python","patch_set":2,"id":"6fa3d19f_1c239141","line":1784,"updated":"2023-10-03 19:34:10.000000000","message":"there\u0027s no error line about \"unable to find a replacement node\"??? I guess that would have been in the real_find_source?","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ad7dc99e2d06e78de2b385b81a024a06c253ad42","unresolved":false,"context_lines":[{"line_number":1781,"context_line":"            do_test(\u0027Object\u0027)"},{"line_number":1782,"context_line":"        lines \u003d self.logger.get_lines_for_level(\u0027error\u0027)"},{"line_number":1783,"context_line":"        self.assertEqual(1, len(lines))"},{"line_number":1784,"context_line":"        self.assertIn(\u0027Trying to read object during GET (retrying)\u0027, lines[0])"},{"line_number":1785,"context_line":""},{"line_number":1786,"context_line":"        # for other server types the handler will raise the timeout"},{"line_number":1787,"context_line":"        self.logger.clear()"}],"source_content_type":"text/x-python","patch_set":2,"id":"d4b0d0db_106a0d73","line":1784,"in_reply_to":"6fa3d19f_1c239141","updated":"2023-10-04 10:03:53.000000000","message":"actually, I don\u0027t think there is that kind of error log IRL either :/ It would be nice to add (or raise a NoMoreNodes kind of exception)","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1c57768e62afd6f8f66370d83fa5c4debdcb1abd","unresolved":true,"context_lines":[{"line_number":1787,"context_line":"        self.logger.clear()"},{"line_number":1788,"context_line":"        with self.assertRaises(ChunkReadTimeout):"},{"line_number":1789,"context_line":"            do_test(\u0027Container\u0027)"},{"line_number":1790,"context_line":"        self.assertFalse(self.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":1791,"context_line":""},{"line_number":1792,"context_line":"    def test_range_fast_forward(self):"},{"line_number":1793,"context_line":"        req \u003d Request.blank(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"46b8a19f_a2daed77","line":1790,"updated":"2023-10-03 19:34:10.000000000","message":"oh goodness more coupling of different concrete behaviors in a single complicated abstraction.  This test is nice for demonstrating the difference - kudos.","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ad7dc99e2d06e78de2b385b81a024a06c253ad42","unresolved":false,"context_lines":[{"line_number":1787,"context_line":"        self.logger.clear()"},{"line_number":1788,"context_line":"        with self.assertRaises(ChunkReadTimeout):"},{"line_number":1789,"context_line":"            do_test(\u0027Container\u0027)"},{"line_number":1790,"context_line":"        self.assertFalse(self.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":1791,"context_line":""},{"line_number":1792,"context_line":"    def test_range_fast_forward(self):"},{"line_number":1793,"context_line":"        req \u003d Request.blank(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"731efc22_ba410c54","line":1790,"in_reply_to":"46b8a19f_a2daed77","updated":"2023-10-04 10:03:53.000000000","message":"yup. There\u0027s all sorts of stuff bundled into GetOrHeadHandler e.g. fixing up storage policy in response headers, which is specific to containers IIUC.","commit_id":"b446b5012295eda95d983e59ed657cb18a35a12f"}]}
