)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b8e4b10cd1aae1c046957405a4512c089dae9456","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"85270ecd_65ad564f","updated":"2026-03-04 18:41:22.000000000","message":"I seem to have introduced some kind of significant regression w/o breaking unittests:\n\n```\nFAILED test/probe/test_sharder.py::TestContainerSharding::test_sharded_can_get_objects_different_policy\nFAILED test/probe/test_sharder.py::TestContainerSharding::test_sharded_can_get_objects_different_policy_reversed\nFAILED test/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_can_get_objects_different_policy\nFAILED test/probe/test_sharder.py::TestContainerShardingMoreUTF8::test_sharded_can_get_objects_different_policy_reversed\n```\n\nNew test passes tho!\n\n```\nswift/test/probe/test_sharder.py::TestContainerShardingObjectVersioning::test_sharding_listing_user_and_versions_container_sharded PASSED                                                                                                        [100%]\n```","commit_id":"1ccf1dfa6d1791b96f98877ec852e97ff963bafa"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"67b02642f94d763b862782538b91c0a41c69f564","unresolved":true,"context_lines":[{"line_number":568,"context_line":"                return HTTPServiceUnavailable(request\u003dreq)"},{"line_number":569,"context_line":"            # XXX what\u0027s with all the key fall back?  what even *is* a *record*"},{"line_number":570,"context_line":"            # storage policy?!"},{"line_number":571,"context_line":"            root_policy \u003d resp.headers.get("},{"line_number":572,"context_line":"                \u0027X-Backend-Record-Storage-Policy-Index\u0027,"},{"line_number":573,"context_line":"                resp.headers[policy_key]"},{"line_number":574,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"6dc50500_46d64c8e","line":571,"updated":"2026-03-04 18:25:43.000000000","message":"I *think* resp here may not be the original root container response when we\u0027re recursing down through sharding shards","commit_id":"1ccf1dfa6d1791b96f98877ec852e97ff963bafa"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b8e4b10cd1aae1c046957405a4512c089dae9456","unresolved":true,"context_lines":[{"line_number":568,"context_line":"                return HTTPServiceUnavailable(request\u003dreq)"},{"line_number":569,"context_line":"            # XXX what\u0027s with all the key fall back?  what even *is* a *record*"},{"line_number":570,"context_line":"            # storage policy?!"},{"line_number":571,"context_line":"            root_policy \u003d resp.headers.get("},{"line_number":572,"context_line":"                \u0027X-Backend-Record-Storage-Policy-Index\u0027,"},{"line_number":573,"context_line":"                resp.headers[policy_key]"},{"line_number":574,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":1,"id":"fabf4ac1_6fd5aee1","line":571,"in_reply_to":"6dc50500_46d64c8e","updated":"2026-03-04 18:41:22.000000000","message":"I think you\u0027re right - it\u0027s just the \"shard record response\" which you WOULD get if you asked a sharded root and MIGHT get if you asked a sharded/ing shard.\n\nbut the comparison might be correct in principle b/c of the `if a \u003d b and b \u003d c then a \u003d c` rule.\n\nRegardless it fixes the 500 in the *new* probe test OMM","commit_id":"1ccf1dfa6d1791b96f98877ec852e97ff963bafa"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"848235aeef31c69c747aeb2cf005d08576b1ee91","unresolved":true,"context_lines":[{"line_number":569,"context_line":"            # XXX what\u0027s with all the key fall back?  what even *is* a *record*"},{"line_number":570,"context_line":"            # storage policy?!"},{"line_number":571,"context_line":"            root_policy \u003d resp.headers.get("},{"line_number":572,"context_line":"                \u0027X-Backend-Record-Storage-Policy-Index\u0027,"},{"line_number":573,"context_line":"                resp.headers[policy_key]"},{"line_number":574,"context_line":"            )"},{"line_number":575,"context_line":"            shard_policy \u003d shard_resp.headers.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"d23a185b_a357ae5f","line":572,"range":{"start_line":572,"start_character":16,"end_line":572,"end_character":55},"updated":"2026-03-05 15:00:14.000000000","message":"This header is not returned with a *shard* listing (which makes sense, shards are not in policies)\n\nHowever, the unit test test_GET_sharded_container_sharding_shard_mixed_policies *does* mock the shard listing response to have the \u0027X-Backend-Record-Storage-Policy-Index\u0027 header, which is why this patch passes unit tests 😭\n\nWhen I fixed the unit test response headers, it fails on master. I *think* that recursive _get_from_shards might therefore be broken on master. \n\nSee 979010: proxy: fix policy index in _get_from_shards response | https://review.opendev.org/c/openstack/swift/+/979010\n\nI have tried and failed to write a probe test that sets up a sharded container with a sharing shard, with a different s-p-i, to which a listing is redirected.\n\nIn fact, I\u0027m not sure that shards with the wrong policy index will shard if their objects are in the right policy - maybe they compare their wrong index object count with the shard threshold and/or report their wrong index object count to the root. I hope I\u0027m wrong.","commit_id":"1ccf1dfa6d1791b96f98877ec852e97ff963bafa"}]}
