)]}'
{"id":"openstack%2Fswift~980535","triplet_id":"openstack%2Fswift~master~I6b35a1a2c7e6df683fe1cd3d75d1fa573e01820e","project":"openstack/swift","branch":"master","attention_set":{},"removed_from_attention_set":{"330":{"account":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"last_update":"2026-03-25 21:24:56.000000000","reason":"Change was submitted"},"15343":{"account":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"last_update":"2026-03-24 20:43:01.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":"I6b35a1a2c7e6df683fe1cd3d75d1fa573e01820e","subject":"common/utils: fix LRUCache ghost-link corruption on expiry refresh","status":"MERGED","created":"2026-03-13 21:59:26.000000000","updated":"2026-03-25 22:05:34.000000000","submitted":"2026-03-25 21:24:56.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":16,"unresolved_comment_count":1,"has_review_started":true,"submission_id":"980535","meta_rev_id":"d69347ffc6f827a6a505b2b95db06f5e12706152","_number":980535,"virtual_id_number":980535,"owner":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-03-25 21:24:55.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":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"all":[{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":2,"date":"2026-03-25 16:49:20.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":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":1,"date":"2026-03-25 16:49:20.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":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":"2026-03-13 22:33:25.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-13 23:07:11.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-14 00:56:42.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-25 16:49:20.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":"7c7029c7da52dbfebc38cacb9a9ad99aef312581","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2026-03-13 21:59:26.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"d9b2459dc2bf185b208f238b7c3932fce9c29f65","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-13 22:33:25.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/cb7e7b48eb7047e3b32ccbc50fb066bb\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/20d07c70cfe3410faad02ff17f8f038f : SUCCESS in 32m 32s","accounts_in_message":[],"_revision_number":1},{"id":"0309e2b37bc807614fb5eb64e8f89caae3283950","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-13 23:07:11.000000000","message":"Patch Set 1: Verified-1\n\n(1 comment)\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/86d8307256884b9c99c5318fc82da0c3\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6cf646287d8e457f82aa4d08876e86d2 : SUCCESS in 4m 39s\n- grenade https://zuul.opendev.org/t/openstack/build/de45c5bc48ac4c2cb61cf90fadc71062 : SUCCESS in 35m 47s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/6eb31a50484647af90939b2397aed564 : SUCCESS in 45m 58s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/0d72bb23b8f54603bc5507dc05a02104 : SUCCESS in 29m 48s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/ad32adde7ac149008e34c391933dadbf : SUCCESS in 1h 02m 21s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/bf605d551a4048439495e2271966ed3e : SUCCESS in 9m 49s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/53ce0ba148fc449fbf197942db51dd36 : SUCCESS in 9m 55s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/9f224ec4dac149978e0a3832b672ffa6 : SUCCESS in 11m 54s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/659e849daf6042ce89135d4f74896389 : SUCCESS in 4m 06s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/f206057a68194afcaaa9e021518c4428 : SUCCESS in 18m 16s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/1eeea7fecef44af18b6e0f0c41bb9c87 : SUCCESS in 20m 38s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/41ea9d3c8863446f98c48450aaba4f8a : SUCCESS in 10m 36s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/830532a9a43141c694fd136a9ec83ce0 : SUCCESS in 10m 26s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/23837ab8090540ad809f443fd2caf60f : SUCCESS in 8m 47s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/24bfa9301786457c9bc87982d75755bf : SUCCESS in 7m 50s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/408ca9ba17f44efd892b3a7132070232 : SUCCESS in 13m 26s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/327c8798233040bb847b0dabd5c4c379 : SUCCESS in 5m 19s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/45d43151d02843d9ae7564816be79b36 : SUCCESS in 12m 34s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/e021416239e545a3806116c6e41f4ff4 : SUCCESS in 8m 04s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/38babf4ad1754307933d4ba79a6a12dd : SUCCESS in 49m 18s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/14e8e99642014a949322fb7c37954152 : SUCCESS in 53m 09s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/ea9accef25f64d1b8dac218a64ef47f4 : SUCCESS in 21m 50s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/80529aaf57c64bd9baccf01b30b6d1bb : SUCCESS in 20m 11s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/09682efdd6f34ee1b955ca87d73e158e : FAILURE in 3m 39s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/1a9b2768ebaa48ae8d3de4b95f2bb5f3 : SUCCESS in 8m 26s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/900807e9df6f4d31a807ccb83af1e43f : SUCCESS in 46m 53s","accounts_in_message":[],"_revision_number":1},{"id":"055cb851f9146f749d99efc77fa4009f4096477a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2026-03-14 00:36:18.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified-1\n","accounts_in_message":[],"_revision_number":2},{"id":"73148f22c3966b3aaefc219ade54c3ca1bb90108","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-03-14 00:56:42.000000000","message":"Patch Set 1:\n\n(7 comments)","accounts_in_message":[],"_revision_number":1},{"id":"ed284c31bcd933924a8f4c42a2036190cbbed533","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-14 01:09:57.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/9234aee7faee472cb617ffba0b46d436\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/605e16526b674eb29968d764b9091c86 : SUCCESS in 32m 00s","accounts_in_message":[],"_revision_number":2},{"id":"3f790894a723f100d76c25e5303f936321591f74","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-14 01:48:58.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/5b13227a33b243e29a41fefc26ddd604\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/dfae92296ed24df3aed4df2f04f2c9d1 : SUCCESS in 9m 44s\n- grenade https://zuul.opendev.org/t/openstack/build/ce837991564a442aa0a9793f8ec55a49 : SUCCESS in 59m 05s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/2bdaf973ba1d41d2a902db042c0aae93 : SUCCESS in 1h 02m 21s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/0bef2574a0e54847aab6128beb900469 : SUCCESS in 56m 51s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/af0cae98b20d4cdfbec92b2e03c0be1f : SUCCESS in 1h 02m 36s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/49a736e7897b4efcaad269781d4e7b77 : SUCCESS in 19m 19s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/be5401701799496a878ef717e1b109fa : SUCCESS in 19m 58s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/92329fade4234972ba28a9526476b0e2 : SUCCESS in 11m 23s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/32e9f29ba1c9460786fd0f4e067d36f4 : SUCCESS in 6m 52s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/4e38405c701c442dae484c0389147c46 : SUCCESS in 26m 07s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/2352c8b3f6df4e40ab98d1e98e41a64b : SUCCESS in 20m 34s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/b29a2a8b58954fc18c7b8a7e07835998 : SUCCESS in 12m 25s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/37cf8ec7619a4f2d8a7ae4ec6a35a4f7 : SUCCESS in 13m 29s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/4b5d033507194c3597b9b5e2ee92efe7 : SUCCESS in 14m 55s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/eb40b0b0379d4d7f956ca5bc0565bf11 : SUCCESS in 14m 33s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/2488c2d41b2f49b993f27fb030d0b868 : SUCCESS in 15m 03s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/4988d237d32f48d68022e70507ab5331 : SUCCESS in 6m 18s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/c9560c7e0b22431c918e162de00b5215 : SUCCESS in 8m 46s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/ef611d158c0c41c48680eb19c61a564f : SUCCESS in 8m 00s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/3c28229e9ff24a1c9fcf671474fe6f97 : SUCCESS in 1h 01m 25s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/1fa0b8bf7fc5425884cc73179990f507 : SUCCESS in 33m 40s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/0682afad61ce4cf6a3b20f547c62b8f9 : SUCCESS in 56m 58s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/457b187590eb4193b7edc3d1bb54b8fc : SUCCESS in 12m 39s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4bcf47424da24885933811eb3ef25238 : SUCCESS in 2m 50s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/8297fc1821ee4c7cbe6e843bba175ddf : SUCCESS in 9m 46s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/c5a8d06b7f0b46cfaeb883d68e104ee6 : SUCCESS in 1h 07m 09s","accounts_in_message":[],"_revision_number":2},{"id":"d5080bac69a56e332d2ee34f6fe480950411147d","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2026-03-16 17:09:50.000000000","message":"Uploaded patch set 3.\n\nOutdated Votes:\n* Verified+1\n","accounts_in_message":[],"_revision_number":3},{"id":"f40f17da64f00d397ce38962ffccea5d62a16a61","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2026-03-16 17:12:26.000000000","message":"Patch Set 3:\n\n(6 comments)","accounts_in_message":[],"_revision_number":3},{"id":"3409a222c8ad27cb83195bec33ef82e3d39dd756","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-16 18:10:28.000000000","message":"Patch Set 3:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/de7d4392ab1945cc9f1621857335920a\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/51b2311438e343e7879d1663ce517598 : SUCCESS in 34m 44s","accounts_in_message":[],"_revision_number":3},{"id":"8503cc552d6d8ce3964d43a05eac17e8607ae496","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-16 18:24:39.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/da86bf0e37754bc48e9c5e756bff95e4\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/5e84042e7f7949cf9a71364eea930f0f : SUCCESS in 11m 05s\n- grenade https://zuul.opendev.org/t/openstack/build/c5e37fc292d048a390c4fe08f79ea9ee : SUCCESS in 1h 02m 23s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/bf29b0e79c6d497eb29b9d02b4c1686e : SUCCESS in 57m 00s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/ac73c76d658145069a98a50a027e34a5 : SUCCESS in 55m 02s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/6780cdf15c004a928677edd63d17fb1f : SUCCESS in 1h 08m 35s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/5bf1946235c64bea84676a7ca06fa333 : SUCCESS in 20m 54s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/18a9c9e772844b059fd0b7b2450a0a1f : SUCCESS in 19m 41s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/95fbfb6cd6284856861e5fb111287d31 : SUCCESS in 20m 10s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/17b34e749d204fb0a0efde3082a141c8 : SUCCESS in 7m 35s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/fa69033faef94e86b93d4c57d4198514 : SUCCESS in 29m 08s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/a97c418e66864cbbb89664fada990959 : SUCCESS in 23m 07s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/dbd6e7def23440c4b0cefb24d5760b68 : SUCCESS in 29m 29s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/b642f16328ca400cb600cb6bfab9e6dd : SUCCESS in 9m 58s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/bc7565f07d63487a819c0a3333439a74 : SUCCESS in 16m 08s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/a0cdd055ba5544da84863b6eee430f81 : SUCCESS in 16m 08s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/180cf3d8a11142699ff90d9695dc893e : SUCCESS in 13m 08s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/bb353148ff41459d998fe3868697d2ce : SUCCESS in 7m 23s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/393bda70f64545b6b2dca620fe39146d : SUCCESS in 16m 31s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/70579b33f9b74343af0219811d04b46a : SUCCESS in 9m 17s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/28550190160b42f79f82e0cc7bd91457 : SUCCESS in 45m 30s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/cc31f543ec6f49aaa6d025498001e84a : SUCCESS in 56m 12s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/348b1cac180d41a1a21372732ab8b053 : SUCCESS in 30m 42s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/52eb1fac49b44f0c92baa8802ef7ab97 : SUCCESS in 31m 49s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/cf4cf1a874764dc9826492b6a79637e9 : SUCCESS in 3m 31s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/7a76654d1e674516840bce26fcc6e0d1 : SUCCESS in 26m 06s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/3dc5d34fcfdf43e597f70d7aa6d11d6f : SUCCESS in 41m 32s","accounts_in_message":[],"_revision_number":3},{"id":"ada17702f515d1edd2488a73e07fcfa1c35c83c4","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2026-03-16 23:59:24.000000000","message":"Uploaded patch set 4: Commit message was updated.\n\nOutdated Votes:\n* Verified+1\n","accounts_in_message":[],"_revision_number":4},{"id":"36e8fa69f896e228103d56fae25f86cc6c7791b8","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-17 01:05:25.000000000","message":"Patch Set 4:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/8bf083198c7945cb835068e8b0454df1\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/514695ab7065491c8a394a3798be33ab : SUCCESS in 1h 02m 30s","accounts_in_message":[],"_revision_number":4},{"id":"b08964c57e4e9f34493335a05df8a254c3290821","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-17 01:22:12.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/a75d24620b664ec0a9d1557bb345d15b\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2dc11efefdfa4d919e080d1c4cbff5c3 : SUCCESS in 10m 19s\n- grenade https://zuul.opendev.org/t/openstack/build/84400ae7d4364629830b9efe26f19ff2 : SUCCESS in 1h 02m 52s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/b80741ccc1204c4e921ec58a3e868e1b : SUCCESS in 57m 51s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/2a98c537db1242cbb00fd8535934fac1 : SUCCESS in 1h 05m 51s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/d49ac38b91c24ddc8d40442879943b83 : SUCCESS in 1h 05m 51s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/314041f99e6745eb99d45f01df286c13 : SUCCESS in 15m 37s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/f1af242989bd4a3c88bf9aff2f3c794c : SUCCESS in 11m 33s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/36a6059fc47640e581678000fab7f581 : SUCCESS in 10m 27s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/53f5a8fb860448b5be3d3111b8fd5558 : SUCCESS in 4m 04s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/d967f759ac194b6da653f5836454568e : SUCCESS in 10m 05s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/06f5f93d0d304c4f84d6b45b5c40f991 : SUCCESS in 11m 02s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/3fbcb5805685448c8f6b6575c6a17c24 : SUCCESS in 10m 55s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/5333b9c749a94d35a34851324cc21559 : SUCCESS in 9m 02s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/80635e040d634e599f329ff2f2492af4 : SUCCESS in 14m 40s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/1cee34561da94742b963b738b0137e81 : SUCCESS in 11m 36s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/1abf211fe45b42f6803c364b2a2bd3e2 : SUCCESS in 8m 54s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/17e94efd70974f9a8417070e46f7bc69 : SUCCESS in 6m 47s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/9d708a8e94924e70991c10cb6e6c20ab : SUCCESS in 15m 46s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/317fcb87eef94e87b8bd86b17a1647bb : SUCCESS in 12m 20s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/13bed8dd5c7e44f6a0d5f5432c32e380 : SUCCESS in 34m 44s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/1a9a81d5eefe4d5382df0c1c7ed4b779 : SUCCESS in 34m 48s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/f8b692960b9d4094b50de834cfcb79f6 : SUCCESS in 25m 00s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/33e3b176bf784f05b68edd638bdac595 : SUCCESS in 21m 17s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/e54652dfb38a4dbc9b18fca5670edad2 : SUCCESS in 3m 55s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/35b67064652c46c1adb0473f824bea65 : SUCCESS in 15m 30s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/616ac4c3190942269ba7cbe15d1d9874 : SUCCESS in 1h 16m 06s","accounts_in_message":[],"_revision_number":4},{"id":"bcbf600c8dfcd743848d3d9d8e687d5a538222f1","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-03-24 20:43:01.000000000","message":"Patch Set 4:\n\n(1 comment)","accounts_in_message":[],"_revision_number":4},{"id":"7039451c5cfe6f3cf80d31bd80f63e68044f62e2","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-03-24 21:12:35.000000000","message":"Patch Set 4:\n\n(1 comment)","accounts_in_message":[],"_revision_number":4},{"id":"cc3a4985acb69aeae920cacd09389b65c5ae1eb2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"date":"2026-03-25 16:41:05.000000000","message":"Patch Set 5: Commit message was updated.\n\nOutdated Votes:\n* Verified+1\n","accounts_in_message":[],"_revision_number":5},{"id":"0e2cb049e26545a77eb838ce193f838ec6e59f01","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-03-25 16:49:20.000000000","message":"Patch Set 5: Code-Review+2 Workflow+1\n\n(1 comment)","accounts_in_message":[],"_revision_number":5},{"id":"a18e9a716f321881c7a3a49dbba8c3d630ee24c9","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-25 18:00:45.000000000","message":"Patch Set 5: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/9d83ef6ba0a849128e3ed34381fbfd63\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2a51184940f1463bbbf693b5bf4e38ac : SUCCESS in 6m 00s\n- grenade https://zuul.opendev.org/t/openstack/build/ccf683b3ce20414190297034229ccebb : SUCCESS in 31m 13s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/1be89d25cb9f4bb5b901f0b9ea530056 : SUCCESS in 1h 01m 31s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/7048e7bb09f64960ab1b4adb56686720 : SUCCESS in 30m 56s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/4c7ced47f10c41f08e709e8195941dec : SUCCESS in 1h 08m 25s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/7ba12ba535e4441fb225ee3b2dcbb846 : SUCCESS in 19m 04s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/ed0885264d384f83b14552967bf6f61f : SUCCESS in 10m 51s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/c7a4cf0b2a104a69b0660a5a34066b07 : SUCCESS in 11m 06s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/f77d7af3553b4493832511d412d365b2 : SUCCESS in 8m 46s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/698060e8b4d543f3a97f34460d135175 : SUCCESS in 25m 57s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/e7b56c0862d44f8bab1a548acc733402 : SUCCESS in 17m 10s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/c3409b37b5e941518f79fcbded621c15 : SUCCESS in 13m 17s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/fdf181acce8346c58691f27ab6979ff4 : SUCCESS in 20m 09s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/5e14cc1cf52d4c8d990e9e1f4f954d56 : SUCCESS in 14m 11s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/19250653f67c483aa6061404f9438afc : SUCCESS in 17m 15s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/34f2291fa7c4480e832262a016e77455 : SUCCESS in 8m 54s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/06365bc3a53b4e8fb975c2ad2fc2fb7d : SUCCESS in 5m 55s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/fe97c20f9de448f8ae026adee5625fea : SUCCESS in 15m 08s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/44222e6c17524cfe81b80a443492f7d0 : SUCCESS in 8m 02s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/8c5686cad15b43f89d8de50d059044e1 : SUCCESS in 37m 13s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/8576d64ede424d79b130cf6ae13436c4 : SUCCESS in 56m 40s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/79ad009014444174bb9aa9340bbcf4a0 : SUCCESS in 56m 57s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/d58da2d819624d49a0eead8c81f9a19e : SUCCESS in 26m 54s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/b25eac1b78a84d558d43ef6b9895b3ca : SUCCESS in 5m 21s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/9d2cfd57c5ce494e986ed020b1834ffe : SUCCESS in 20m 22s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/3bf77b3d4b9f454d9f1cd1ca0b0d5bba : SUCCESS in 1h 14m 05s","accounts_in_message":[],"_revision_number":5},{"id":"0bdbd85cb7bdb05a6be415e42348a8dd41fdcb3a","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-25 18:01:20.000000000","message":"Patch Set 5: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":5},{"id":"942108845df3e9f771d7024e5d198fa0319cf8c8","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-25 21:24:55.000000000","message":"Patch Set 5: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/9dddd13b9b3f4d74a3d5a944d258db85\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f05d473238d9476a85b76b17f0626b42 : SUCCESS in 10m 06s\n- grenade https://zuul.opendev.org/t/openstack/build/e06aed4e5e1a44aeba33aba353c049e7 : SUCCESS in 33m 39s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/fa4fdd2b90d14588b747382e71acc79d : SUCCESS in 34m 57s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/7b5da9e2d1ae42afbf650e1a3488fd88 : SUCCESS in 31m 04s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/ae7c30db996f460e89ec3fe0b9022ac1 : SUCCESS in 1h 01m 41s\n- swift-upload-image https://zuul.opendev.org/t/openstack/build/5b00bf290cff49fea990b41cd4832b21 : SUCCESS in 5m 05s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/398bc7516b7548d4aed5fa68a6d773ff : SUCCESS in 25m 15s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/b232a42ee29042f097ce74662fbe5e59 : SUCCESS in 18m 32s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/2d2bce2659cc465f8cb9c0b4daf4668b : SUCCESS in 29m 21s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/525d49d54cf84bc5b66f49e0d6d9b714 : SUCCESS in 11m 55s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/1b2df24a1a254d02aa5cfdfa99f61405 : SUCCESS in 14m 19s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/5a0bf676b15b4df9a86e6028e86d3079 : SUCCESS in 15m 51s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/24343974227441c99f9b110279827219 : SUCCESS in 17m 33s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/7c5eda0e30cc48eb9e205357cbaf6cef : SUCCESS in 6m 27s\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/a8d7ba7a034f492ab80e2fa466172264 : SUCCESS in 9m 00s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/940ee894a3aa44b8869e4346c690ddf6 : SUCCESS in 1h 12m 29s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/b07f4ba34b584b09aec40d88888b78dc : SUCCESS in 39m 35s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/7f7a94816d6d4d9098713d74dae633c7 : SUCCESS in 57m 26s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/50e3f330f8d045b98de428c8c051d9e5 : SUCCESS in 23m 02s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/9576928e687f4d448a440356e9c68d21 : SUCCESS in 3m 45s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/8fab7fe1bdbd4848a7384f41221a9c43 : SUCCESS in 10m 09s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/ca1e0af800ba414f8a365b9003a81336 : SUCCESS in 35m 08s","accounts_in_message":[],"_revision_number":5},{"id":"4e19a36940b18e8f007b8e99db51a1377daaeef8","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-25 21:24:56.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":5},{"id":"58073233c01d9969f04e15f0f1076524b071a3c1","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-25 21:25:56.000000000","message":"Patch Set 5:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/636c1872e5cf42d68f135694ebf0a960\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/9df499b3ee2643bcbeb79b7adbd2b70a : SUCCESS in 43s\n- swift-promote-image https://zuul.opendev.org/t/openstack/build/6ad5d7288ab84bc1a2f68b2686c543aa : SUCCESS in 47s (non-voting)","accounts_in_message":[],"_revision_number":5},{"id":"d69347ffc6f827a6a505b2b95db06f5e12706152","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-03-25 22:05:34.000000000","message":"Patch Set 5:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/a5cafd1360f74043bc1c20fa2fd07169\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/face33ed16a5402785aa35de96c3dc61 : SUCCESS in 36m 32s","accounts_in_message":[],"_revision_number":5}],"current_revision_number":5,"current_revision":"829439ed9f792111aafc1b8920ea71a796e0afcd","revisions":{"e58ff9641b547c5c1de48142ddd533d918335d06":{"kind":"REWORK","_number":1,"created":"2026-03-13 21:59:26.000000000","uploader":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"ref":"refs/changes/35/980535/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/35/980535/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/35/980535/1"}}},"commit":{"parents":[{"commit":"e63f0b3d68770d4792e1606ff8fe924b3f25b7f9","subject":"Merge \"tests: Make self.ts reliably a method (if present)\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e63f0b3d68770d4792e1606ff8fe924b3f25b7f9"}]}],"author":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-13 21:35:06.000000000","tz":-420},"committer":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-13 21:59:12.000000000","tz":-420},"subject":"common/utils: fix LRUCache ghost-link corruption on expiry refresh","message":"common/utils: fix LRUCache ghost-link corruption on expiry refresh\n\nWhen a cached entry timed out and was refreshed, the stale doubly-linked-\nlist node was left in the list (the except KeyError branch only did pass).\nA subsequent eviction would walk that ghost node, call del mapping[key]\nwhich deleted the *fresh* entry for the same key, and leave the fresh node\nas an orphan.  The next time that key was re-cached, a second eviction of\nthe orphan attempted del mapping[key] again and raised KeyError.\n\nFix: on timeout, splice the ghost link out of the list and remove it from\nthe mapping before calling set_cache.  The del is necessary so that the\nsize count is accurate; without it set_cache sees the cache at capacity,\nspuriously evicts a live entry, and still leaves the ghost in the list.\n\nAdd a regression test that exercises both failure modes:\n- the spurious eviction of a live entry (caught by a size assertion)\n- the eventual KeyError crash (caught by try/except)\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nChange-Id: I6b35a1a2c7e6df683fe1cd3d75d1fa573e01820e\nSigned-off-by: John Dickinson \u003cme@not.mn\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e58ff9641b547c5c1de48142ddd533d918335d06"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e58ff9641b547c5c1de48142ddd533d918335d06"}]},"branch":"refs/heads/master"},"bb3cf970ccb649fe4610b7e0ee3511e618d21f47":{"kind":"REWORK","_number":2,"created":"2026-03-14 00:36:18.000000000","uploader":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"ref":"refs/changes/35/980535/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/35/980535/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/35/980535/2"}}},"commit":{"parents":[{"commit":"e63f0b3d68770d4792e1606ff8fe924b3f25b7f9","subject":"Merge \"tests: Make self.ts reliably a method (if present)\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e63f0b3d68770d4792e1606ff8fe924b3f25b7f9"}]}],"author":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-13 21:35:06.000000000","tz":-420},"committer":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-14 00:36:03.000000000","tz":-420},"subject":"common/utils: fix LRUCache ghost-link corruption on expiry refresh","message":"common/utils: fix LRUCache ghost-link corruption on expiry refresh\n\nWhen a cached entry timed out and was refreshed, the stale doubly-linked-\nlist node was left in the list (the except KeyError branch only did pass).\nA subsequent eviction would walk that ghost node, call del mapping[key]\nwhich deleted the *fresh* entry for the same key, and leave the fresh node\nas an orphan.  The next time that key was re-cached, a second eviction of\nthe orphan attempted del mapping[key] again and raised KeyError.\n\nFix: on timeout, splice the ghost link out of the list and remove it from\nthe mapping before calling set_cache.  The del is necessary so that the\nsize count is accurate; without it set_cache sees the cache at capacity,\nspuriously evicts a live entry, and still leaves the ghost in the list.\n\nAdd a regression test that exercises both failure modes:\n- the spurious eviction of a live entry (caught by a size assertion)\n- the eventual KeyError crash (caught by try/except)\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nChange-Id: I6b35a1a2c7e6df683fe1cd3d75d1fa573e01820e\nSigned-off-by: John Dickinson \u003cme@not.mn\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/bb3cf970ccb649fe4610b7e0ee3511e618d21f47"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/bb3cf970ccb649fe4610b7e0ee3511e618d21f47"}]},"branch":"refs/heads/master"},"636ba7fa1674fbe2253489a8233217f48c4ca13d":{"kind":"REWORK","_number":3,"created":"2026-03-16 17:09:50.000000000","uploader":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"ref":"refs/changes/35/980535/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/35/980535/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/35/980535/3"}}},"commit":{"parents":[{"commit":"e63f0b3d68770d4792e1606ff8fe924b3f25b7f9","subject":"Merge \"tests: Make self.ts reliably a method (if present)\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e63f0b3d68770d4792e1606ff8fe924b3f25b7f9"}]}],"author":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-13 21:35:06.000000000","tz":-420},"committer":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-16 17:07:54.000000000","tz":-420},"subject":"common/utils: fix LRUCache ghost-link corruption on expiry refresh","message":"common/utils: fix LRUCache ghost-link corruption on expiry refresh\n\nWhen a cached entry timed out and was refreshed, the stale doubly-linked-\nlist node was left in the list (the except KeyError branch only did pass).\nA subsequent eviction would walk that ghost node, call del mapping[key]\nwhich deleted the *fresh* entry for the same key, and leave the fresh node\nas an orphan.  The next time that key was re-cached, a second eviction of\nthe orphan attempted del mapping[key] again and raised KeyError.\n\nFix: on timeout, splice the ghost link out of the list and remove it from\nthe mapping before calling set_cache.  The del is necessary so that the\nsize count is accurate; without it set_cache sees the cache at capacity,\nspuriously evicts a live entry, and still leaves the ghost in the list.\n\nAdd a regression test that exercises both failure modes:\n- the spurious eviction of a live entry (caught by a size assertion)\n- the eventual KeyError crash (caught by try/except)\n\nChange-Id: I6b35a1a2c7e6df683fe1cd3d75d1fa573e01820e\nSigned-off-by: John Dickinson \u003cme@not.mn\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/636ba7fa1674fbe2253489a8233217f48c4ca13d"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/636ba7fa1674fbe2253489a8233217f48c4ca13d"}]},"branch":"refs/heads/master"},"18a4559d98c29be12f01cfa73f86cd1ab8f9a6a4":{"kind":"NO_CODE_CHANGE","_number":4,"created":"2026-03-16 23:59:24.000000000","uploader":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"ref":"refs/changes/35/980535/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/35/980535/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/35/980535/4"}}},"commit":{"parents":[{"commit":"e63f0b3d68770d4792e1606ff8fe924b3f25b7f9","subject":"Merge \"tests: Make self.ts reliably a method (if present)\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e63f0b3d68770d4792e1606ff8fe924b3f25b7f9"}]}],"author":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-13 21:35:06.000000000","tz":-420},"committer":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-16 23:59:01.000000000","tz":-420},"subject":"common/utils: fix LRUCache ghost-link corruption on expiry refresh","message":"common/utils: fix LRUCache ghost-link corruption on expiry refresh\n\nWhen a cached entry timed out and was refreshed, the stale doubly-linked-\nlist node was left in the list (the except KeyError branch only did pass).\nA subsequent eviction would walk that ghost node, call del mapping[key]\nwhich deleted the *fresh* entry for the same key, and leave the fresh node\nas an orphan.  The next time that key was re-cached, a second eviction of\nthe orphan attempted del mapping[key] again and raised KeyError.\n\nFix: on timeout, splice the ghost link out of the list and remove it from\nthe mapping before calling set_cache.  The del is necessary so that the\nsize count is accurate; without it set_cache sees the cache at capacity,\nspuriously evicts a live entry, and still leaves the ghost in the list.\n\nAdd a regression test that exercises both failure modes:\n- the spurious eviction of a live entry (caught by a size assertion)\n- the eventual KeyError crash (caught by try/except)\n\nChange-Id: I6b35a1a2c7e6df683fe1cd3d75d1fa573e01820e\nCloses-Bug: #2144614\nSigned-off-by: John Dickinson \u003cme@not.mn\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/18a4559d98c29be12f01cfa73f86cd1ab8f9a6a4"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/18a4559d98c29be12f01cfa73f86cd1ab8f9a6a4"}]},"branch":"refs/heads/master"},"829439ed9f792111aafc1b8920ea71a796e0afcd":{"kind":"NO_CODE_CHANGE","_number":5,"created":"2026-03-25 16:41:05.000000000","uploader":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"ref":"refs/changes/35/980535/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/35/980535/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/35/980535/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/35/980535/5"}}},"commit":{"parents":[{"commit":"e63f0b3d68770d4792e1606ff8fe924b3f25b7f9","subject":"Merge \"tests: Make self.ts reliably a method (if present)\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/e63f0b3d68770d4792e1606ff8fe924b3f25b7f9"}]}],"author":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-13 21:35:06.000000000","tz":-420},"committer":{"name":"John Dickinson","email":"me@not.mn","date":"2026-03-25 16:41:05.000000000","tz":0},"subject":"common/utils: fix LRUCache ghost-link corruption on expiry refresh","message":"common/utils: fix LRUCache ghost-link corruption on expiry refresh\n\nWhen a cached entry timed out and was refreshed, the stale doubly-linked-\nlist node was left in the list (the except KeyError branch only did pass).\nA subsequent eviction would walk that ghost node, call del mapping[key]\nwhich deleted the *fresh* entry for the same key, and leave the fresh node\nas an orphan.  The next time that key was re-cached, a second eviction of\nthe orphan attempted del mapping[key] again and raised KeyError.\n\nFix: on timeout, splice the ghost link out of the list and remove it from\nthe mapping before calling set_cache.  The del is necessary so that the\nsize count is accurate; without it set_cache sees the cache at capacity,\nspuriously evicts a live entry, and still leaves the ghost in the list.\n\nAdd a regression test that exercises both failure modes:\n- the spurious eviction of a live entry (caught by a size assertion)\n- the eventual KeyError crash (caught by try/except)\n\nAssisted-by: Claude:claude-4.6-sonnet\nChange-Id: I6b35a1a2c7e6df683fe1cd3d75d1fa573e01820e\nCloses-Bug: #2144614\nSigned-off-by: John Dickinson \u003cme@not.mn\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/829439ed9f792111aafc1b8920ea71a796e0afcd"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/829439ed9f792111aafc1b8920ea71a796e0afcd"}]},"branch":"refs/heads/master","description":"Edit commit message"}},"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":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}},{"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":{}}}]}
