)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1e76ef7b0b26940563ab42f90bfc6cae6945441f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fc84fb87_be7f95cb","updated":"2023-08-18 16:21:39.000000000","message":"recheck\n\nhttps://bugs.launchpad.net/swift/+bug/2028175","commit_id":"336c643387390ee84b674b5cb7a9f6539efba76e"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a77219c1d62700c3c4a7cce35363e16d48cce5a","unresolved":true,"context_lines":[{"line_number":1357,"context_line":"            # s3api.backend_path - hopefully by now any modifications to the"},{"line_number":1358,"context_line":"            # path (e.g. tenant to account translation) will have been made by"},{"line_number":1359,"context_line":"            # auth middleware"},{"line_number":1360,"context_line":"            self.environ[\u0027s3api.backend_path\u0027] \u003d sw_req.environ[\u0027PATH_INFO\u0027]"},{"line_number":1361,"context_line":"            sw_resp \u003d err"},{"line_number":1362,"context_line":"        else:"},{"line_number":1363,"context_line":"            # reuse account"}],"source_content_type":"text/x-python","patch_set":2,"id":"83cc3f31_b8f1351e","line":1360,"updated":"2023-08-16 22:26:28.000000000","message":"Maybe we even want a `finally:` block?","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1e76ef7b0b26940563ab42f90bfc6cae6945441f","unresolved":false,"context_lines":[{"line_number":1357,"context_line":"            # s3api.backend_path - hopefully by now any modifications to the"},{"line_number":1358,"context_line":"            # path (e.g. tenant to account translation) will have been made by"},{"line_number":1359,"context_line":"            # auth middleware"},{"line_number":1360,"context_line":"            self.environ[\u0027s3api.backend_path\u0027] \u003d sw_req.environ[\u0027PATH_INFO\u0027]"},{"line_number":1361,"context_line":"            sw_resp \u003d err"},{"line_number":1362,"context_line":"        else:"},{"line_number":1363,"context_line":"            # reuse account"}],"source_content_type":"text/x-python","patch_set":2,"id":"1458a767_bc8bd912","line":1360,"in_reply_to":"6c48b63d_16736991","updated":"2023-08-18 16:21:39.000000000","message":"Ah, right! I missed that in the first pass. Agreed that they _should_ be the same `environ`, but I\u0027m also not confident enough to actually commit to it.","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6413ca43d339f3a720ddc3c0e4d5eea905f40152","unresolved":true,"context_lines":[{"line_number":1357,"context_line":"            # s3api.backend_path - hopefully by now any modifications to the"},{"line_number":1358,"context_line":"            # path (e.g. tenant to account translation) will have been made by"},{"line_number":1359,"context_line":"            # auth middleware"},{"line_number":1360,"context_line":"            self.environ[\u0027s3api.backend_path\u0027] \u003d sw_req.environ[\u0027PATH_INFO\u0027]"},{"line_number":1361,"context_line":"            sw_resp \u003d err"},{"line_number":1362,"context_line":"        else:"},{"line_number":1363,"context_line":"            # reuse account"}],"source_content_type":"text/x-python","patch_set":2,"id":"6c48b63d_16736991","line":1360,"in_reply_to":"83cc3f31_b8f1351e","updated":"2023-08-18 14:46:32.000000000","message":"here we use sw_req (there is no sw_resp), in the else clause we use sw_resp ... they would *probably* have the same PATH_INFO but I\u0027m not confident to combine them in a finally","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a77219c1d62700c3c4a7cce35363e16d48cce5a","unresolved":true,"context_lines":[{"line_number":1362,"context_line":"        else:"},{"line_number":1363,"context_line":"            # reuse account"},{"line_number":1364,"context_line":"            _, self.account, _ \u003d split_path(sw_resp.environ[\u0027PATH_INFO\u0027],"},{"line_number":1365,"context_line":"                                            2, 3, True)"},{"line_number":1366,"context_line":"            # Update s3.backend_path from the response environ"},{"line_number":1367,"context_line":"            self.environ[\u0027s3api.backend_path\u0027] \u003d sw_resp.environ[\u0027PATH_INFO\u0027]"},{"line_number":1368,"context_line":"            # Propogate backend headers back into our req headers for logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffde6bc9_83cd74e3","line":1365,"updated":"2023-08-16 22:26:28.000000000","message":"I don\u0027t *think* it\u0027s significant that we wait until after this `split_path` so set the backend-path...","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"}],"test/unit/common/middleware/helpers.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a77219c1d62700c3c4a7cce35363e16d48cce5a","unresolved":true,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        # now we have captured the call, raise any exception from reading body"},{"line_number":222,"context_line":"        if isinstance(req_body, Exception):"},{"line_number":223,"context_line":"            raise req_body"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self.req_bodies.append(req_body)"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"f84b8c66_724e1948","line":223,"updated":"2023-08-16 22:26:28.000000000","message":"Hmm... we\u0027ll lose the original stack this way...","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6413ca43d339f3a720ddc3c0e4d5eea905f40152","unresolved":true,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        # now we have captured the call, raise any exception from reading body"},{"line_number":222,"context_line":"        if isinstance(req_body, Exception):"},{"line_number":223,"context_line":"            raise req_body"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self.req_bodies.append(req_body)"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"cc77f0ac_d1efbd71","line":223,"in_reply_to":"f84b8c66_724e1948","updated":"2023-08-18 14:46:32.000000000","message":"good point. I\u0027ll try another approach.","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1e76ef7b0b26940563ab42f90bfc6cae6945441f","unresolved":true,"context_lines":[{"line_number":166,"context_line":"                ignore_range_meta.split(\u0027,\u0027)).intersection(headers.keys()):"},{"line_number":167,"context_line":"            req.headers.pop(\u0027range\u0027, None)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        # Update req.headers before capturing the request"},{"line_number":170,"context_line":"        if method in (\u0027GET\u0027, \u0027HEAD\u0027) and obj:"},{"line_number":171,"context_line":"            req.headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d headers.get("},{"line_number":172,"context_line":"                \u0027x-backend-storage-policy-index\u0027, \u00272\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bce0cc95_47d9b553","line":169,"updated":"2023-08-18 16:21:39.000000000","message":"Hmmm... I realize this was existing behavior, but in retrospect, it seems very strange...","commit_id":"336c643387390ee84b674b5cb7a9f6539efba76e"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0a77219c1d62700c3c4a7cce35363e16d48cce5a","unresolved":true,"context_lines":[{"line_number":1575,"context_line":"                      warning_lines[0])"},{"line_number":1576,"context_line":"        self.assertEqual(self.replicas(), len(conns))"},{"line_number":1577,"context_line":"        for conn in conns:"},{"line_number":1578,"context_line":"            self.assertTrue(conn.closed)"},{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_PUT_exception_during_transfer_data(self):"},{"line_number":1581,"context_line":"        class FakeReader(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9c57835f_c3e1cd50","line":1578,"updated":"2023-08-16 22:26:28.000000000","message":"So this already passes on master 👍","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6413ca43d339f3a720ddc3c0e4d5eea905f40152","unresolved":false,"context_lines":[{"line_number":1575,"context_line":"                      warning_lines[0])"},{"line_number":1576,"context_line":"        self.assertEqual(self.replicas(), len(conns))"},{"line_number":1577,"context_line":"        for conn in conns:"},{"line_number":1578,"context_line":"            self.assertTrue(conn.closed)"},{"line_number":1579,"context_line":""},{"line_number":1580,"context_line":"    def test_PUT_exception_during_transfer_data(self):"},{"line_number":1581,"context_line":"        class FakeReader(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fc232de7_382abdb3","line":1578,"in_reply_to":"9c57835f_c3e1cd50","updated":"2023-08-18 14:46:32.000000000","message":"this ended up being incidental - but I think it plugs a gap in coverage","commit_id":"16b9cb39a0c7ff92038a0429fcfcad1ee43783c4"}]}
