)]}'
{"id":"openstack%2Fswift~989485","triplet_id":"openstack%2Fswift~master~Iaf064e8b5b0b6edf8742beae4976fad5706317cc","project":"openstack/swift","branch":"master","topic":"p-timestamp-v2-fixes","hashtags":[],"change_id":"Iaf064e8b5b0b6edf8742beae4976fad5706317cc","subject":"container-sync: preserve jittered object timestamps","status":"NEW","created":"2026-05-21 07:12:44.000000000","updated":"2026-07-23 05:35:47.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"9f80d5836fc250bf10717a27ef76ffd33c746537","_number":989485,"virtual_id_number":989485,"owner":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"tag":"autogenerated:zuul:check","value":1,"date":"2026-07-23 05:35:47.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":{"all":[{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"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":"","default_value":0,"optional":true},"Workflow":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"_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":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-05-21 08:31:09.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"}],"messages":[{"id":"8b9b0cc10c200ff8b67abfaabe7e9ed25f17affc","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-05-21 07:12:44.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"3bed8e31439589f261f7293ee6fd0b289d7b6fd1","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-05-21 07:19:36.000000000","message":"Patch Set 1: Workflow-1","accounts_in_message":[],"_revision_number":1},{"id":"07e48e9f3ab9e9a9d1a903434916b927ee768413","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-05-21 08:31:09.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/8b75b8da607542a8863ac1bbbb1748a7\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/5390081b663c4b0090eeac21e2fe1708 : SUCCESS in 10m 53s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/128c84bc35404bdaba56ad024c128933 : SUCCESS in 7m 58s\n- grenade https://zuul.opendev.org/t/openstack/build/20c35696c89541b9bd48e845bb7ce2f2 : SUCCESS in 1h 06m 30s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/c39ed81f9b524c2897ada6f93427eae3 : SUCCESS in 1h 02m 49s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/00ed28d896794c6691abed74743536e5 : SUCCESS in 56m 50s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/0e29f0df2e2c4ed19cf6a761c6857452 : SUCCESS in 1h 11m 46s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/f51a0f304da64a5496c1e74698c1bdd5 : SUCCESS in 19m 00s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/01d337be036643c9ab6b5b71e53222f2 : SUCCESS in 19m 45s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/bdc3aa02038145e998befe54e9ca3c4d : SUCCESS in 10m 44s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/4ba8a1dd351440d8a7dcf2cf7a275949 : SUCCESS in 7m 10s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/6344b8606b214db7914debbc9915d3af : SUCCESS in 18m 55s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/43963eccdddd49cd9516213196703cba : SUCCESS in 16m 06s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/51d36c12ed994355a710cc04b48d90f6 : SUCCESS in 21m 12s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/2127544423a544c38cf885a4fd0a5203 : SUCCESS in 21m 56s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/da62a20df05d42eb8870acd33c12bdfa : SUCCESS in 12m 57s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/64042ae23a4a4a1895a96872f0a19633 : SUCCESS in 14m 30s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/cd8a399b30144235b8cd7aaa35a9f10a : SUCCESS in 15m 10s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/f62dc2511e0a4ff88ed0fed1cea17474 : SUCCESS in 6m 10s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/9590c56c7fed4de4a2a468108817596b : SUCCESS in 15m 21s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/3141f81461004beab0309ea7ee76b723 : SUCCESS in 5m 58s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/d2bab49b3408428cbe9d34eb304b4337 : SUCCESS in 35m 54s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/858932625cff485badd3fefbb0cef2c2 : SUCCESS in 22m 25s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/33ae01f7d52847f0a669e9edbf8d75a2 : SUCCESS in 50m 01s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/311cd8af66254f5b8ef2890e9a9a9adf : SUCCESS in 11m 03s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/528fbe7e48804e6680a32eec79da1f3a : SUCCESS in 2m 35s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/f0c0682855ec4268829a7f961500a510 : SUCCESS in 17m 38s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/e36152e908c043e290fe3a404dbf05ab : SUCCESS in 51m 17s","accounts_in_message":[],"_revision_number":1},{"id":"42992ecc4cac4d1568bbff08611e3286a98ad47f","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-05-21 09:28:15.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/1b8fbdd410c6451d92de768584cce715\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/479af784768048b5938860e8e06485b6 : SUCCESS in 53m 38s","accounts_in_message":[],"_revision_number":1},{"id":"84cc693c6feacc1c8ba1446c8e83444302507fe2","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-07-23 04:24:48.000000000","message":"Patch Set 1: -Workflow","accounts_in_message":[],"_revision_number":1},{"id":"5b000f77600d181caaf4aae0137390d04daa1efd","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"date":"2026-07-23 04:29:40.000000000","message":"Patch Set 2: Patch Set 1 was rebased\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"35f4cddcb02a9724b8f6501829cf9d0c1dc5f551","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-23 05:20:53.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/6d4946fd03c44a8b8048d7672b8bbc68\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/765dc51943f842e6a741662380dfe9dc : SUCCESS in 49m 15s","accounts_in_message":[],"_revision_number":2},{"id":"9f80d5836fc250bf10717a27ef76ffd33c746537","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-07-23 05:35:47.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/8dfd99f813c14586b657466547fbd26c\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/4ebccf57832b4dcea89ac33f78a5cd47 : SUCCESS in 5m 12s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/063b827a6cb54298ae6bd2512946fe31 : SUCCESS in 5m 19s\n- grenade https://zuul.opendev.org/t/openstack/build/9e7e9f95e4374becbac86fcc5871bdaa : SUCCESS in 1h 00m 13s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/7eb1782ea8004bf292ab2c68565a96d3 : SUCCESS in 32m 36s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/f5101a45ede64345a2cdf1a0c24449e9 : SUCCESS in 51m 23s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/2d47085b5b5b400aa10e1a6c8cae1234 : SUCCESS in 58m 26s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/d21b1957fd384a67837685918fcb3328 : SUCCESS in 10m 32s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/05821507a99d4902a45c84389d72d1af : SUCCESS in 10m 46s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/6965ebd8120240d880112913eda240d9 : SUCCESS in 12m 39s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/957ddb4058de4f85b18e7a46a2b9fcd4 : SUCCESS in 4m 23s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/3d425a90726742b8838c1c566622542b : SUCCESS in 10m 53s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/2180c1a326604209b20c36140c8429fc : SUCCESS in 11m 27s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/52a233918c134c6299a0b535cd17f6d8 : SUCCESS in 13m 37s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/dde6b3fae6d644858469078cd7fc9bf9 : SUCCESS in 11m 02s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/e9d22349f03843d681d9401a77896f1e : SUCCESS in 9m 03s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/9853f57846bf4d75a1df08ae7e7425da : SUCCESS in 8m 26s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/63f8113d53f44edb9bb802484f895fb7 : SUCCESS in 9m 23s\n- swift-tox-func-py39-centos-9-stream https://zuul.opendev.org/t/openstack/build/ff772aee2fa9476a9838d2297209d644 : SUCCESS in 15m 24s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/3f62c9db087b496d8a5f55033ad13af4 : SUCCESS in 6m 15s\n- swift-tox-func-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/25b2cf300511489d908504d8ec0ec699 : FAILURE in 8m 56s (non-voting)\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/d9940133331a41c8a1d3f4188e1651b7 : SUCCESS in 8m 58s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/331dde0b1c904b909ea9f1727f108887 : SUCCESS in 39m 20s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/66c3feefc761491a92942151bde9ef55 : SUCCESS in 25m 44s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/773b98a1f08b432b92cd89b625385288 : SUCCESS in 22m 52s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/250a927b087d4e5489d3f395c6318f82 : SUCCESS in 30m 42s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/a13964de656442fb97515632b5f67108 : SUCCESS in 4m 01s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/44d2e6a1b75942e68064d544415eced5 : SUCCESS in 17m 30s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/a3d442ff2e9d43de854036302df79efb : SUCCESS in 1h 00m 26s\n\nWarning:\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-encryption-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/zuul/zuul-jobs/playbooks/unittests/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/cleanup.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.\n  File .ssh/known_hosts.old found in build home directory during playbook opendev.org/opendev/base-jobs/playbooks/base/post-logs.yaml for job swift-tox-func-ec-py39-centos-9-stream-fips.  Add to preserve-home-paths if safe, or otherwise remove.","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"d9d1146d3867275ceba0da54c83abe8edf468c7a","revisions":{"2250adaf71ad74f58579c8063416c382c0e2444a":{"kind":"REWORK","_number":1,"created":"2026-05-21 07:12:44.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/85/989485/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/85/989485/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/85/989485/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/85/989485/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/85/989485/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/85/989485/1"}}},"commit":{"parents":[{"commit":"cd94a8f42ddb17d227d58d841340460f93e7143e","subject":"Introduce a jitter component to Timestamp","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/cd94a8f42ddb17d227d58d841340460f93e7143e"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2026-05-21 06:45:48.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2026-05-21 07:11:49.000000000","tz":600},"subject":"container-sync: preserve jittered object timestamps","message":"container-sync: preserve jittered object timestamps\n\nObject PUT timestamps may now include jitter in the internal Timestamp\nhex part. Turns out DELETEs where doing that anyway. Container-sync was\ncomparing remote and local timestamps by their normal form because\npublic object responses only expose normal timestamps. That avoids parse\nfailures, but it can incorrectly skip an update when two source object\nversions share the same deca-microsecond normal timestamp and differ\nonly by jitter.\n\nPrefer backend/internal timestamps when available, keep same-normal\njittered timestamps ambiguous when checking the remote object, and send\nthe selected internal timestamp on remote PUTs. If the remote PUT returns\n409 Conflict, treat it as successful convergence because the destination\nhas an equal-or-newer timestamp.\n\nAdd tests for same-normal jitter handling, internal timestamp forwarding,\nand PUT conflict handling.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Iaf064e8b5b0b6edf8742beae4976fad5706317cc\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2250adaf71ad74f58579c8063416c382c0e2444a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/2250adaf71ad74f58579c8063416c382c0e2444a"}]},"branch":"refs/heads/master"},"d9d1146d3867275ceba0da54c83abe8edf468c7a":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2026-07-23 04:29:40.000000000","uploader":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"ref":"refs/changes/85/989485/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/85/989485/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/85/989485/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/85/989485/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/85/989485/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/85/989485/2"}}},"commit":{"parents":[{"commit":"91120e58800875c79ff8493cd5acc6ab0bae04de","subject":"Introduce a jitter component to Timestamp","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/91120e58800875c79ff8493cd5acc6ab0bae04de"}]}],"author":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2026-05-21 06:45:48.000000000","tz":600},"committer":{"name":"Matthew Oliver","email":"matt@oliver.net.au","date":"2026-07-23 04:29:40.000000000","tz":0},"subject":"container-sync: preserve jittered object timestamps","message":"container-sync: preserve jittered object timestamps\n\nObject PUT timestamps may now include jitter in the internal Timestamp\nhex part. Turns out DELETEs where doing that anyway. Container-sync was\ncomparing remote and local timestamps by their normal form because\npublic object responses only expose normal timestamps. That avoids parse\nfailures, but it can incorrectly skip an update when two source object\nversions share the same deca-microsecond normal timestamp and differ\nonly by jitter.\n\nPrefer backend/internal timestamps when available, keep same-normal\njittered timestamps ambiguous when checking the remote object, and send\nthe selected internal timestamp on remote PUTs. If the remote PUT returns\n409 Conflict, treat it as successful convergence because the destination\nhas an equal-or-newer timestamp.\n\nAdd tests for same-normal jitter handling, internal timestamp forwarding,\nand PUT conflict handling.\n\nSigned-off-by: Matthew Oliver \u003cmatt@oliver.net.au\u003e\nChange-Id: Iaf064e8b5b0b6edf8742beae4976fad5706317cc\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/d9d1146d3867275ceba0da54c83abe8edf468c7a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/d9d1146d3867275ceba0da54c83abe8edf468c7a"}]},"branch":"refs/heads/master","description":"Rebase","conflicts":{"base":"cd94a8f42ddb17d227d58d841340460f93e7143e","ours":"2250adaf71ad74f58579c8063416c382c0e2444a","theirs":"91120e58800875c79ff8493cd5acc6ab0bae04de","merge_strategy":"recursive","contains_conflicts":false}}},"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":""}}}]}
