)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"e11fc5d68e0138cc14487ee60e5c513639c01322","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ba02013e_defddba5","updated":"2023-11-18 01:47:53.000000000","message":"LGTM.","commit_id":"1bc35ca77f09840562cb27364a0cc3e9827ccc4a"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"914822dd73a44f5ca98d8880281ab9d4cf879480","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d94e71c6_e96d06de","updated":"2023-11-21 19:59:02.000000000","message":"I\u0027m not a big fan of dropping tests while moving them like test_get_shard_ranges_for_container_get, but I figured that sharding was Alistair and Matt\u0027s domain anyway.","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8540a70c_30d61338","updated":"2023-11-21 22:27:14.000000000","message":"this is a faithful re-home of the existing method to help clarify how it\u0027s actually used and I fully support it.\n\nI went looking for (existing) test coverage gaps but don\u0027t think there\u0027s anything to worry about:\n\n901633: tests: targeted tests for _get_updating_shard_ranges consumers | https://review.opendev.org/c/openstack/swift/+/901633","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":true,"context_lines":[{"line_number":2431,"context_line":"            return None"},{"line_number":2432,"context_line":""},{"line_number":2433,"context_line":"    def _get_container_listing(self, req, account, container, headers\u003dNone,"},{"line_number":2434,"context_line":"                               params\u003dNone):"},{"line_number":2435,"context_line":"        \"\"\""},{"line_number":2436,"context_line":"        Fetch container listing from given `account/container`."},{"line_number":2437,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"6cea0445_89f35021","line":2434,"updated":"2023-11-21 22:27:14.000000000","message":"still used in proxy.controllers.container _get_from_shards\n\n... and now in proxy.controllers.obj _get_updating_shard_ranges","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":true,"context_lines":[{"line_number":2460,"context_line":"        data \u003d self._parse_listing_response(req, response)"},{"line_number":2461,"context_line":"        return data, response"},{"line_number":2462,"context_line":""},{"line_number":2463,"context_line":"    def _parse_shard_ranges(self, req, listing, response):"},{"line_number":2464,"context_line":"        if listing is None:"},{"line_number":2465,"context_line":"            return None"},{"line_number":2466,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f4d7d340_1a76411f","line":2463,"updated":"2023-11-21 22:27:14.000000000","message":"still used proxy.controllers.container _store_shard_ranges_in_cache\n\n... and now in proxy.controllers.obj _get_updating_shard_ranges","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"578c7f223afe022d9a65da68b3fe6d9bcbe0b793","unresolved":false,"context_lines":[{"line_number":2460,"context_line":"        data \u003d self._parse_listing_response(req, response)"},{"line_number":2461,"context_line":"        return data, response"},{"line_number":2462,"context_line":""},{"line_number":2463,"context_line":"    def _parse_shard_ranges(self, req, listing, response):"},{"line_number":2464,"context_line":"        if listing is None:"},{"line_number":2465,"context_line":"            return None"},{"line_number":2466,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3c596def_8a9c33ad","line":2463,"in_reply_to":"f4d7d340_1a76411f","updated":"2023-11-22 12:53:36.000000000","message":"Acknowledged","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":true,"context_lines":[{"line_number":282,"context_line":"        return self.GETorHEAD(req)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_updating_shard_ranges("},{"line_number":285,"context_line":"            self, req, account, container, includes\u003dNone):"},{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        Fetch shard ranges in \u0027updating\u0027 states from given `account/container`."},{"line_number":288,"context_line":"        If `includes` is given then the shard range for that object name is"}],"source_content_type":"text/x-python","patch_set":5,"id":"8a034a47_c282a6ea","line":285,"updated":"2023-11-21 22:27:14.000000000","message":"neat!  we don\u0027t have to pass states\u003d anymore, since it\u0027s only used in obj we only ever updating.","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"578c7f223afe022d9a65da68b3fe6d9bcbe0b793","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        return self.GETorHEAD(req)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _get_updating_shard_ranges("},{"line_number":285,"context_line":"            self, req, account, container, includes\u003dNone):"},{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        Fetch shard ranges in \u0027updating\u0027 states from given `account/container`."},{"line_number":288,"context_line":"        If `includes` is given then the shard range for that object name is"}],"source_content_type":"text/x-python","patch_set":5,"id":"91d2aec4_aa7d5fa8","line":285,"in_reply_to":"8a034a47_c282a6ea","updated":"2023-11-22 12:53:36.000000000","message":"Acknowledged","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":true,"context_lines":[{"line_number":299,"context_line":"        params \u003d req.params.copy()"},{"line_number":300,"context_line":"        params.pop(\u0027limit\u0027, None)"},{"line_number":301,"context_line":"        params[\u0027format\u0027] \u003d \u0027json\u0027"},{"line_number":302,"context_line":"        params[\u0027states\u0027] \u003d \u0027updating\u0027"},{"line_number":303,"context_line":"        if includes:"},{"line_number":304,"context_line":"            params[\u0027includes\u0027] \u003d str_to_wsgi(includes)"},{"line_number":305,"context_line":"        headers \u003d {\u0027X-Backend-Record-Type\u0027: \u0027shard\u0027}"}],"source_content_type":"text/x-python","patch_set":5,"id":"c82f40d7_883e43b7","line":302,"updated":"2023-11-21 22:27:14.000000000","message":"hard coded to reflect the only use-case","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"578c7f223afe022d9a65da68b3fe6d9bcbe0b793","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        params \u003d req.params.copy()"},{"line_number":300,"context_line":"        params.pop(\u0027limit\u0027, None)"},{"line_number":301,"context_line":"        params[\u0027format\u0027] \u003d \u0027json\u0027"},{"line_number":302,"context_line":"        params[\u0027states\u0027] \u003d \u0027updating\u0027"},{"line_number":303,"context_line":"        if includes:"},{"line_number":304,"context_line":"            params[\u0027includes\u0027] \u003d str_to_wsgi(includes)"},{"line_number":305,"context_line":"        headers \u003d {\u0027X-Backend-Record-Type\u0027: \u0027shard\u0027}"}],"source_content_type":"text/x-python","patch_set":5,"id":"da8c8216_878a56a9","line":302,"in_reply_to":"c82f40d7_883e43b7","updated":"2023-11-22 12:53:36.000000000","message":"Acknowledged","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":true,"context_lines":[{"line_number":307,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":308,"context_line":"        return self._parse_shard_ranges(req, listing, response), response"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _get_update_shard_caching_disabled(self, req, account, container, obj):"},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        Fetch all updating shard ranges for the given root container when"},{"line_number":313,"context_line":"        all caching is disabled."}],"source_content_type":"text/x-python","patch_set":5,"id":"b1fdcdcc_31e748aa","line":310,"updated":"2023-11-21 22:27:14.000000000","message":"this is kind of an interesting/thing wrapper around _get_updating_shard_ranges","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"578c7f223afe022d9a65da68b3fe6d9bcbe0b793","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            req, account, container, headers\u003dheaders, params\u003dparams)"},{"line_number":308,"context_line":"        return self._parse_shard_ranges(req, listing, response), response"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _get_update_shard_caching_disabled(self, req, account, container, obj):"},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        Fetch all updating shard ranges for the given root container when"},{"line_number":313,"context_line":"        all caching is disabled."}],"source_content_type":"text/x-python","patch_set":5,"id":"c41c089a_a2c128d9","line":310,"in_reply_to":"b1fdcdcc_31e748aa","updated":"2023-11-22 12:53:36.000000000","message":"Acknowledged","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":true,"context_lines":[{"line_number":346,"context_line":"        if not self.app.recheck_updating_shard_ranges:"},{"line_number":347,"context_line":"            # caching is disabled"},{"line_number":348,"context_line":"            return self._get_update_shard_caching_disabled("},{"line_number":349,"context_line":"                req, account, container, obj)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # caching is enabled, try to get from caches"},{"line_number":352,"context_line":"        response \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"88ec5cf1_8df38451","line":349,"updated":"2023-11-21 22:27:14.000000000","message":"this is where we dispatch to includes\u003dobj","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"578c7f223afe022d9a65da68b3fe6d9bcbe0b793","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        if not self.app.recheck_updating_shard_ranges:"},{"line_number":347,"context_line":"            # caching is disabled"},{"line_number":348,"context_line":"            return self._get_update_shard_caching_disabled("},{"line_number":349,"context_line":"                req, account, container, obj)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        # caching is enabled, try to get from caches"},{"line_number":352,"context_line":"        response \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"b93f01c1_ff0074c1","line":349,"in_reply_to":"88ec5cf1_8df38451","updated":"2023-11-22 12:53:36.000000000","message":"Acknowledged","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"}],"test/unit/proxy/controllers/test_base.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"e11fc5d68e0138cc14487ee60e5c513639c01322","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"        self.assertEqual(bytes_to_skip(11, 7), 4)"},{"line_number":1469,"context_line":"        self.assertEqual(bytes_to_skip(97, 7873823), 55)"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"    def test_get_shard_ranges_for_container_get(self):"},{"line_number":1472,"context_line":"        ts_iter \u003d make_timestamp_iter()"},{"line_number":1473,"context_line":"        shard_ranges \u003d [dict(ShardRange("},{"line_number":1474,"context_line":"            \u0027.sharded_a/sr%d\u0027 % i, next(ts_iter), \u0027%d_lower\u0027 % i,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c8ae0ade_f0bacbcf","side":"PARENT","line":1471,"updated":"2023-11-18 01:47:53.000000000","message":"so this test cases is removed, since it\u0027s needed for ObjectController.","commit_id":"38366a564f57fc2c9e807ea0b8f7c002f0ccf91a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"578c7f223afe022d9a65da68b3fe6d9bcbe0b793","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"        self.assertEqual(bytes_to_skip(11, 7), 4)"},{"line_number":1469,"context_line":"        self.assertEqual(bytes_to_skip(97, 7873823), 55)"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"    def test_get_shard_ranges_for_container_get(self):"},{"line_number":1472,"context_line":"        ts_iter \u003d make_timestamp_iter()"},{"line_number":1473,"context_line":"        shard_ranges \u003d [dict(ShardRange("},{"line_number":1474,"context_line":"            \u0027.sharded_a/sr%d\u0027 % i, next(ts_iter), \u0027%d_lower\u0027 % i,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a676ab2c_c7a2ce5f","side":"PARENT","line":1471,"in_reply_to":"a170a36f_867c3646","updated":"2023-11-22 12:53:36.000000000","message":"Done","commit_id":"38366a564f57fc2c9e807ea0b8f7c002f0ccf91a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"06afd9147deb9787a74e35013bd6df957be3d9f3","unresolved":true,"context_lines":[{"line_number":1468,"context_line":"        self.assertEqual(bytes_to_skip(11, 7), 4)"},{"line_number":1469,"context_line":"        self.assertEqual(bytes_to_skip(97, 7873823), 55)"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"    def test_get_shard_ranges_for_container_get(self):"},{"line_number":1472,"context_line":"        ts_iter \u003d make_timestamp_iter()"},{"line_number":1473,"context_line":"        shard_ranges \u003d [dict(ShardRange("},{"line_number":1474,"context_line":"            \u0027.sharded_a/sr%d\u0027 % i, next(ts_iter), \u0027%d_lower\u0027 % i,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a170a36f_867c3646","side":"PARENT","line":1471,"in_reply_to":"c8ae0ade_f0bacbcf","updated":"2023-11-20 12:15:14.000000000","message":"this test didn\u0027t relate to a real world use case, and makes even less sense once the test is in test_obj.py\n\nI think we maybe once thought that the method could be re-used from base.py, but it hasn\u0027t been.","commit_id":"38366a564f57fc2c9e807ea0b8f7c002f0ccf91a"}],"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":"90b422a3c9225eeb8c6a43ffb351d975f63809db","unresolved":true,"context_lines":[{"line_number":7344,"context_line":"        warning_lines \u003d self.app.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":7345,"context_line":"        self.assertIn(\u0027Failed to get container listing\u0027, warning_lines[0])"},{"line_number":7346,"context_line":"        self.assertIn(\u0027/a/c\u0027, warning_lines[0])"},{"line_number":7347,"context_line":"        self.assertFalse(warning_lines[1:])"},{"line_number":7348,"context_line":""},{"line_number":7349,"context_line":""},{"line_number":7350,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"61edbe8f_3dfbc3e6","line":7347,"updated":"2023-11-21 22:27:14.000000000","message":"as near as I can tell ALL of these tests hit the ?includes\u003d1_test param case\n\nthe actual \"get all the shard ranges and cache them\" behavior we care about from _get_update_shard is covered by test_server:\n\ne.g. \n\nswift/test/unit/proxy/test_server.py::TestReplicatedObjectController::test_backend_headers_update_shard_container_with_empty_cache","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"578c7f223afe022d9a65da68b3fe6d9bcbe0b793","unresolved":false,"context_lines":[{"line_number":7344,"context_line":"        warning_lines \u003d self.app.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":7345,"context_line":"        self.assertIn(\u0027Failed to get container listing\u0027, warning_lines[0])"},{"line_number":7346,"context_line":"        self.assertIn(\u0027/a/c\u0027, warning_lines[0])"},{"line_number":7347,"context_line":"        self.assertFalse(warning_lines[1:])"},{"line_number":7348,"context_line":""},{"line_number":7349,"context_line":""},{"line_number":7350,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"0f014677_f549139b","line":7347,"in_reply_to":"61edbe8f_3dfbc3e6","updated":"2023-11-22 12:53:36.000000000","message":"I add a test for the \"no includes\" case in a later patch https://review.opendev.org/c/openstack/swift/+/895602/25/test/unit/proxy/controllers/test_obj.py#7202","commit_id":"6f890d2ba92a2b2a83db791e7af3e0aad661b01a"}]}
