)]}'
{"id":"openstack%2Fswift~957291","triplet_id":"openstack%2Fswift~master~Ie3815038bc0a31a796b45ab9ef296274bbefb8b7","project":"openstack/swift","branch":"master","topic":"ringv2_history_chain","attention_set":{"7233":{"account":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"last_update":"2026-02-18 03:56:42.000000000","reason":"A robot voted negatively on a label"},"6968":{"account":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"last_update":"2026-06-01 10:29:22.000000000","reason":"A robot voted negatively on a label"},"15343":{"account":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"last_update":"2025-08-27 07:54:45.000000000","reason":"Vote got outdated and was removed: Code-Review-1"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"Ie3815038bc0a31a796b45ab9ef296274bbefb8b7","subject":"ring: Let ring keep and use a RingData instance","status":"NEW","created":"2025-08-13 22:59:15.000000000","updated":"2026-06-01 10:29:22.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":false,"submittable":false,"total_comment_count":9,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"f8f45c9b1f95cb5cabf4cdede3320a57acfebf2f","_number":957291,"virtual_id_number":957291,"owner":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":-1,"date":"2026-06-01 10:29:22.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_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":"","value":-1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"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":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"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":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2025-08-14 00:28:46.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":"2025-08-25 17:32:27.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":"7cddf8e8474569eb935046660bfb86b4f31156e3","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2025-08-13 22:59:15.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"5f5daa8b041a67ece79f4a2f08b5edc7c2c3385e","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2025-08-13 23:02:20.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"deca6ea1c1bdd1914cb1a99ec0753b7c3f8fabc1","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-08-14 00:28:46.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/6bc938b0a9bf4444a7f0a160446c17a2\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/28366cdcd02e4136b61341263ab7808a : SUCCESS in 8m 19s\n- grenade https://zuul.opendev.org/t/openstack/build/8b615cad5dc44a97876c9509601d27bd : SUCCESS in 1h 01m 02s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/16a0174915664807a6895bd5f7986ebd : SUCCESS in 1h 00m 35s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/352f468c4bed400f9ec5e6f6da4fbe0c : SUCCESS in 40m 27s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/8abfb4e17362462d86897c748a1d9d74 : SUCCESS in 1h 18m 47s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/ab5e332756334c14a3f0fd5ea7e307ad : SUCCESS in 20m 09s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/73bf58b4173b4089a8b04e1e747ff259 : NODE_FAILURE Node(set) request 8128b431f9674166b61e8101a790981d failed in 0s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/6976ef5203a54a11ba92ea20ccb48e29 : SUCCESS in 15m 19s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/36a260d881844431bcd2c2564013921a : SUCCESS in 5m 59s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/62591faf93a443f09a8396cb274bfc6b : SUCCESS in 19m 45s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/e07dcc1ac370427b8365721d3b87a613 : SUCCESS in 9m 26s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/09bf2025eb164c9b9fbc94a01fa4e40c : SUCCESS in 27m 39s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/35551a88ae854d159c7927e697ce3bc2 : SUCCESS in 35m 56s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/81f44506a2f84b32bc45f16125e70b3d : SUCCESS in 15m 16s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/90203e85fd61404f9b4248adb2904e5d : SUCCESS in 12m 19s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/b7918c6357f7498cbaa3f7e4d052e17f : SUCCESS in 14m 58s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/281ce20cc8b14c96b45363b39794dc7a : SUCCESS in 7m 54s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/09289eaf8917418a9de23c36478d7dc4 : SUCCESS in 18m 41s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/e8a25cc8238f436a984da1c0592563d7 : SUCCESS in 10m 35s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/a787e4498f92468598f2bb3c1bec4e64 : SUCCESS in 51m 37s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/b243fcebdccc47baa161d74e809ef0c7 : SUCCESS in 44m 46s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/5e05032acff7417db7b4cf9262a7f82d : SUCCESS in 52m 14s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/d3789573a3284e77aac7f8d326d4e716 : SUCCESS in 18m 11s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/09577176c281465db8c2f20e36fe60c1 : SUCCESS in 3m 38s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/1e63cfac9b184758ac6544f17189abd4 : FAILURE in 38m 31s\n- tempest-integrated-object-storage-ubuntu-jammy https://zuul.opendev.org/t/openstack/build/03ce23a14b66438ba383fa96136523e5 : SUCCESS in 52m 33s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/8264d449765d4dec9994da05c711bd3c : SUCCESS in 56m 44s","accounts_in_message":[],"_revision_number":2},{"id":"d7545b1149d7b81d7f8f08833363494b8033b42f","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2025-08-25 17:32:27.000000000","message":"Patch Set 2: Code-Review-1\n\n(5 comments)","accounts_in_message":[],"_revision_number":2},{"id":"41f1b40c56c229a243f65d8297ec14b99cdc2165","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2025-08-27 07:54:45.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Code-Review-1 (copy condition: \"changekind:TRIVIAL_REBASE OR is:MIN\")\n* Verified-1\n","accounts_in_message":[],"_revision_number":3},{"id":"d2f6e5c1bc98ca4965f6c4a7d27690533d4fc7b5","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-08-27 09:12:44.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/36b3b11eef7f4a649ea94547243d7010\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/b02d091fcbb046efb530b4282b5c8c5c : SUCCESS in 1h 06m 02s","accounts_in_message":[],"_revision_number":3},{"id":"f4adfa20f8d1d67de06ce9dfd286dea1217a0d11","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-08-27 10:01:26.000000000","message":"Patch Set 3: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/d9532f091026411e9a2c696aab73d391\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c293dc5134eb43bfbb7cc983a6eea380 : SUCCESS in 10m 24s\n- grenade https://zuul.opendev.org/t/openstack/build/9825a4e609634499b16d9a70cf54aadd : SUCCESS in 46m 24s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/90c0bd8718ee43728879dbc3b0089b0e : SUCCESS in 1h 00m 55s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/f462c6f8fcff4d4dad2bb4f0f895ce8e : SUCCESS in 46m 29s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/25831652989b440abb9e63dd77a29621 : SUCCESS in 48m 58s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/c546cbecd1154d2fbb6e51a76a5711e9 : SUCCESS in 20m 57s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/fc46bd20461a47f69f5843d4bdf4e59f : SUCCESS in 10m 39s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/4965eb53b064451e8339f0f529c112ff : SUCCESS in 21m 10s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/546bc8dc41954402ac278ac982862172 : SUCCESS in 5m 39s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/a206f6ca2adb45438dcd364386e4519b : SUCCESS in 11m 19s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/b562bb7ece8c41919a4a99491ddcb846 : SUCCESS in 8m 39s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/ff1edd7763bc48aa8fb85f7b9a71fdb1 : SUCCESS in 15m 22s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/a83d4b15b0b945a6a848a18772e39854 : SUCCESS in 29m 17s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/f82951f9e0504476a6699b1889b06a46 : SUCCESS in 12m 56s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/8a567bef09874a3da57cf0851ac19a36 : SUCCESS in 14m 10s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/46c0b8d01c26445d8d45f49499cfbb5b : SUCCESS in 14m 41s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/9c07dcb05b774ca4bf585c1d79d25360 : SUCCESS in 6m 55s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/eb161909b4ef4cad9c375e9df5039eb9 : SUCCESS in 15m 32s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/e65db075e2944f94bd6193dd590c5d53 : SUCCESS in 4m 59s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/08a009e088a240bab1c5d34003519937 : TIMED_OUT in 2h 00m 45s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/14c26680d9244592b9a298892e6643ea : SUCCESS in 22m 15s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/7f049392b5ab461a8260ddfdaa565f8f : SUCCESS in 48m 13s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/04b789b436044a02b4ac9b4d4285704f : SUCCESS in 12m 01s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/6c8b5c537a7c4df9af709b955b647a5c : SUCCESS in 4m 34s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/9ba565f66a924f5590045f5c1fbede5b : SUCCESS in 9m 27s\n- tempest-integrated-object-storage-ubuntu-jammy https://zuul.opendev.org/t/openstack/build/b597cc1364d340fb90e3fb88c2cafde3 : SUCCESS in 54m 08s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/c476f0c646634f4c991e424239203244 : SUCCESS in 45m 01s","accounts_in_message":[],"_revision_number":3},{"id":"70a57050d310f51ee3cac8a1bcf3c37c2ba0851b","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2025-08-29 06:30:56.000000000","message":"Patch Set 3:\n\n(4 comments)","accounts_in_message":[],"_revision_number":3},{"id":"94f6c9546ba8c6184494631a68d1914efb13b344","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-02-18 01:45:36.000000000","message":"Uploaded patch set 4: Patch Set 3 was rebased.\n\nOutdated Votes:\n* Verified-1\n","accounts_in_message":[],"_revision_number":4},{"id":"b95bc165b8a8d700669ec7385cef59f5cd46a120","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-02-18 03:56:42.000000000","message":"Patch Set 4: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/f9144c0bec6d4b19a5507e2deb651ed0\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6f368b687e6a4826a738aad6fe1240fe : SUCCESS in 10m 14s\n- grenade https://zuul.opendev.org/t/openstack/build/e6cef9735a364394a31fcd60148ff8f4 : SUCCESS in 59m 55s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/00ff4ec619514b158e0c2d7376f178bc : SUCCESS in 1h 00m 56s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/5ff834ce4f85458aba41ae08a87a003a : SUCCESS in 36m 21s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/3cd7be7e29d04b3a9cdf1569704be2a9 : SUCCESS in 1h 02m 50s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/a7bcaeeec06d46adb8ca8ed8bbf9d9a0 : SUCCESS in 20m 33s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/73ea69ef902c4fb784c3970514df7157 : SUCCESS in 22m 39s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/363b43b916184bf092b30092b9a0ada1 : SUCCESS in 24m 28s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/b38553ad4f4c46de84c7045a247f2bdb : SUCCESS in 5m 38s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/86c644794cfb412081e7bbd0f438dc95 : SUCCESS in 25m 43s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/159015f2313b498fb33260f30c1cfdf3 : SUCCESS in 16m 55s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/4d2f4114819141728e3dc850ddd9a2ba : SUCCESS in 13m 19s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/d14a3fbe5ece4e3e9324f0022c649009 : SUCCESS in 13m 41s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/4f722dd6025b4dd982d28364d060eb65 : SUCCESS in 15m 00s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/cca4c14f71eb4998bd3ca37301204119 : SUCCESS in 15m 52s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/dd254c7dcafa4063ae2c887f90f4bd88 : SUCCESS in 15m 06s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/f475ee7ea4954e47adc25ce13ac4ea95 : SUCCESS in 6m 10s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/9cdad9574d11485d8b5056b8fc728a4e : SUCCESS in 14m 56s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/e727169e33074784a247cc1793c745d9 : SUCCESS in 10m 54s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/7aca0b6b2f484394aecb98202a66d458 : TIMED_OUT in 2h 01m 14s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/13334b3485704159ae80f5893c2f89b7 : SUCCESS in 51m 51s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/fcfde5b3f29142b5809560f658fc8705 : SUCCESS in 58m 29s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/0a7e2cbd0dfa4c3a9e9cad1e7dc4d1c4 : SUCCESS in 27m 53s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c44ba09bd82b4cf6a445ecea7fac09cf : SUCCESS in 4m 14s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/c2fe12138572410887b23eaf213dcbcb : SUCCESS in 18m 48s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/6dc881e723cc468aa72d7b9cf646bed9 : SUCCESS in 1h 05m 37s","accounts_in_message":[],"_revision_number":4},{"id":"1a1cdd35120bde848aa74d9c3b8fa24502351e0d","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-02-18 04:29:03.000000000","message":"Patch Set 4:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/cb72a1a0728d4da6b6cda94b3392866e\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/95e06f606aaa4dbbafb9fa1a2cc4af2c : SUCCESS in 2h 41m 26s","accounts_in_message":[],"_revision_number":4},{"id":"e8b2e4ae1be7fcb1b005ed215b5579fc60426196","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-04-07 05:01:51.000000000","message":"Uploaded patch set 5: Patch Set 4 was rebased.\n\nOutdated Votes:\n* Verified-1\n","accounts_in_message":[],"_revision_number":5},{"id":"79ba2f63a954195cbe222f740450cebe59fe65ce","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-07 05:36:25.000000000","message":"Patch Set 5:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/6a8aba1b211544faa5558f363c4931b0\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/a5e6ed7d155146f1a75748379a865316 : SUCCESS in 32m 07s","accounts_in_message":[],"_revision_number":5},{"id":"d39cff9842f3fef6dac30ac55abaf98b69d6db22","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-07 07:08:29.000000000","message":"Patch Set 5: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/d8f453e0a7fe4f78b8827b6fb45aad62\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2c50e61311654cb7af13a0a3d65344cf : SUCCESS in 8m 32s\n- grenade https://zuul.opendev.org/t/openstack/build/453a0fe6780d46248bf1820b20812137 : SUCCESS in 35m 12s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/64f5f68439f44f86b1f9957d641d1b3b : SUCCESS in 36m 06s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/30916df7c20241a1b1aeeed4238bb687 : SUCCESS in 33m 37s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/a5e8f975421945a38fa3826f57de0c36 : SUCCESS in 50m 44s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/be5d9e66a4264a07b51d7d8e2d6f3a68 : SUCCESS in 11m 23s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/42f589d3263b43168f2605437348b6ed : SUCCESS in 19m 43s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/130057b3b5f34d2bab7ca52053b6da5a : SUCCESS in 20m 28s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/19d2fa4a5d9b4b769b91da93e17efc1b : SUCCESS in 6m 38s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/136ad41b32f94d079881b477dc9030a0 : SUCCESS in 11m 38s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/f1fa7ec5d992494c8ca221957ceb9d87 : SUCCESS in 20m 46s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/16609c8d675544358a44a822926b6b3d : SUCCESS in 27m 59s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/20ed496b2e7a4025b00778220fd8d20f : SUCCESS in 19m 34s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/ce52af63b4514fbcb085f6d688771503 : SUCCESS in 15m 34s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/6c49cac378c94d9db9e5b7b54c597d81 : SUCCESS in 15m 35s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/73a2448dc6474adcb244761824578f4e : SUCCESS in 16m 21s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/3e60b9684e114d8fae8635ca294b558b : SUCCESS in 6m 35s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/2f81e88b58184f4d961e3967e1f90000 : SUCCESS in 18m 45s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/39d7cd5b64a94e899e97a5e558ab8c53 : SUCCESS in 7m 53s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/44df24104ad4435095ee2629d4e3aaf5 : TIMED_OUT in 2h 00m 56s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/24cafc8580404c5ba3b537ac748f6d34 : SUCCESS in 51m 07s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/9340230299004d42a4fc7e1605a3c59b : SUCCESS in 49m 29s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/300e97c9662a4fa88ba7e53e4eb9451f : SUCCESS in 31m 29s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/6764d09312184195a0c6f9666e06d99a : SUCCESS in 5m 44s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/aa249cbd30c7484899fa53b62ac3be89 : SUCCESS in 19m 17s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/4ae54d7c087245e6b92f90345c39b6fc : SUCCESS in 35m 09s","accounts_in_message":[],"_revision_number":5},{"id":"a7467592257c150dbc6ac5eed32496df27907731","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"date":"2026-06-01 08:21:52.000000000","message":"Uploaded patch set 6: Patch Set 5 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":6},{"id":"cc09ce7413fd73bdce243211c9a0426351afdd99","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-01 09:28:43.000000000","message":"Patch Set 6:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/ab19f29b00dc42eab80b9588eb82754f\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/88697064775b4d73a0d764e8a6927997 : SUCCESS in 1h 00m 52s","accounts_in_message":[],"_revision_number":6},{"id":"f8f45c9b1f95cb5cabf4cdede3320a57acfebf2f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-01 10:29:22.000000000","message":"Patch Set 6: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/378e7453b3e8469a87c71e5d019ac0d6\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/52606aa9e90d4cceb61ad240acabb915 : SUCCESS in 11m 47s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/37ebc11245a94cd0b5c01902e3c797f8 : SUCCESS in 8m 30s\n- grenade https://zuul.opendev.org/t/openstack/build/880d99bbd53743068cf0bfb31577a30d : SUCCESS in 1h 08m 38s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/f2242773310c42a689917c11bb5f98c4 : SUCCESS in 1h 01m 01s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/aa35adf451b44c97a377d288597e2d92 : SUCCESS in 58m 09s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/1377aea874204c90b8b5e72d40d5c903 : SUCCESS in 1h 08m 46s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/36dee9f7a51e42ca8529712e534632d2 : SUCCESS in 17m 55s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/9723ad1059f7436ea25c8ca5577798f3 : SUCCESS in 22m 12s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/d4a5346be0664b1c9bc4479a4f034821 : SUCCESS in 20m 53s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/5ea5f634b67946df9bac6b9dd66ea3e9 : SUCCESS in 7m 34s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/5784effb819e43b2aa9b91d7d3576515 : SUCCESS in 20m 31s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/981d1fa12b984afaba218fdd16f3706c : SUCCESS in 18m 07s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/b9020fc6578341f89dae735733981cd0 : SUCCESS in 30m 46s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/9e623a5d20c94d44add3c158de3f5a20 : SUCCESS in 19m 12s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/52ac1c1bdb944433b1fce47eb40dc21c : SUCCESS in 14m 30s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/77a13c446c1b4d8a910afd1bfca522b8 : SUCCESS in 16m 34s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/442391d8610f460da03f34b782c06699 : SUCCESS in 16m 17s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/3933efb1d1ee4720a9a2923ddb261783 : SUCCESS in 6m 19s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/0df9ecd8bc234e35afbe656fcd6ac0dc : SUCCESS in 22m 22s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/6bf96ee5bd264a6980c25aef6b745c97 : SUCCESS in 8m 41s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/7e7c230c4bae470cbe580505dedc7937 : TIMED_OUT in 2h 01m 08s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/662e80e676804a27b10da0032341fa61 : SUCCESS in 51m 08s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/923d206f0ef343bdbd4f00ea9a6a5653 : SUCCESS in 56m 53s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/a21a575e3d1f4706a6b03a7ebee9c720 : SUCCESS in 28m 52s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/3036a5d28b824750b6688fdf804b3551 : SUCCESS in 4m 54s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/03f4f5732eef4793ab4cb3b34dd55050 : SUCCESS in 25m 00s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/64dbeb29e611485e81a7c05c7ba9d4ab : SUCCESS in 1h 04m 17s","accounts_in_message":[],"_revision_number":6}],"current_revision_number":6,"current_revision":"8517b08b1630f969d976ef16ecebb96e699db833","revisions":{"eb23043b653b20a557b1ba2989d15308bb9851d3":{"kind":"REWORK","_number":1,"created":"2025-08-13 22:59:15.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/91/957291/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/91/957291/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/91/957291/1"}}},"commit":{"parents":[{"commit":"0bdc807484e0c5b8089c1012196357dd8df28197","subject":"ringbuilder cli: better track different command types","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/0bdc807484e0c5b8089c1012196357dd8df28197"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-12 06:41:43.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-13 07:46:55.000000000","tz":600},"subject":"ring: Let ring keep and use a RingData instance","message":"ring: Let ring keep and use a RingData instance\n\nThere is so much duplication between the `Ring` and `RingData` classes.\nWorse when the ring does a reload it de-serializes the ringdata and then\ncopies it\u0027s data into itself then throws it away.\nWhen we start adding more data structures into the ring, they need to be\nplaced inside both classes and copied around the place.\n\nThis patch refactors the Ring class to just hold onto and use the\nRingData class as the storage for the ring data. Anything that is ring\nspecific can just be defined in the ring. New data structures can be\nplaced in RingData, then the Ring object grows a `__getattr__`\nfunction, which is called if a variable or attribute is not found in the\ndict for the Ring class. Which we then just define it to look inside the\nheld RingData class:\n\n    def __getattr__(self, name,):\n        if time() \u003e self._rtime:\n            self._reload()\n        return getattr(self._ring_data, name)\n\nWhat is also nice is we can use this to do our ring reload check any time\nwe try and access data that is serialized.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Ie3815038bc0a31a796b45ab9ef296274bbefb8b7\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/eb23043b653b20a557b1ba2989d15308bb9851d3"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/eb23043b653b20a557b1ba2989d15308bb9851d3"}]},"branch":"refs/heads/master"},"8673e38dc06154592626870f90c84b3c4f3cf28f":{"kind":"REWORK","_number":2,"created":"2025-08-13 23:02:20.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/91/957291/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/91/957291/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/91/957291/2"}}},"commit":{"parents":[{"commit":"0bdc807484e0c5b8089c1012196357dd8df28197","subject":"ringbuilder cli: better track different command types","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/0bdc807484e0c5b8089c1012196357dd8df28197"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-12 06:41:43.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-13 23:01:57.000000000","tz":600},"subject":"ring: Let ring keep and use a RingData instance","message":"ring: Let ring keep and use a RingData instance\n\nThere is so much duplication between the `Ring` and `RingData` classes.\nWorse when the ring does a reload it de-serializes the ringdata and then\ncopies it\u0027s data into itself then throws it away.\nWhen we start adding more data structures into the ring, they need to be\nplaced inside both classes and copied around the place.\n\nThis patch refactors the Ring class to just hold onto and use the\nRingData class as the storage for the ring data. Anything that is ring\nspecific can just be defined in the ring. New data structures can be\nplaced in RingData, then the Ring object grows a `__getattr__`\nfunction, which is called if a variable or attribute is not found in the\ndict for the Ring class. Which we then just define it to look inside the\nheld RingData class:\n\n    def __getattr__(self, name,):\n        if time() \u003e self._rtime:\n            self._reload()\n        return getattr(self._ring_data, name)\n\nWhat is also nice is we can use this to do our ring reload check any time\nwe try and access data that is serialized.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Ie3815038bc0a31a796b45ab9ef296274bbefb8b7\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/8673e38dc06154592626870f90c84b3c4f3cf28f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/8673e38dc06154592626870f90c84b3c4f3cf28f"}]},"branch":"refs/heads/master"},"ce98b46f2e5d2bc3be12877a70dc0c241b52e9db":{"kind":"REWORK","_number":3,"created":"2025-08-27 07:54:45.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/91/957291/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/91/957291/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/91/957291/3"}}},"commit":{"parents":[{"commit":"0897bc57e0bfc031b78f4beabe30a942b15474bf","subject":"ringbuilder cli: better track different command types","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/0897bc57e0bfc031b78f4beabe30a942b15474bf"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-12 06:41:43.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-26 23:00:30.000000000","tz":600},"subject":"ring: Let ring keep and use a RingData instance","message":"ring: Let ring keep and use a RingData instance\n\nThere is so much duplication between the `Ring` and `RingData` classes.\nWorse when the ring does a reload it de-serializes the ringdata and then\ncopies it\u0027s data into itself then throws it away.\nWhen we start adding more data structures into the ring, they need to be\nplaced inside both classes and copied around the place.\n\nThis patch refactors the Ring class to just hold onto and use the\nRingData class as the storage for the ring data. Anything that is ring\nspecific can just be defined in the ring. New data structures can be\nplaced in RingData, then the Ring object grows a `__getattr__`\nfunction, which is called if a variable or attribute is not found in the\ndict for the Ring class. Which we then just define it to look inside the\nheld RingData class:\n\n    def __getattr__(self, name,):\n        if time() \u003e self._rtime and not self.reload_lock._is_owned():\n            self._reload()\n        return getattr(self._ring_data, name)\n\nWhat is also nice is we can use this to do our ring reload check any time\nwe try and access data that is serialized.\n\nTo stop certain longer running functions like get_nodes and\nget_more_nodes, there is also a reentrant lock (rlock) used so stop the\nreload, so we get a constant view albeit maybe slightly stale in these\ntimes.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Ie3815038bc0a31a796b45ab9ef296274bbefb8b7\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ce98b46f2e5d2bc3be12877a70dc0c241b52e9db"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ce98b46f2e5d2bc3be12877a70dc0c241b52e9db"}]},"branch":"refs/heads/master"},"40ccb4b2b3c960b6a24090d0f7c2fc0f5edef95d":{"kind":"TRIVIAL_REBASE","_number":4,"created":"2026-02-18 01:45:36.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/91/957291/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/91/957291/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/91/957291/4"}}},"commit":{"parents":[{"commit":"27cd4892c2eae281883c49ced82f6626df578455","subject":"ringbuilder cli: better track different command types","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/27cd4892c2eae281883c49ced82f6626df578455"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-12 06:41:43.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2026-02-18 01:37:57.000000000","tz":660},"subject":"ring: Let ring keep and use a RingData instance","message":"ring: Let ring keep and use a RingData instance\n\nThere is so much duplication between the `Ring` and `RingData` classes.\nWorse when the ring does a reload it de-serializes the ringdata and then\ncopies it\u0027s data into itself then throws it away.\nWhen we start adding more data structures into the ring, they need to be\nplaced inside both classes and copied around the place.\n\nThis patch refactors the Ring class to just hold onto and use the\nRingData class as the storage for the ring data. Anything that is ring\nspecific can just be defined in the ring. New data structures can be\nplaced in RingData, then the Ring object grows a `__getattr__`\nfunction, which is called if a variable or attribute is not found in the\ndict for the Ring class. Which we then just define it to look inside the\nheld RingData class:\n\n    def __getattr__(self, name,):\n        if time() \u003e self._rtime and not self.reload_lock._is_owned():\n            self._reload()\n        return getattr(self._ring_data, name)\n\nWhat is also nice is we can use this to do our ring reload check any time\nwe try and access data that is serialized.\n\nTo stop certain longer running functions like get_nodes and\nget_more_nodes, there is also a reentrant lock (rlock) used so stop the\nreload, so we get a constant view albeit maybe slightly stale in these\ntimes.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Ie3815038bc0a31a796b45ab9ef296274bbefb8b7\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/40ccb4b2b3c960b6a24090d0f7c2fc0f5edef95d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/40ccb4b2b3c960b6a24090d0f7c2fc0f5edef95d"}]},"branch":"refs/heads/master"},"ee52679f64a99673da55b7c27961912e2b71201a":{"kind":"TRIVIAL_REBASE","_number":5,"created":"2026-04-07 05:01:51.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/91/957291/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/91/957291/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/91/957291/5"}}},"commit":{"parents":[{"commit":"c297f2e6345c58521d5c4998e87354433dd6b7f3","subject":"ringbuilder cli: better track different command types","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/c297f2e6345c58521d5c4998e87354433dd6b7f3"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-12 06:41:43.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2026-03-30 03:10:51.000000000","tz":660},"subject":"ring: Let ring keep and use a RingData instance","message":"ring: Let ring keep and use a RingData instance\n\nThere is so much duplication between the `Ring` and `RingData` classes.\nWorse when the ring does a reload it de-serializes the ringdata and then\ncopies it\u0027s data into itself then throws it away.\nWhen we start adding more data structures into the ring, they need to be\nplaced inside both classes and copied around the place.\n\nThis patch refactors the Ring class to just hold onto and use the\nRingData class as the storage for the ring data. Anything that is ring\nspecific can just be defined in the ring. New data structures can be\nplaced in RingData, then the Ring object grows a `__getattr__`\nfunction, which is called if a variable or attribute is not found in the\ndict for the Ring class. Which we then just define it to look inside the\nheld RingData class:\n\n    def __getattr__(self, name,):\n        if time() \u003e self._rtime and not self.reload_lock._is_owned():\n            self._reload()\n        return getattr(self._ring_data, name)\n\nWhat is also nice is we can use this to do our ring reload check any time\nwe try and access data that is serialized.\n\nTo stop certain longer running functions like get_nodes and\nget_more_nodes, there is also a reentrant lock (rlock) used so stop the\nreload, so we get a constant view albeit maybe slightly stale in these\ntimes.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Ie3815038bc0a31a796b45ab9ef296274bbefb8b7\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ee52679f64a99673da55b7c27961912e2b71201a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/ee52679f64a99673da55b7c27961912e2b71201a"}]},"branch":"refs/heads/master"},"8517b08b1630f969d976ef16ecebb96e699db833":{"kind":"TRIVIAL_REBASE","_number":6,"created":"2026-06-01 08:21:52.000000000","uploader":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"ref":"refs/changes/91/957291/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/91/957291/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/91/957291/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/91/957291/6"}}},"commit":{"parents":[{"commit":"0fea3cf886a4228aa77f3000e559d109128ebeae","subject":"ringbuilder cli: better track different command types","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/0fea3cf886a4228aa77f3000e559d109128ebeae"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2025-08-12 06:41:43.000000000","tz":600},"committer":{"name":"Christian Schwede","email":"cschwede@mailbox.org","date":"2026-05-31 14:23:39.000000000","tz":120},"subject":"ring: Let ring keep and use a RingData instance","message":"ring: Let ring keep and use a RingData instance\n\nThere is so much duplication between the `Ring` and `RingData` classes.\nWorse when the ring does a reload it de-serializes the ringdata and then\ncopies it\u0027s data into itself then throws it away.\nWhen we start adding more data structures into the ring, they need to be\nplaced inside both classes and copied around the place.\n\nThis patch refactors the Ring class to just hold onto and use the\nRingData class as the storage for the ring data. Anything that is ring\nspecific can just be defined in the ring. New data structures can be\nplaced in RingData, then the Ring object grows a `__getattr__`\nfunction, which is called if a variable or attribute is not found in the\ndict for the Ring class. Which we then just define it to look inside the\nheld RingData class:\n\n    def __getattr__(self, name,):\n        if time() \u003e self._rtime and not self.reload_lock._is_owned():\n            self._reload()\n        return getattr(self._ring_data, name)\n\nWhat is also nice is we can use this to do our ring reload check any time\nwe try and access data that is serialized.\n\nTo stop certain longer running functions like get_nodes and\nget_more_nodes, there is also a reentrant lock (rlock) used so stop the\nreload, so we get a constant view albeit maybe slightly stale in these\ntimes.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Ie3815038bc0a31a796b45ab9ef296274bbefb8b7\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/8517b08b1630f969d976ef16ecebb96e699db833"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/8517b08b1630f969d976ef16ecebb96e699db833"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
