)]}'
{"id":"openstack%2Fswift~978895","triplet_id":"openstack%2Fswift~master~Ia2f731b471d24b114d0675445f53d54815ca0c4c","project":"openstack/swift","branch":"master","topic":"p-sharded-versions-listing","attention_set":{},"removed_from_attention_set":{"7847":{"account":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"last_update":"2026-03-11 05:48:52.000000000","reason":"Change was submitted"},"1179":{"account":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"last_update":"2026-03-11 05:48:52.000000000","reason":"Change was submitted"},"15343":{"account":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"last_update":"2026-03-10 16:33:17.000000000","reason":"\u003cGERRIT_ACCOUNT_15343\u003e replied on the change","reason_account":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}}},"hashtags":[],"change_id":"Ia2f731b471d24b114d0675445f53d54815ca0c4c","subject":"proxy: fix KeyError while listing sharded versions","status":"MERGED","created":"2026-03-04 15:40:55.000000000","updated":"2026-03-11 05:49:48.000000000","submitted":"2026-03-11 05:48:52.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":27,"unresolved_comment_count":13,"has_review_started":true,"submission_id":"978895-p-sharded-versions-listing","meta_rev_id":"51c03ccf462c15b13ed793009aa9ff89a164ff06","_number":978895,"virtual_id_number":978895,"owner":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-03-11 05:48:52.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"all":[{"value":2,"date":"2026-03-05 08:24:38.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":2,"date":"2026-03-10 16:33:17.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"all":[{"value":0,"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":1,"date":"2026-03-10 16:33:17.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"CC":[{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-03-04 16:20:35.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-03-04 16:48:36.000000000","updated_by":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"reviewer":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"state":"CC"},{"updated":"2026-03-04 16:56:50.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2026-03-05 08:24:38.000000000","updated_by":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"reviewer":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"state":"REVIEWER"},{"updated":"2026-03-05 18:00:06.000000000","updated_by":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"reviewer":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"state":"CC"},{"updated":"2026-03-10 16:33:17.000000000","updated_by":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"reviewer":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"state":"REVIEWER"}],"messages":[{"id":"14d60c1a50326d972b0f5e7da49b41b1a1f0b1b1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2026-03-04 15:40:55.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"a7d7a09e8dc64a9535ae2d210c40cffc183bdca0","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-04 16:20:35.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/c5201b730a8f4e63bff8e1a799cf93be\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/05b9bc30cbd448ac9fda2f15c1790197 : SUCCESS in 36m 50s","accounts_in_message":[],"_revision_number":1},{"id":"a13e4c85ba439cb84d2b8fff27b4942b6f3e67bc","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2026-03-04 16:48:36.000000000","message":"Patch Set 1:\n\n(9 comments)","accounts_in_message":[],"_revision_number":1},{"id":"5c84e7ee8b074a37b6b02393f49220f6e29beb36","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-04 16:56:50.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/cc4bef02a79e4fa1b9408baad6c68d91\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/e33d4cb703914dda85671e52abdf40a5 : SUCCESS in 9m 55s\n- grenade https://zuul.opendev.org/t/openstack/build/41fdc260041441ff991917ab8fbab712 : SUCCESS in 55m 56s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/c93a3cb4d1bc46c19565843e94d5ad26 : SUCCESS in 1h 10m 30s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/a786253766604cea9622fa03f6ffdc15 : SUCCESS in 50m 56s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/9ad1828f69eb40059631441d836548c3 : SUCCESS in 1h 09m 52s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/54355ce439f44767a0b47d4cddb6fed4 : SUCCESS in 11m 27s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/729bd2e9dba54224b6a7171a50b0babf : SUCCESS in 19m 58s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/ec0c4d6b27f94b9e95d25dd48395d80d : SUCCESS in 18m 47s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/78b8fb2157be4d77aabfc60e07f04dd9 : SUCCESS in 4m 35s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/e1b3b56b32534feebf95f141d418aa1a : SUCCESS in 12m 25s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/3e7d1cc9b29741f2b8f56505488e7f6a : SUCCESS in 8m 27s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/e895944765cd4283bb1408de1087b619 : SUCCESS in 20m 44s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/1067023d4924453e8a8dd0de51b79404 : SUCCESS in 25m 04s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/4dbf0fafac1d48c9b1ae8a2ffabf5e29 : SUCCESS in 9m 34s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/30e37775ed00494ca438ada16db7fbcf : SUCCESS in 12m 58s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/068106afd2c54ca9bfde7d5263c902f0 : SUCCESS in 8m 17s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/1fd996686c8045c3a3179007faff5821 : SUCCESS in 7m 50s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/c8cbfac56bf54c2e9b3131355890372f : SUCCESS in 13m 07s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/855fb3a67e9e4e5f88b0238ea50d7537 : SUCCESS in 7m 52s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/b59e0ed6d75a47e590c2b72523d31203 : SUCCESS in 58m 05s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/e476a1cd50b94d2389f75fef9790e866 : SUCCESS in 50m 07s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/7a32c09ae080423e8c926c791a92a41b : SUCCESS in 50m 05s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/f60fcfe28e234e76b5d38723439d9543 : SUCCESS in 27m 44s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c79e3d94ba994c88bfe59ba6ec6c2e61 : SUCCESS in 3m 47s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/ee1744cf55524581afe3584e0376072d : SUCCESS in 10m 26s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/d54ae243a11b474b895d8532ebef18d3 : SUCCESS in 56m 25s","accounts_in_message":[],"_revision_number":1},{"id":"71b00548aff2f0b578554d8130f49031c9db507c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2026-03-04 19:10:23.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified+1\n","accounts_in_message":[],"_revision_number":2},{"id":"0668832bd2e71daf71b9e179af85a737974aed01","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2026-03-04 19:10:42.000000000","message":"Patch Set 2:\n\n(7 comments)","accounts_in_message":[],"_revision_number":2},{"id":"b5c83439f07e49927f231cca2b4bb42e765ba41f","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2026-03-04 19:12:20.000000000","message":"Uploaded patch set 3: Commit message was updated.","accounts_in_message":[],"_revision_number":3},{"id":"d1c9321c51619a38a9392b3ca5a0d4c6845ad718","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-04 19:41:20.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/dac570c190e1422bb586fb6b722ea017\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/6beead43f8484c549302ee033e7c6dca : SUCCESS in 27m 24s","accounts_in_message":[],"_revision_number":3},{"id":"ca4a9b66a490a991fe09016c308e248dfe71d6b5","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-04 20:33:35.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/d7e3171e095a44cc91b163ff95b0b894\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/50052733f20f4e3aa27050b59e485bcf : SUCCESS in 10m 28s\n- grenade https://zuul.opendev.org/t/openstack/build/f155cf6f25d04bb5a5d55f5eab317007 : SUCCESS in 1h 03m 04s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/f3d42cdfc4914404b7700534edf71520 : SUCCESS in 1h 03m 16s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/bc8802f751d54379a2f8612ac17ee309 : SUCCESS in 1h 15m 22s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/cee13a30801542b2830616831d31564c : SUCCESS in 1h 06m 38s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/292e596e571147bdb82d1f22d8cebfb9 : SUCCESS in 18m 25s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/7c9122d3c1164b0f98269575a2063e01 : SUCCESS in 20m 08s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/c4697b2850a6401793ed9f4fce3d5c5f : SUCCESS in 21m 01s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/cb065ec46b7b4338bc5a9eb9a187acae : SUCCESS in 6m 39s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/867c5544aa7344e1875a7317c745cb5f : SUCCESS in 27m 54s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/d57afb5e6bed4c0f9decb072b0cb3eec : SUCCESS in 10m 14s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/a9b93997015f4b06a97453c0a589723b : SUCCESS in 21m 17s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/ac07d99d0ebb46d09feb2d9060560d5a : SUCCESS in 30m 45s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/e3014b1baecb40c69440ec54aa62e243 : SUCCESS in 21m 30s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/ae12ebc329d6407496881313457a1f4d : SUCCESS in 13m 39s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/937f8c3007d04e60a8f8f648ef78ca6e : SUCCESS in 15m 04s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/85c387ecf69d459ba815d47052783f4d : SUCCESS in 6m 29s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/06bf54940aea4080a50393f771dcaeae : SUCCESS in 19m 35s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/4f3a94e878ae4ae684408d64f0724c87 : SUCCESS in 5m 26s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/c3b4285085c6433c99444ae5b6618aa3 : SUCCESS in 58m 55s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/ad77ab75943f445ca20dc24a8a3b8808 : SUCCESS in 41m 39s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/7734f48a455c4bc69693fe651a2cbb6a : SUCCESS in 26m 08s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/39c07acf39fc4bc78d3e2c567ef50c08 : SUCCESS in 21m 44s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/51c64331aecd4bc4bfcbe770ee124ccd : SUCCESS in 3m 45s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/cd9d63a40a524918b1208414f0f30853 : SUCCESS in 10m 34s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/dca46c4c97d04bed958ee8ee1c846328 : SUCCESS in 30m 25s","accounts_in_message":[],"_revision_number":3},{"id":"e285aa952acdd90ea6b0acba6f65c2894276b94f","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-03-05 08:24:38.000000000","message":"Patch Set 3: Code-Review+2\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"9a50c562f7eefe2afed52cd466f047a08f7d6b51","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2026-03-05 15:00:45.000000000","message":"Patch Set 3:\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"6d417665c74c0a447de4fa175d41c6155fb2a40e","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-03-05 18:00:06.000000000","message":"Patch Set 3:\n\n(3 comments)","accounts_in_message":[],"_revision_number":3},{"id":"b1afffee76bd2b3d5e53e2a27e76cadb8d6c5086","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2026-03-06 11:44:39.000000000","message":"Patch Set 3:\n\n(2 comments)","accounts_in_message":[],"_revision_number":3},{"id":"c7261cbef9a958ee331f12c8f0146d46c4646084","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-03-06 23:59:43.000000000","message":"Patch Set 3:\n\n(2 comments)","accounts_in_message":[],"_revision_number":3},{"id":"dce4d10cff2cac646ec4e9f897de861bd6d81421","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2026-03-09 10:25:04.000000000","message":"Patch Set 3:\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"5ec3e8d14020b0374462383067e4327fb1e2f0fa","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-03-10 16:33:17.000000000","message":"Patch Set 3: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":3},{"id":"44a7ebc71b2bfa575816da5f1b588e025903cb37","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-10 16:33:51.000000000","message":"Patch Set 3: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":3},{"id":"eda24aefafb9e774099790b9d5e2dc6165631396","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-10 17:53:11.000000000","message":"Patch Set 3: Verified-2\n\nBuild failed (gate pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\nhttps://zuul.opendev.org/t/openstack/buildset/3de816ec05174b38b1869384a4ef1c3e\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/998756c94fc64a54a29230312bc2f16f : SUCCESS in 10m 15s\n- grenade https://zuul.opendev.org/t/openstack/build/d55bd83f4cd941e1b2af50cbe1566b53 : FAILURE in 20m 39s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/7bb81bde0d19458785e58620ce5aa0f1 : SUCCESS in 59m 46s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/1fe9b0eb99e847df895cea4f64b84f28 : SUCCESS in 35m 53s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/0adb2e2d1a0140608ce718714a679d22 : SUCCESS in 37m 41s\n- swift-upload-image https://zuul.opendev.org/t/openstack/build/a2d65454ff164171bad1412f4267dc5c : SUCCESS in 7m 15s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/9ddd42dc34b1416191b6bf22c3e40010 : SUCCESS in 25m 06s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/7e46243814484679a5530add82ccbaff : SUCCESS in 22m 32s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/e65438ed796a41478606e1c7ae042562 : SUCCESS in 28m 17s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/4dd1459b4d0c4be2aad53d59be4c6f05 : SUCCESS in 30m 26s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/d471bb8832204403b1e1079f4aabdabf : SUCCESS in 16m 23s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/a66c7eb796694a599c01a96e5cb0220e : SUCCESS in 14m 30s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/39cfec04054746389c87a9501156fe60 : SUCCESS in 16m 05s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/9e763a33db9644e49acd0426ab49ff2c : SUCCESS in 6m 12s\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/83931b86bc0447bf8a1c9e5727a0a241 : SUCCESS in 8m 28s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/91c0490610a34ab2a0bcaf0cd0fd5cf7 : SUCCESS in 1h 00m 56s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/32aa86b2d81947a7afcea72b3bb24811 : SUCCESS in 40m 03s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/f8574e4cbe794fe38d06abb4da26a915 : SUCCESS in 52m 24s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/dd0dec6574a34dcdbdf3cf0ce7017830 : SUCCESS in 26m 51s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/195e333b57554963a3cd1620de473e97 : SUCCESS in 2m 39s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/444cb9b3abae44eaa4f9569cf8cb0224 : SUCCESS in 25m 52s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/ed89c85547314bdc8900eaa6c88cac0a : SUCCESS in 56m 27s","accounts_in_message":[],"_revision_number":3},{"id":"d8a182e84b2254e7bbe01927f2d930e127b79b1c","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-03-11 03:24:43.000000000","message":"Patch Set 3:\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"6fc1873b43c48ce28978545bfe51f04d00119341","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-11 04:05:53.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/7bc4038f3aae4b7da8640d9e3c427c27\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/be6f5c47dfd24914801b78d2f5379b33 : SUCCESS in 28m 52s","accounts_in_message":[],"_revision_number":3},{"id":"4725a7cabbcbb5cb66484f726f861c584bcbbab1","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-11 04:31:11.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/98460b6c36b04977902a38cc87595003\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/06ddf419ab654efab6c5ccbcfa392056 : SUCCESS in 10m 33s\n- grenade https://zuul.opendev.org/t/openstack/build/da434b8d706949d8b226ac1458d9ddbe : SUCCESS in 58m 40s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/5e4173a5d6ab47d58ae28b023c41cd76 : SUCCESS in 57m 58s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/09ac844672514725aeb686002d37e858 : SUCCESS in 50m 21s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/e26de8d721154175ab7c5781e2a1391a : SUCCESS in 32m 31s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/4fd938b60c334c029a072d9c41d3a663 : SUCCESS in 18m 56s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/9ba14bf8ec3047a5a597683dab7bc57c : SUCCESS in 22m 15s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/afe5ebc373d94121bc34a0a3c19bfe3b : SUCCESS in 20m 12s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/398e7a87353244f691c28163ee21e013 : FAILURE in 4m 02s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/888c1e61957243b8ad2b74f3c398ac69 : SUCCESS in 12m 25s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/170092afac344ba6a450fb5b0dc1c5e3 : SUCCESS in 20m 01s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/833d91ee594f44619a91c54d37a96c96 : SUCCESS in 28m 27s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/f21d36cd44234f049008f61462e48128 : SUCCESS in 25m 08s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/0d35ba697f244838b03469f4345bf019 : SUCCESS in 13m 44s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/ce033f91b5d740c0bc96733fc0a7b6e8 : SUCCESS in 13m 08s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/b197465faee8483280883fb60c38ea99 : SUCCESS in 15m 15s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/b70eb6fb54c3441b822e4e56a2de863a : SUCCESS in 5m 30s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/8fc2199de6e948bf9214d549bdc8ab3d : SUCCESS in 16m 36s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/c1f7874f6736443caa0becc76a45ec53 : SUCCESS in 7m 53s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/d47ae1793e874e96b05e3f9d3895c608 : SUCCESS in 55m 19s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/6290ded2882441b3b17887c09c687b22 : SUCCESS in 38m 48s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/b6ea61733d034e8c817e28cbf6d88053 : SUCCESS in 52m 04s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/f8ea8e560ec24b6e96049cea15a515eb : SUCCESS in 28m 32s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/149143fc2af04dc38b6f4573f71ce0a7 : SUCCESS in 2m 29s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/456ef7364d1b45d4a2f413d5eb08cea5 : SUCCESS in 17m 31s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/c32266f2970847d988fa8a6e39537389 : SUCCESS in 50m 34s","accounts_in_message":[],"_revision_number":3},{"id":"70fb2ead6c9266e62998535f831fdc2912d6cf6d","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-11 04:31:39.000000000","message":"Patch Set 3: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":3},{"id":"dd3282fa22282e4160b60420168385c629370d0a","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-11 05:48:52.000000000","message":"Patch Set 3: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/3508b23b4b074a29b5b9ba73dffdc431\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2db5887061884c85a123cef43839f7b3 : SUCCESS in 7m 49s\n- grenade https://zuul.opendev.org/t/openstack/build/0cc5557e3b7741e8838402cf072484c4 : SUCCESS in 1h 00m 29s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/3e34cdeb05c94e2586506942f0691a63 : SUCCESS in 1h 03m 23s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/73038411e33445439f54e725a0a97ba2 : SUCCESS in 1h 02m 20s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/85c9a480a40d4a60aaebca5857a35b72 : SUCCESS in 44m 56s\n- swift-upload-image https://zuul.opendev.org/t/openstack/build/576dcce7160947d48b05ffed00acb7cd : SUCCESS in 5m 14s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/eff7dd0a454a47d486f58d0c2b617cb9 : SUCCESS in 9m 57s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/6363d90ce5a141a6ac0f31407cba3f71 : SUCCESS in 20m 25s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/9dd98cfb74c44a35b5164c2df2e8daf4 : SUCCESS in 13m 08s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/ea20da206a91405c8d8f1071ac809117 : SUCCESS in 23m 04s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/2d4e1b46d48d420f8b49c7872239ecf5 : SUCCESS in 12m 10s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/f944a3097f7546dd9f959d658f82074d : SUCCESS in 11m 58s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/b6d1f05793894b4c94566f74ee020043 : SUCCESS in 8m 58s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/010e509ca2a54ea29987e0a7923a095c : SUCCESS in 5m 38s\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/ef5f4477248943b2bb6c9962f5886426 : SUCCESS in 8m 16s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/e24c23437dc84dba8e31a38ab2fb6159 : SUCCESS in 33m 57s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/a74f51fecc5841e4ab59091da06f0d2c : SUCCESS in 32m 26s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/95dfe3ed24864078bc98c6923cee0082 : SUCCESS in 21m 09s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/bbd4e27b74674bd48e6b3f08f462fac4 : SUCCESS in 22m 28s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/03a21bad7ae0483b9358230c9ecdb746 : SUCCESS in 4m 02s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/f61e33dcba014443a661494ebc495d41 : SUCCESS in 15m 28s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/89d04e2ee60043f390934466ed36b1c8 : SUCCESS in 56m 17s","accounts_in_message":[],"_revision_number":3},{"id":"c935930b34ff7660b647799fbe58a3a6a635a86b","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-11 05:48:52.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":3},{"id":"51c03ccf462c15b13ed793009aa9ff89a164ff06","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-11 05:49:48.000000000","message":"Patch Set 3:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/93b3915449b44809bf242eddf8fdcf5c\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2e1fe45265294d4ab0e3febb4db4e597 : SUCCESS in 47s\n- swift-promote-image https://zuul.opendev.org/t/openstack/build/22a0a826f56843d8a23636390b2857aa : SUCCESS in 44s (non-voting)","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"e9400d7d61906af956c366b0f307e97f726a4c3f","revisions":{"e509cf9f71075313fd1c3fd7ae5224a24f320663":{"kind":"REWORK","_number":1,"created":"2026-03-04 15:40:55.000000000","uploader":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"ref":"refs/changes/95/978895/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/95/978895/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/95/978895/1"}}},"commit":{"parents":[{"commit":"51b068309a626d2228ab69b5158ee857e96d101d","subject":"tests: more timestamp iter refactoring","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/51b068309a626d2228ab69b5158ee857e96d101d"}]}],"author":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2026-03-04 15:12:05.000000000","tz":0},"committer":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2026-03-04 15:40:21.000000000","tz":0},"subject":"WIP proxy: fix KeyError while listing sharded versions","message":"WIP proxy: fix KeyError while listing sharded versions\n\nTODO:\n\n* needs unit test, and fixes to existing assertions\n\n* needs refactor to deal with early returns from _get_from_shards\n\n* an alternative/additional fix would be for object_versioning to\n  explicitly set the x-backend-policy-index header on the versions\n  listing subrequest, if it is thought that the versions *should* be\n  in the same policy. IMHO the bleeding of swift.shard_listing_history\n  should still be addressed.\n\nThis patch ensures that every listing request to a shard container has\nthe \u0027X-Backend-Storage-Policy-Index\u0027 header of the root container\nlisting request. Previously this might not be the case when handling a\nversions container listing subrequest spawned from a user container\nlisting, which resulted in a KeyError when checking the request policy\nindex against the response policy index.\n\nWhen listing a sharded container, the proxy will recursively list\nobjects from shard containers. A list of containers that have been\nlisted is maintained in the request environ under the\n\u0027swift.shard_listing_history\u0027 key to detect if a shard redirects to an\nalready listed container. When that happens, the proxy forces that\ncontainer to return whatever objects it has and not list recursively\n(again!).\n\nThe absence of a swift.shard_listing_history from a listing request environ\nimplies that the request is the \u0027root\u0027 request (i.e. the first in the\nrecursion) and therefore the authority for the policy index to be\nused. When swift.shard_listing_history is not found in the environ, the\nproxy ensures a policy index header is set in the request environ.\n\nWhen a versions container is listed, the object_versioning middleware\nfirst lists the user container. If this is sharded, the request\nenviron will have a swift.shard_listing_history. The object_versioning\nmiddleware then lists the versions container using a subrequest cloned\nfrom the original request. This subrequest inherits the\nswift.shard_listing_history from the original request. As result, the\nproxy does not think this is a \u0027root\u0027 request, and does not ensure\nthat the request has an X-Backend-Storage-Policy-Index header (which\nis not copied into the subrequest). A KeyError would then occur when\nthis header is checked against a response from a versions container\nshard.\n\nThe solution is to ensure that the swift.shard_listing_history is\ncleared from the request environ when the recursive listing from shards\nhas completed, so that a subsequent subrequest is not polluted with an\nunrelated swift.shard_listing_history.\n\nChange-Id: Ia2f731b471d24b114d0675445f53d54815ca0c4c\nCloses-Bug: #2143220\nSigned-off-by: Alistair Coles \u003calistairncoles@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e509cf9f71075313fd1c3fd7ae5224a24f320663"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e509cf9f71075313fd1c3fd7ae5224a24f320663"}]},"branch":"refs/heads/master"},"b521516e07060f93f96fe44816b80c31aed55b39":{"kind":"REWORK","_number":2,"created":"2026-03-04 19:10:23.000000000","uploader":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"ref":"refs/changes/95/978895/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/95/978895/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/95/978895/2"}}},"commit":{"parents":[{"commit":"51b068309a626d2228ab69b5158ee857e96d101d","subject":"tests: more timestamp iter refactoring","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/51b068309a626d2228ab69b5158ee857e96d101d"}]}],"author":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2026-03-04 15:12:05.000000000","tz":0},"committer":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2026-03-04 19:07:17.000000000","tz":0},"subject":"proxy: fix KeyError while listing sharded versions","message":"proxy: fix KeyError while listing sharded versions\n\nThis patch ensures that every listing request to a shard container has\nthe \u0027X-Backend-Storage-Policy-Index\u0027 header of the root container\nlisting request. Previously this might not be the case when handling a\nversions container listing subrequest spawned from a user container\nlisting, which resulted in a KeyError when checking the request policy\nindex against the response policy index.\n\nWhen listing a sharded container, the proxy will recursively list\nobjects from shard containers. A list of containers that have already\nbeen listed is maintained in the request environ under the\n\u0027swift.shard_listing_history\u0027 key to detect if a shard redirects to an\nalready listed container. When that happens, the proxy forces that\ncontainer to return whatever objects it has and not list recursively\n(again!).\n\nThe proxy sets the X-Backend-Storage-Policy-Index header in every\nsubrequest to the value returned by the root container response. This\nis to ensure that all shard listings return objects in the same policy\nindex. To do this, the proxy needs to infer that the current request\n*is* the root request and not a recursive request to a\nshard. Previously this was done by checking that the\nswift.shard_listing_history in the request environ was falsey, because\nit was presumed that a truthy shard_listing_history would reliably\nindicate that the listing *had* recursed.\n\nHowever, this is not always the case. When a versions container is\nlisted, the object_versioning middleware first lists the user\ncontainer. If this is sharded, the request environ will have a\nswift.shard_listing_history. The object_versioning middleware then\nlists the versions container using a subrequest cloned from the same\noriginal request. This subrequest inherits the\n\u0027swift.shard_listing_history\u0027 from the original request, but not the\nX-Backend-Storage-Policy-Index header. As a result, the proxy does not\ninfer that this is a \u0027root\u0027 request, and does not add an\nX-Backend-Storage-Policy-Index header. A KeyError would then occur\nwhen this header is checked against a response from a versions\ncontainer shard.\n\nThis patch removes the condition that \u0027swift.shard_listing_history\u0027\nis falsey for the X-Backend-Storage-Policy-Index header to be set. The\nX-Backend-Storage-Policy-Index header is now set if it is not already\npresent. This will only be the case when handling a root container\nrequest, because, once set, the header is copied into all subrequests\nfor the recursive listing.\n\nChange-Id: Ia2f731b471d24b114d0675445f53d54815ca0c4c\nCloses-Bug: #2143220\nSigned-off-by: Alistair Coles \u003calistairncoles@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b521516e07060f93f96fe44816b80c31aed55b39"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b521516e07060f93f96fe44816b80c31aed55b39"}]},"branch":"refs/heads/master"},"e9400d7d61906af956c366b0f307e97f726a4c3f":{"kind":"NO_CODE_CHANGE","_number":3,"created":"2026-03-04 19:12:20.000000000","uploader":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"ref":"refs/changes/95/978895/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/95/978895/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/95/978895/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/95/978895/3"}}},"commit":{"parents":[{"commit":"51b068309a626d2228ab69b5158ee857e96d101d","subject":"tests: more timestamp iter refactoring","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/51b068309a626d2228ab69b5158ee857e96d101d"}]}],"author":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2026-03-04 15:12:05.000000000","tz":0},"committer":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2026-03-04 19:12:04.000000000","tz":0},"subject":"proxy: fix KeyError while listing sharded versions","message":"proxy: fix KeyError while listing sharded versions\n\nThis patch ensures that every listing request to a shard container has\nthe \u0027X-Backend-Storage-Policy-Index\u0027 header of the root container\nlisting request. Previously this might not be the case when handling a\nversions container listing subrequest spawned from a user container\nlisting, which resulted in a KeyError when checking the request policy\nindex against the response policy index.\n\nWhen listing a sharded container, the proxy will recursively list\nobjects from shard containers. A list of containers that have already\nbeen listed is maintained in the request environ under the\n\u0027swift.shard_listing_history\u0027 key to detect if a shard redirects to an\nalready listed container. When that happens, the proxy forces that\ncontainer to return whatever objects it has and not list recursively\n(again!).\n\nThe proxy sets the X-Backend-Storage-Policy-Index header in every\nsubrequest to the value returned by the root container response. This\nis to ensure that all shard listings return objects in the same policy\nindex. To do this, the proxy needs to infer that the current request\n*is* the root request and not a recursive request to a\nshard. Previously this was done by checking that the\nswift.shard_listing_history in the request environ was falsey, because\nit was presumed that a truthy shard_listing_history would reliably\nindicate that the listing *had* recursed.\n\nHowever, this is not always the case. When a versions container is\nlisted, the object_versioning middleware first lists the user\ncontainer. If this is sharded, the request environ will have a\nswift.shard_listing_history. The object_versioning middleware then\nlists the versions container using a subrequest cloned from the same\noriginal request. This subrequest inherits the\n\u0027swift.shard_listing_history\u0027 from the original request, but not the\nX-Backend-Storage-Policy-Index header. As a result, the proxy does not\ninfer that this is a \u0027root\u0027 request, and does not add an\nX-Backend-Storage-Policy-Index header. A KeyError would then occur\nwhen this header is checked against a response from a versions\ncontainer shard.\n\nThis patch removes the condition that \u0027swift.shard_listing_history\u0027\nis falsey for the X-Backend-Storage-Policy-Index header to be set. The\nX-Backend-Storage-Policy-Index header is now set if it is not already\npresent. This will only be the case when handling a root container\nrequest, because, once set, the header is copied into all subrequests\nfor the recursive listing.\n\nChange-Id: Ia2f731b471d24b114d0675445f53d54815ca0c4c\nRelated-Change: I026b699fc5f0fba619cf524093632d67ca38d32f\nCloses-Bug: #2143220\nSigned-off-by: Alistair Coles \u003calistairncoles@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e9400d7d61906af956c366b0f307e97f726a4c3f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e9400d7d61906af956c366b0f307e97f726a4c3f"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["label:Code-Review\u003dMIN"],"atom_explanations":{}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{}}}]}
