)]}'
{"id":"openstack%2Fswift~810928","triplet_id":"openstack%2Fswift~master~I04686788f01ced6992848caec4a42f5d1461b296","project":"openstack/swift","branch":"master","topic":"p-spi-replication","attention_set":{},"removed_from_attention_set":{"7847":{"account":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"last_update":"2021-11-12 18:50:10.000000000","reason":"Alistair Coles replied on the change"}},"hashtags":[],"change_id":"I04686788f01ced6992848caec4a42f5d1461b296","subject":"Fix status_changed_at replication","status":"NEW","created":"2021-09-24 14:39:20.000000000","updated":"2021-11-12 20:59:46.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":false,"submittable":false,"total_comment_count":11,"unresolved_comment_count":4,"has_review_started":true,"meta_rev_id":"6f3f3c41ca1df1243a44fb0482e68399b819e882","_number":810928,"virtual_id_number":810928,"owner":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"tag":"autogenerated:zuul:check","value":1,"date":"2021-11-12 19:51:09.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"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":{"disliked":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"all":[{"value":-1,"date":"2021-09-24 14:44:25.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"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":"","value":-1,"default_value":0,"optional":true},"Workflow":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"CC":[{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2021-09-24 15:51:03.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":"2021-09-24 18:42:40.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":"2021-09-24 18:43:19.000000000","updated_by":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"reviewer":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"state":"CC"},{"updated":"2021-09-27 01:02:19.000000000","updated_by":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"reviewer":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"state":"CC"}],"messages":[{"id":"b86abaf1c1b060e96ac2634783dddc00292e0ae3","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2021-09-24 14:39:20.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"43376b6aaeecdc03a9f3c6759bc29ca5696006d0","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2021-09-24 14:44:13.000000000","message":"Patch Set 1: Code-Review-2\n\n(3 comments)\n\nStill needs some unit test cover to be added.","accounts_in_message":[],"_revision_number":1},{"id":"2f445dcc12d6e4db3e135db9d24cbafae64fb889","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2021-09-24 14:44:25.000000000","message":"Patch Set 1: Code-Review-1","accounts_in_message":[],"_revision_number":1},{"id":"60f226bc9bc6d5371c75f6c8ba0ea328b7fe2f8f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-24 15:51:03.000000000","message":"Patch Set 1: 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\n\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a45518f9c36347028b25297faef26ccd : SUCCESS in 12m 34s\n- grenade https://zuul.opendev.org/t/openstack/build/15efa50eb00c4e3ba8a2466664e07b76 : SUCCESS in 1h 04m 36s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/02b229dbe3834cf29e5b3bf9eddbb207 : RETRY_LIMIT in 16m 16s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/f729f3262cac48d6a50547b5cfbc1b05 : SUCCESS in 10m 07s (non-voting)\n- swift-build-image-py3 https://zuul.opendev.org/t/openstack/build/4b70eb7c110244849a0fd04be9dce11a : SUCCESS in 10m 15s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/8193e5f4ea73461280105e8d03a940c9 : SUCCESS in 31m 03s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/9fbbd1a98fda419aab5cae8de393b7ae : SUCCESS in 37m 17s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/b165ae0c389a4f849c40f18b5225e4ac : SUCCESS in 17m 13s\n- swift-tox-py38 https://zuul.opendev.org/t/openstack/build/9979ac5232d643b29c4dfd4e95369954 : SUCCESS in 18m 19s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/eeefd71af2e140bca210251a30b1be77 : SUCCESS in 19m 25s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/bcd07b8e65fe42bc99dcca39130ee669 : SUCCESS in 21m 01s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/2a2e156e0e8a4dacbbbfb0c4f52b34c7 : SUCCESS in 27m 11s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/de6a7211bf3a4b08ade0b5e3e2905d16 : SUCCESS in 33m 28s\n- swift-tox-func-py38 https://zuul.opendev.org/t/openstack/build/fb83ef29447b41cbb4734440e4c152a6 : SUCCESS in 20m 27s\n- swift-tox-func-encryption-py38 https://zuul.opendev.org/t/openstack/build/634102748fa1492ea78b6ae24dc8200d : SUCCESS in 23m 29s\n- swift-tox-func-ec-py38 https://zuul.opendev.org/t/openstack/build/8b31115614de40d196cf2098ceaf20f0 : SUCCESS in 25m 36s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/8c5c3e651baf406cb0cf5de3500bcf98 : SUCCESS in 8m 35s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/2f7a7ac2932f4de988021be7cf61d849 : SUCCESS in 27m 14s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/1d5eaf5d839347599b1ff5eade315580 : SUCCESS in 52m 12s\n- swift-probetests-centos-8 https://zuul.opendev.org/t/openstack/build/04f2a1378db0412eb4409470ad81c199 : SUCCESS in 55m 28s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/0118ee46dcb0498bb22c571d8e47be0b : RETRY_LIMIT in 12m 48s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/b4459fea6b004d83a549c13715cc83b5 : RETRY_LIMIT in 13m 58s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/6475c638a5cf47d7943a4c24eba472c9 : SUCCESS in 19m 22s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/cfeeb9dba03c4464b2a42ba5fce3565d : SUCCESS in 8m 01s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/d654977a1bd2426699dae9d0daa219b9 : SUCCESS in 25m 51s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/10a8eb9f38a84376bb7a99826321439c : RETRY_LIMIT in 13m 53s","accounts_in_message":[],"_revision_number":1},{"id":"6b8953ad39ef3cb86d40d97c72f560169d57f064","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-24 16:46:38.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\n\n- swift-tox-py38-arm64 https://zuul.opendev.org/t/openstack/build/f8b310a00db2437b87237c7255a23b96 : SUCCESS in 34m 27s (non-voting)\n- swift-tox-py39-arm64 https://zuul.opendev.org/t/openstack/build/4e6cd04fcc2141cba54818a31c366235 : SUCCESS in 30m 25s (non-voting)\n- swift-probetests-centos-8-arm64 https://zuul.opendev.org/t/openstack/build/b5f8eef646ef4d3c928f91f51829f8b8 : TIMED_OUT in 2h 01m 57s (non-voting)\n- swift-tox-func-encryption-py38-arm64 https://zuul.opendev.org/t/openstack/build/1bb15a46f7e3406cabf6c7bd0f9645f8 : SUCCESS in 58m 40s (non-voting)\n- swift-tox-func-py38-arm64 https://zuul.opendev.org/t/openstack/build/1dfa0b2a9ab743f1ba54459e397844db : SUCCESS in 44m 32s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"12e560f4f8a216cf1e0a89a984e919e4f7b8f498","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2021-09-24 18:42:40.000000000","message":"Patch Set 1:\n\n(2 comments)","accounts_in_message":[],"_revision_number":1},{"id":"bcbb5224c3f728a2717f76b12f4f43587467f4a2","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2021-09-24 18:43:19.000000000","message":"Patch Set 1:\n\n(2 comments)","accounts_in_message":[],"_revision_number":1},{"id":"2dc3176230eb9ac1acafa1d4d0837a7526542b03","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2021-09-24 20:50:33.000000000","message":"Patch Set 1:\n\nI think this goes deeper than just containers and shards. I got myself into a situation on master (plus some delta, but not interesting for this discussion) where 2/3 account replicas think they\u0027re deleted, but they can\u0027t for the life of \u0027em convince the third one. As a result, I can HEAD or GET the account, but trying to PUT a container will 404. Only, if I list it, it *did* get created! Repro looks like this, all API calls going through the proxy:\n\n* Explicitly PUT an account, to ensure we\u0027ve got a DB on disk. DELETE it.\n* rm one replica -- imagine a disk failure, or rebalancing for an expansion.\n* PUT the account again. It\u0027ll 403 (good).\n* GET or HEAD the account -- it\u0027ll succeed! One replica made it!\n* PUT a container -- 404? GET the container -- 200!?\n* PUT an object -- 201.\n\nRunning replicators/updaters at any stage *besides* between the rm and the PUT, it seems to still have the same result.\n\nEven if I run the reaper, nothing really settles -- one replica still thinks it\u0027s alive, and the other two keep trying to delete data that\u0027s been written since the re-creation :-/\n\nGets worse if we had two replicas that could respond 201 on the PUT. Suddenly we have a quorum of 201 at step 3... everything from that point on looks like success from the client\u0027s perspective -- there\u0027s no indication *anywhere* that the account should not be used. Yet the reaper will continually be trying to delete 1/3 of all containers out from under you.","accounts_in_message":[],"_revision_number":1},{"id":"3441fca6676c383086c08cf8c30412ded02b65c4","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2021-09-24 21:57:08.000000000","message":"Patch Set 1:\n\nAlso, https://github.com/openstack/swift/blob/2.28.0/swift/common/db.py#L1148-L1164 surely needs some updating...\n\nMakes me wonder if the status/status_changed_at fields were intended to only ever be a local value 🤔","accounts_in_message":[],"_revision_number":1},{"id":"4a7fd350654c9c0b04436657858843751a83f48f","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2021-09-27 01:02:19.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"6ecd4b5e1e3e28ee7f1fd6f5cc9c47d34a2bed3e","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2021-09-27 09:26:23.000000000","message":"Patch Set 1:\n\n(1 comment)\n\nTim raises a good question i.e. was status_changed_at ever intended to be a globally consistent state or just a local state?\n\nThe crux of the \u0027bug\u0027 addressed in this patch is that, on master, replication treats status_changed_at as a local i.e. sets it to \"now\" whenever delete status or SPI changes, but incorrect_policy_index uses status_changed_at as if it were globally authoritative, and worse, in an oldest-wins sense.\n\nIf status_changed_at is not meant to be globally consistent then incorrect_policy_index is flawed: status_changed_at cannot be used to consistently determine the oldest policy index, as demonstrated by the probe test herein. Also, this patch is inappropriate.\n\nIf status_changed_at is meant to be globally consistent then replication is flawed, and this patch is heading the right way, but I have now noticed that merge_timestamps also looks very suspect. However, as Matt points out, if status_changed_at is global then should it ever be anything other than the most recent of put_timestamp or delete_timestamp?","accounts_in_message":[],"_revision_number":1},{"id":"0e86025c223c5aa9e1c1007bc0e9281e202992ec","author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"date":"2021-10-18 22:53:27.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"7a0932eb4fd84f2a5ce19e49016b443f1509c28a","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2021-11-12 18:50:10.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"eb8389ae1a27cac49c67cd7baf47db1d1d92b683","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-11-12 19:51:09.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/b324017fcc1d469e970d613724d07885 : SUCCESS in 9m 43s\n- grenade https://zuul.opendev.org/t/openstack/build/555dbbc34ad941db8fe5174220ffa4bb : SUCCESS in 55m 18s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/2512b30d73c44d3fb69d757782f0f989 : SUCCESS in 47m 53s\n- swift-build-image https://zuul.opendev.org/t/openstack/build/fab0e8af5e6d4187aa95120325e5b45e : SUCCESS in 10m 16s (non-voting)\n- swift-build-image-py3 https://zuul.opendev.org/t/openstack/build/35a6e65a5c324e0ca2af5c2323991af5 : SUCCESS in 8m 14s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/339ec9c25e3448a3ae79a8aed363bcb5 : SUCCESS in 20m 39s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/cdf1e78f500648b2a63b326d78f2c2c9 : SUCCESS in 16m 07s\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/34cef522758f4fecadfe3eef087c427c : SUCCESS in 18m 06s\n- swift-tox-py38 https://zuul.opendev.org/t/openstack/build/9e4dcc82728d433c97f05cee71f48386 : SUCCESS in 17m 57s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/2eceb860ed26440182c2b5e090fded13 : SUCCESS in 28m 47s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/15fc92b3306b47c2a0583ec41974ea48 : SUCCESS in 18m 49s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/e44b833d07a54d699d198e7a818b3d98 : SUCCESS in 21m 12s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/ba73cc89da83406d898f427c3c0701e0 : SUCCESS in 18m 10s\n- swift-tox-func-py38 https://zuul.opendev.org/t/openstack/build/d4f0e9ce27f14fb68b1e59b3fc870d5d : SUCCESS in 18m 23s\n- swift-tox-func-encryption-py38 https://zuul.opendev.org/t/openstack/build/2d2303f700c04d6c871147333563be94 : SUCCESS in 20m 18s\n- swift-tox-func-ec-py38 https://zuul.opendev.org/t/openstack/build/eee8125e23234ceea900b39522d3e687 : SUCCESS in 32m 51s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/e00a4c5691a94f779e8dc848b849883d : SUCCESS in 7m 09s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/f4868536ff4148f1986e53a0c607f9b4 : SUCCESS in 24m 38s (non-voting)\n- swift-probetests-centos-7 https://zuul.opendev.org/t/openstack/build/0d5045ef07df427cacf5105a35e15562 : SUCCESS in 45m 57s\n- swift-probetests-centos-8 https://zuul.opendev.org/t/openstack/build/97dd2a8d06734c7da323ba591abec1a7 : SUCCESS in 57m 55s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/e1f8ccb1e67a43e4a1be0405e3962fb6 : SUCCESS in 41m 22s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/5c0aa3ddf508498387fdef8dab78f614 : SUCCESS in 36m 30s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/59b7b8fdf4ef494faef9ee317c786c02 : SUCCESS in 16m 53s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/892d03dc62d94b4cb8a4583a8a8cd736 : SUCCESS in 8m 07s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/9b68d444b56240cf85ceb8f971d18dc9 : SUCCESS in 35m 30s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/e6615f31ccd64a55a6382a25f3676230 : SUCCESS in 50m 20s","accounts_in_message":[],"_revision_number":1},{"id":"6f3f3c41ca1df1243a44fb0482e68399b819e882","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-11-12 20:59:46.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\n\n- swift-tox-py38-arm64 https://zuul.opendev.org/t/openstack/build/671014efa71941bc861251111b9b560d : SUCCESS in 32m 47s (non-voting)\n- swift-tox-py39-arm64 https://zuul.opendev.org/t/openstack/build/25d9d3b8bb67482d925eced5bf97b1fc : SUCCESS in 38m 46s (non-voting)\n- swift-probetests-centos-8-arm64 https://zuul.opendev.org/t/openstack/build/5906e632ce3f4182bb35888b01a97310 : FAILURE in 2h 06m 49s (non-voting)\n- swift-tox-func-encryption-py38-arm64 https://zuul.opendev.org/t/openstack/build/ba03387ae3f8490dac2cba1e9f06d6b1 : SUCCESS in 33m 27s (non-voting)\n- swift-tox-func-py38-arm64 https://zuul.opendev.org/t/openstack/build/aff98406dff543d4adab145675d622e1 : SUCCESS in 37m 37s (non-voting)","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"7046989b5cde53049b4030dc73d9b92b0599a059","revisions":{"7046989b5cde53049b4030dc73d9b92b0599a059":{"kind":"REWORK","_number":1,"created":"2021-09-24 14:39:20.000000000","uploader":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"ref":"refs/changes/28/810928/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/28/810928/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/28/810928/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/28/810928/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/28/810928/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/28/810928/1"}}},"commit":{"parents":[{"commit":"029e57679c639edda87816482685b8f48de67dd9","subject":"Merge \"Clean up extra spaces\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/029e57679c639edda87816482685b8f48de67dd9"}]}],"author":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2021-09-24 14:10:23.000000000","tz":60},"committer":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2021-09-24 14:39:03.000000000","tz":60},"subject":"Fix status_changed_at replication","message":"Fix status_changed_at replication\n\nWhen the container replicator detects that the local DB has the\nincorrect storage policy index it currently sets the correct storage\npolicy index and sets status_changed_at to a new value equal to the\ncurrent time. This is wrong on two counts: first, we shouldn\u0027t ever\nrecreate state with a timestamp other than that at which it was\ncreated; second, in the case of storage policy index, a newer\nstatus_changed_at time does not necessarily make the associated state\nvalue authoritative in the system, because unlike most state in Swift,\nan *older* storage policy index may be considered authoritative.\n\nWhen the local storage policy index is deemed incorrect, the\nreplicator should change the storage policy index *and* the\nstatus_changed_at values to match the remote info. However, the\nset_storage_policy_index() method would previously disallow\nstatus_changed_at being set to a value older than its current value,\npreventing the replicator from doing the right thing.\n\nThis patch changes set_storage_policy_index() to allow the\nstatus_changed_at to go backwards, and changes the container\nreplicator to set the status_changed_at to match the remote info.\n\nChange-Id: I04686788f01ced6992848caec4a42f5d1461b296\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/7046989b5cde53049b4030dc73d9b92b0599a059"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/7046989b5cde53049b4030dc73d9b92b0599a059"}]},"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","applied_by":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"}},{"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":""}}}]}
