)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d961ae5a48ac9897c8af5d54e5956da964a0f284","unresolved":true,"context_lines":[{"line_number":10,"context_line":"if it is sent. I\u0027m inclined to default to it being supported with"},{"line_number":11,"context_line":"namespaces to further reduce the difference between the namespace and"},{"line_number":12,"context_line":"full format version of the API. The extra work is just tests, the"},{"line_number":13,"context_line":"support is there by default anyway."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I298c09d9786d0c1cac950b96080179970dbdd286"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"8845ca88_c000257b","line":13,"updated":"2024-01-04 16:51:06.000000000","message":"the override-deleted \"support\" seems to be just don\u0027t do an early guard return when the broker has a delete-timestamp \u003e put-timestamp; neither the record-format full or namespace queries are effected by the override-deleted flag; they merely allow the database\u0027s shard ranges to be inspected for deleted databases.","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"55f631de8d54872c713db04297ea7fb0d37fed13","unresolved":false,"context_lines":[{"line_number":10,"context_line":"if it is sent. I\u0027m inclined to default to it being supported with"},{"line_number":11,"context_line":"namespaces to further reduce the difference between the namespace and"},{"line_number":12,"context_line":"full format version of the API. The extra work is just tests, the"},{"line_number":13,"context_line":"support is there by default anyway."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I298c09d9786d0c1cac950b96080179970dbdd286"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"290afd37_386e2a77","line":13,"in_reply_to":"8845ca88_c000257b","updated":"2024-01-05 11:28:36.000000000","message":"Acknowledged","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d961ae5a48ac9897c8af5d54e5956da964a0f284","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5e7b2994_7f989709","updated":"2024-01-04 16:51:06.000000000","message":"I\u0027m not sure why the \"igore requested param\" behavior didn\u0027t really bother me that much - maybe because it was tested/documnted?  Anyway, this change seems reasonable to me and is probably an improvement to the record-format: namespace API even if un-used.","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"954abbc378dc84fb88d50a3681b1cb04b328a514","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"dddb7f02_7b752b64","updated":"2024-01-05 05:17:19.000000000","message":"this patch has been squashed into https://review.opendev.org/c/openstack/swift/+/900740/","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"}],"swift/container/server.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"863cb6ea90d82b63f0ebb21b887393f4455dd660","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        # Namespace yet during upgrade."},{"line_number":802,"context_line":"        shard_format \u003d req.headers.get("},{"line_number":803,"context_line":"            \u0027x-backend-record-shard-format\u0027, \u0027full\u0027).lower()"},{"line_number":804,"context_line":"        if shard_format !\u003d \u0027namespace\u0027:"},{"line_number":805,"context_line":"            shard_format \u003d \u0027full\u0027"},{"line_number":806,"context_line":"        override_deleted \u003d info and config_true_value("},{"line_number":807,"context_line":"            req.headers.get(\u0027x-backend-override-deleted\u0027, False))"}],"source_content_type":"text/x-python","patch_set":1,"id":"cbd7cc5b_9bcc0939","line":804,"updated":"2024-01-05 05:08:28.000000000","message":"this is not needed anymore, let\u0027s get it removed.","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"96f833e04087e0491785879d1aa765bc2c692018","unresolved":false,"context_lines":[{"line_number":801,"context_line":"        # Namespace yet during upgrade."},{"line_number":802,"context_line":"        shard_format \u003d req.headers.get("},{"line_number":803,"context_line":"            \u0027x-backend-record-shard-format\u0027, \u0027full\u0027).lower()"},{"line_number":804,"context_line":"        if shard_format !\u003d \u0027namespace\u0027:"},{"line_number":805,"context_line":"            shard_format \u003d \u0027full\u0027"},{"line_number":806,"context_line":"        override_deleted \u003d info and config_true_value("},{"line_number":807,"context_line":"            req.headers.get(\u0027x-backend-override-deleted\u0027, False))"}],"source_content_type":"text/x-python","patch_set":1,"id":"10e8f5f7_d201b818","line":804,"in_reply_to":"cbd7cc5b_9bcc0939","updated":"2024-01-05 11:29:19.000000000","message":"oh, right, we don\u0027t use the string other than to test for \u0027namespace\u0027","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d961ae5a48ac9897c8af5d54e5956da964a0f284","unresolved":true,"context_lines":[{"line_number":849,"context_line":"                    request\u003dreq, body\u003d\u0027No auditing state for namespace GET\u0027)"},{"line_number":850,"context_line":"            shard_format_full \u003d False"},{"line_number":851,"context_line":"            container_list \u003d broker.get_namespaces("},{"line_number":852,"context_line":"                marker, end_marker, includes, reverse, states, fill_gaps)"},{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            shard_format_full \u003d True"},{"line_number":855,"context_line":"            container_list \u003d broker.get_shard_ranges("}],"source_content_type":"text/x-python","patch_set":1,"id":"6328faf2_9b423db9","line":852,"updated":"2024-01-04 16:51:06.000000000","message":"ok, so it does look like the query itself is totally un-effected by override-deleted; and I can appreciate the ambiguity of the record-format: namespace just ignoring the query param when a consumer might assume the 404 means the container never exists instead of is just deleted.","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"863cb6ea90d82b63f0ebb21b887393f4455dd660","unresolved":true,"context_lines":[{"line_number":849,"context_line":"                    request\u003dreq, body\u003d\u0027No auditing state for namespace GET\u0027)"},{"line_number":850,"context_line":"            shard_format_full \u003d False"},{"line_number":851,"context_line":"            container_list \u003d broker.get_namespaces("},{"line_number":852,"context_line":"                marker, end_marker, includes, reverse, states, fill_gaps)"},{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            shard_format_full \u003d True"},{"line_number":855,"context_line":"            container_list \u003d broker.get_shard_ranges("}],"source_content_type":"text/x-python","patch_set":1,"id":"90acbcc0_6c4ec97b","line":852,"in_reply_to":"6328faf2_9b423db9","updated":"2024-01-05 05:08:28.000000000","message":"the query will be skipped if ``override_deleted`` is true and container is deleted.\nhttps://review.opendev.org/c/openstack/swift/+/904772/1/swift/container/server.py#811","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"55f631de8d54872c713db04297ea7fb0d37fed13","unresolved":false,"context_lines":[{"line_number":849,"context_line":"                    request\u003dreq, body\u003d\u0027No auditing state for namespace GET\u0027)"},{"line_number":850,"context_line":"            shard_format_full \u003d False"},{"line_number":851,"context_line":"            container_list \u003d broker.get_namespaces("},{"line_number":852,"context_line":"                marker, end_marker, includes, reverse, states, fill_gaps)"},{"line_number":853,"context_line":"        else:"},{"line_number":854,"context_line":"            shard_format_full \u003d True"},{"line_number":855,"context_line":"            container_list \u003d broker.get_shard_ranges("}],"source_content_type":"text/x-python","patch_set":1,"id":"060b2f11_59f944dd","line":852,"in_reply_to":"90acbcc0_6c4ec97b","updated":"2024-01-05 11:28:36.000000000","message":"Acknowledged","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"}],"test/unit/container/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d961ae5a48ac9897c8af5d54e5956da964a0f284","unresolved":true,"context_lines":[{"line_number":1847,"context_line":"        self.assertNotIn(\u0027X-Backend-Record-Type\u0027, resp.headers)"},{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"    def test_GET_with_override_deleted_for_namespaces(self):"},{"line_number":1850,"context_line":"        sr \u003d self._populate_and_delete_container(\u0027/sda1/p/a/c\u0027)"},{"line_number":1851,"context_line":"        # override-deleted header makes shard ranges available after DELETE"},{"line_number":1852,"context_line":"        req \u003d Request.blank("},{"line_number":1853,"context_line":"            \u0027/sda1/p/a/c\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"94f956e1_05192c6a","line":1850,"updated":"2024-01-04 16:51:06.000000000","message":"i don\u0027t remember what this function does and it\u0027s not on master.","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"863cb6ea90d82b63f0ebb21b887393f4455dd660","unresolved":false,"context_lines":[{"line_number":1847,"context_line":"        self.assertNotIn(\u0027X-Backend-Record-Type\u0027, resp.headers)"},{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"    def test_GET_with_override_deleted_for_namespaces(self):"},{"line_number":1850,"context_line":"        sr \u003d self._populate_and_delete_container(\u0027/sda1/p/a/c\u0027)"},{"line_number":1851,"context_line":"        # override-deleted header makes shard ranges available after DELETE"},{"line_number":1852,"context_line":"        req \u003d Request.blank("},{"line_number":1853,"context_line":"            \u0027/sda1/p/a/c\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0a7cb8cf_99f44034","line":1850,"in_reply_to":"94f956e1_05192c6a","updated":"2024-01-05 05:08:28.000000000","message":"it\u0027s added by me along with the original test case in this patch: https://review.opendev.org/c/openstack/swift/+/900740/14/test/unit/container/test_server.py#1750\n\nI added this helper to create a container and then mark its status as deleted.","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d961ae5a48ac9897c8af5d54e5956da964a0f284","unresolved":true,"context_lines":[{"line_number":1862,"context_line":"        self.assertEqual([dict(Namespace(sr.name, sr.lower, sr.upper))],"},{"line_number":1863,"context_line":"                         json.loads(resp.body))"},{"line_number":1864,"context_line":"        self.assertIn(\u0027X-Backend-Record-Type\u0027, resp.headers)"},{"line_number":1865,"context_line":"        self.assertEqual(\u0027shard\u0027, resp.headers[\u0027X-Backend-Record-Type\u0027])"},{"line_number":1866,"context_line":""},{"line_number":1867,"context_line":"        # ... unless the override header equates to False"},{"line_number":1868,"context_line":"        req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":1,"id":"e78463bf_4842654d","line":1865,"updated":"2024-01-04 16:51:06.000000000","message":"presumably the record-format of the response is also namespace?","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"863cb6ea90d82b63f0ebb21b887393f4455dd660","unresolved":false,"context_lines":[{"line_number":1862,"context_line":"        self.assertEqual([dict(Namespace(sr.name, sr.lower, sr.upper))],"},{"line_number":1863,"context_line":"                         json.loads(resp.body))"},{"line_number":1864,"context_line":"        self.assertIn(\u0027X-Backend-Record-Type\u0027, resp.headers)"},{"line_number":1865,"context_line":"        self.assertEqual(\u0027shard\u0027, resp.headers[\u0027X-Backend-Record-Type\u0027])"},{"line_number":1866,"context_line":""},{"line_number":1867,"context_line":"        # ... unless the override header equates to False"},{"line_number":1868,"context_line":"        req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":1,"id":"c3b4fe93_343c0012","line":1865,"in_reply_to":"e78463bf_4842654d","updated":"2024-01-05 05:08:28.000000000","message":"Done","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d961ae5a48ac9897c8af5d54e5956da964a0f284","unresolved":true,"context_lines":[{"line_number":1874,"context_line":"                     \u0027X-Backend-Override-Deleted\u0027: \u0027no\u0027},"},{"line_number":1875,"context_line":"            params\u003d{\u0027format\u0027: \u0027json\u0027})"},{"line_number":1876,"context_line":"        resp \u003d req.get_response(self.controller)"},{"line_number":1877,"context_line":"        self.assertEqual(resp.status_int, 404)"},{"line_number":1878,"context_line":"        self.assertNotIn(\u0027X-Backend-Record-Type\u0027, resp.headers)"},{"line_number":1879,"context_line":""},{"line_number":1880,"context_line":"    def test_GET_with_override_deleted_for_shard_ranges_db_unlinked(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"aacd2f97_e073b70c","line":1877,"updated":"2024-01-04 16:51:06.000000000","message":"so I think I\u0027m reading this as x-backend-override-deleted refers to the state of the *database* not the shard rows - that seems fine.  I\u0027m guessig only the sharder currently ever needs to talk to deleted databases?","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"863cb6ea90d82b63f0ebb21b887393f4455dd660","unresolved":false,"context_lines":[{"line_number":1874,"context_line":"                     \u0027X-Backend-Override-Deleted\u0027: \u0027no\u0027},"},{"line_number":1875,"context_line":"            params\u003d{\u0027format\u0027: \u0027json\u0027})"},{"line_number":1876,"context_line":"        resp \u003d req.get_response(self.controller)"},{"line_number":1877,"context_line":"        self.assertEqual(resp.status_int, 404)"},{"line_number":1878,"context_line":"        self.assertNotIn(\u0027X-Backend-Record-Type\u0027, resp.headers)"},{"line_number":1879,"context_line":""},{"line_number":1880,"context_line":"    def test_GET_with_override_deleted_for_shard_ranges_db_unlinked(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d6f2581_1d10b60e","line":1877,"in_reply_to":"aacd2f97_e073b70c","updated":"2024-01-05 05:08:28.000000000","message":"yes, that\u0027s right. It refers to the state of the database not the shard rows, and only sharder would need it in future. pls kindly see more discussions at here.\nhttps://review.opendev.org/c/openstack/swift/+/900740/comment/10585f4c_1a9a1e3e/","commit_id":"103846d66b209898fad3bf08ae53043d642a92cb"}]}
