)]}'
{"id":"openstack%2Fswift~936379","triplet_id":"openstack%2Fswift~feature%2Fmpu~I15a59a35d857791140b2475cb70a6514e0f95e28","project":"openstack/swift","branch":"feature/mpu","topic":"p-mpu-timestamp-offsets","attention_set":{"7847":{"account":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"last_update":"2024-11-27 16:47:27.000000000","reason":"A robot voted negatively on a label"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"I15a59a35d857791140b2475cb70a6514e0f95e28","subject":"WIP object_versioning: only create one version of each .data file","status":"NEW","created":"2024-11-27 15:48:47.000000000","updated":"2024-11-29 21:47:17.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":false,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"178d8edba43ece36412b1877f9d29f8243c15f53","_number":936379,"virtual_id_number":936379,"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":[{"tag":"autogenerated:zuul:check","value":1,"date":"2024-11-29 18:01:01.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":-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":[{"_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":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2024-11-27 16:47:27.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":"f77e32e6571352197cb52d8537ff49de14234458","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2024-11-27 15:48:47.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"8c6c765f53405acb14d8b74ff1d8cbe6b9b9a26c","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2024-11-27 16:47:27.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\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/7bea18da764340edb442776969a4d63f\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/67a49d00c86b408fa0918755432ae9d4 : SUCCESS in 9m 20s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/d3020333dfbf423285b26e6d5bfb7b26 : SUCCESS in 18m 25s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/24783585e23c460b8ab0d525788f63ce : SUCCESS in 19m 18s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/c0a699d263f9478f9f5c4937f88707c7 : SUCCESS in 17m 28s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/fea12b76f25b4daba6def58029d0bd3d : SUCCESS in 5m 49s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/f0bdf203c9564423a9ebb3fcb0add272 : SUCCESS in 19m 03s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/3e96d543bbbf4eef856a184b32e9e3ee : SUCCESS in 17m 32s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/b386a44dfc6449abaa5772d61540dfb2 : SUCCESS in 20m 34s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/ffc04d6136cb437ab5a7d38ab289ef2f : SUCCESS in 26m 48s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/e6af28d890a94265a6cf4b2e37f341b5 : FAILURE in 18m 21s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/845bf9d0b6b64b599ac3472398aab59d : FAILURE in 16m 21s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/baa6a81c2bb148128db8f206f094b13e : SUCCESS in 17m 09s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/1e77e833aa0840fc8fa189a7e6692147 : SUCCESS in 13m 43s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/64328e5a810a44028dee35b8455b4896 : SUCCESS in 14m 28s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/e9d50ae9864141358dcdcbf028b4e863 : SUCCESS in 15m 20s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/d6c4eabeaa8c4bf9be9c92c93aad56f6 : SUCCESS in 6m 16s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/a557e5fb5e864603937855021297e715 : SUCCESS in 16m 25s (non-voting)\n- swift-tox-func-s3api-tests-tempauth https://zuul.opendev.org/t/openstack/build/68d49368fc214ebab1a5ca6f461080e4 : SUCCESS in 7m 24s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/c948b7241faa4f009f2ac19777b8bffa : SUCCESS in 52m 56s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/7f8f9e2d5bab47fc906b6cf4213d98f2 : SUCCESS in 16m 26s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/43ffafcc68c14cda82e6c29da2783e40 : SUCCESS in 4m 24s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/7308800773e64fa78a51f6b02dbedaf3 : SUCCESS in 18m 08s","accounts_in_message":[],"_revision_number":1},{"id":"fdd748aa5f4ca79ec3e2b3be72eff3fb502b9bb8","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2024-11-27 19:23:44.000000000","message":"Patch Set 1:\n\nBuild failed (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/916196aa29cc41669255737de9911f54\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/e7e97c92b90b4a37b3c016b482bbb087 : TIMED_OUT in 3h 01m 05s","accounts_in_message":[],"_revision_number":1},{"id":"e064c2e1dc6f097fdf5bef32603b3cd23178b8da","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2024-11-28 18:23:02.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified-1\n","accounts_in_message":[],"_revision_number":2},{"id":"6eb12b40aff3b792f5007bfc2d941a450738c671","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2024-11-28 19:18:12.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/702713ef075e4efabb8c5ebd436403a4\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2b3cab8129c441fc94340f7f72701952 : SUCCESS in 9m 10s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/fc961f79fc6c4beb9a84fab318d1b2fa : SUCCESS in 20m 47s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/834f5d68cebd42e0afe5c6164c49bec7 : SUCCESS in 20m 59s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/222292dbeb8848e1833c5784863559d7 : SUCCESS in 20m 22s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/da32be741c174e638f4236d76ce9e450 : SUCCESS in 6m 52s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/822908127d7e4f5fb04ae3dec690c2d4 : SUCCESS in 18m 33s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/9e32ccbd308448adbed4fa151049a88f : SUCCESS in 16m 52s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/7e615e4097d249f1ac59b5fb2f5ebb90 : SUCCESS in 13m 26s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/6722a3ee57c94db48d89a72c2e1474a3 : SUCCESS in 31m 42s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/8245142bb36a4e8ab50a568ea928fc9b : SUCCESS in 17m 04s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/5c40bc5409164f8a86c587d37af30900 : SUCCESS in 10m 30s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/84ced048b9914b0d8f12726967c5cf6a : SUCCESS in 19m 15s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/fb982c66f47a41cf8f1c4046890a8c4e : SUCCESS in 19m 54s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/718b4001e4674a82a689ff053f0854ab : SUCCESS in 19m 31s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/6b1f1f62df2a4b03bc0e7f11bed114f8 : SUCCESS in 21m 02s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/fe0e483a6b124a37b8801a1b3ad9b1f5 : SUCCESS in 5m 37s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/af02434d9d6947f7a1fc67be9afd6487 : SUCCESS in 19m 17s (non-voting)\n- swift-tox-func-s3api-tests-tempauth https://zuul.opendev.org/t/openstack/build/ea6092eb94364c249b1002c46ce704df : SUCCESS in 10m 45s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/fb07dbdeece74bf0a6d2a114cf8ce7ca : FAILURE in 47m 41s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/c552f70550a64d04a4de01389b4c8f50 : SUCCESS in 22m 28s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/70b5f7be19784bb995aabe862e855b82 : SUCCESS in 4m 26s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/30284a5893994ac1a3755dec4eeee3b0 : SUCCESS in 22m 08s","accounts_in_message":[],"_revision_number":2},{"id":"0014020e6bf9fc91955984c0bf947134ff037f98","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2024-11-28 22:06:19.000000000","message":"Patch Set 2:\n\nBuild failed (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/8679d166ace74009a9dd334dd27d0b9d\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/62c6a76b29664f6a86ef6399d1ac1232 : FAILURE in 2h 02m 30s","accounts_in_message":[],"_revision_number":2},{"id":"c36c4ba6a73ce4057f77f0ef6cac771eedd42c7e","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"date":"2024-11-29 16:59:56.000000000","message":"Uploaded patch set 3: Patch Set 2 was rebased.\n\nOutdated Votes:\n* Verified-1\n","accounts_in_message":[],"_revision_number":3},{"id":"15644a29ad056a538bfc2afb1f3a66b7717c3fe1","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2024-11-29 18:01:01.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/0e92bb0528fe4424a3768f481e99acc1\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/977e9a5441f049d3b41966e4e9d20aa9 : SUCCESS in 11m 02s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/f0ea6748128643d2a01af1015fa6f15c : SUCCESS in 12m 28s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/2aaeaae781a3471b8b373091fa54cdbd : SUCCESS in 19m 34s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/d1373f49384742b9aea13fe2fb635ce9 : SUCCESS in 12m 50s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/a03f8b30810f459b827f7262b68404b1 : SUCCESS in 7m 11s (non-voting)\n- swift-tox-py27 https://zuul.opendev.org/t/openstack/build/b233477378c040059541e40f808239f1 : SUCCESS in 9m 58s\n- swift-tox-py36 https://zuul.opendev.org/t/openstack/build/755806a903dc40e0995f6b898736397d : SUCCESS in 9m 32s\n- swift-tox-py39 https://zuul.opendev.org/t/openstack/build/142d5fed51894f0ab121a0bce36f04a4 : SUCCESS in 18m 35s\n- swift-tox-py312 https://zuul.opendev.org/t/openstack/build/f125f194413641bc814fd6ab181fa0c9 : SUCCESS in 21m 57s\n- swift-tox-func-py27 https://zuul.opendev.org/t/openstack/build/fc38b0cf06834dddbfec63a1073f306a : SUCCESS in 28m 53s\n- swift-tox-func-encryption-py27 https://zuul.opendev.org/t/openstack/build/05ded03bc8864522a488c6dd9d032793 : SUCCESS in 16m 14s\n- swift-tox-func-ec-py27 https://zuul.opendev.org/t/openstack/build/6aeb7aeba4b64cdf83f6c6a551eea394 : SUCCESS in 14m 56s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/8c286dd8a87f47359266b4bcbaaf756d : SUCCESS in 9m 12s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/996befa4a25745af8e0c1aad41419a33 : SUCCESS in 14m 12s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/c710193fc1ea454f8ee06dc7ab0b063b : SUCCESS in 14m 09s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/14a98b16f62d4117a007203c501c3cb3 : SUCCESS in 6m 26s\n- swift-tox-func-s3api-ceph-s3tests-tempauth https://zuul.opendev.org/t/openstack/build/07bfb0ebf756436e81dbd7b6824e5a5e : SUCCESS in 9m 37s (non-voting)\n- swift-tox-func-s3api-tests-tempauth https://zuul.opendev.org/t/openstack/build/7f33df2efa334e1a924bf79c0b5f8390 : SUCCESS in 4m 56s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/951fd82feb054737ae50c389b50427ed : SUCCESS in 39m 51s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/04daa1b9f4934067b369d8a01e56b9ea : SUCCESS in 9m 42s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/9ef0ba8fbe4e45a6958d928bdddd5387 : SUCCESS in 4m 31s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/77e423a2ba59402db404a7dd84d46f93 : SUCCESS in 10m 25s","accounts_in_message":[],"_revision_number":3},{"id":"178d8edba43ece36412b1877f9d29f8243c15f53","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2024-11-29 21:47:17.000000000","message":"Patch Set 3:\n\nBuild failed (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/4c5f6940c4a14ee0a257bdb4c6e42749\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/264556e0597946879d85e0c228616c48 : TIMED_OUT in 3h 01m 10s","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"c0481c2a02068379d4ad720dc5cd10e3f4a3a185","revisions":{"b9536b303a06bbdf891029633934e97850efcedb":{"kind":"REWORK","_number":1,"created":"2024-11-27 15:48:47.000000000","uploader":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"ref":"refs/changes/79/936379/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/936379/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/936379/1"}}},"commit":{"parents":[{"commit":"eda59577d417781e619ebdaa22661d06c19d3a9e","subject":"Add probe test for reconciler with object versioning","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/eda59577d417781e619ebdaa22661d06c19d3a9e"}]}],"author":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2024-11-26 17:39:10.000000000","tz":0},"committer":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2024-11-27 14:27:06.000000000","tz":0},"subject":"WIP object_versioning: only create one version of each .data file","message":"WIP object_versioning: only create one version of each .data file\n\nTODO: add unit tests for the change\n\nAvoid multiple versions of the same .data file by using the\nx-backend-data-timestamp to create the version-id that is used to\nuniquely name versions.\n\nPrior to versioning being enabled, object data is written to the user\nnamespace. After versioning is enabled, any such data (let\u0027s call it\nD1) that is overwritten is copied to the versions container before\nbeing replaced by a symlink to the new data (let\u0027s call it D2). The\nversion name is based on the x-timestamp of the copied data D1.\n\nWhen overwrites only partially succeed, a replica of the overwritten\nD1 data can be left in the user namespace. A subsequent overwrite may\nthen copy this replica of D1 to the versions container *again*. Each\ntime D1 data is copied to the versions container in this manner, a\nversion is created with a name based on the current x-timestamp of the\ncopied D1 replica. The x-timestamp may have advanced since the last\ncopy if a POST has been made. This can result in multiple differently\nnamed versions of the same D1 data.\n\nFurthermore, object_versioning doesn\u0027t attempt to preserve the time\nprecedence of PUTs and POSTs. If the PUT of D2 is only partially\nsuccessful, and then followed by a POST of metadata M2, the D1 replica\nremaining in user namespace may temporarily have the M2 .meta\nfile. This is eventually rectified in the user namespace by the\nobject-replicator (which replaces D1 with D2), but if another\noverwrite occurs before then, the copy of D1 to the versions container\nwill create another uniquely named version of D1 that erroneously\nincludes the M2 metadata.\n\nThis patch modifies object versioning middleware to use the\nx-backend-data-timestamp to create the version-id that is used to\nuniquely name versions. This means that each repeated copy of the same\ndata to the versions container is written to the same version object;\nthere will only be one version created for D1.\n\nThis change does NOT fix the possibility of erroneous metadata being\nincluded when data replicas are copied to the versions container;\nmultiple copy events may still occur (albeit now to the same version\nobject) and may include subsequently POSTed metadata.\n\nChange-Id: I15a59a35d857791140b2475cb70a6514e0f95e28\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b9536b303a06bbdf891029633934e97850efcedb"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b9536b303a06bbdf891029633934e97850efcedb"}]},"branch":"refs/heads/feature/mpu"},"a064defe13fc9156063f5f2dff2f13463dcbcb98":{"kind":"REWORK","_number":2,"created":"2024-11-28 18:23:02.000000000","uploader":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"ref":"refs/changes/79/936379/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/936379/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/936379/2"}}},"commit":{"parents":[{"commit":"7e20d95f1e04f416353c3a889a60a181818aff5f","subject":"Merge \"mpu: fix last-modified time in UploadPartCopy response\" into feature/mpu","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/7e20d95f1e04f416353c3a889a60a181818aff5f"}]}],"author":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2024-11-26 17:39:10.000000000","tz":0},"committer":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2024-11-28 18:10:31.000000000","tz":0},"subject":"WIP object_versioning: only create one version of each .data file","message":"WIP object_versioning: only create one version of each .data file\n\nAvoid multiple versions of the same .data file by using the\nx-backend-data-timestamp to create the version-id that is used to\nuniquely name the version of any existing object that is copied out of\nthe user namespace to the versions container.\n\nPrior to versioning being enabled, object data is written to the user\nnamespace. After versioning is enabled, any such data (let\u0027s call it\nD1) that is overwritten is copied to the versions container before\nbeing replaced by a symlink to the new data (let\u0027s call it D2). The\nversion name is based on the x-timestamp of the copied data D1.\n\nWhen overwrites only partially succeed, a replica of the overwritten\nD1 data can be left in the user namespace. A subsequent overwrite may\nthen copy this replica of D1 to the versions container *again*. Each\ntime D1 data is copied to the versions container in this manner, a\nversion is created with a name based on the current x-timestamp of the\ncopied D1 replica. The x-timestamp may have advanced since the last\ncopy if a POST has been made. This can result in multiple differently\nnamed versions of the same D1 data.\n\nFurthermore, object_versioning doesn\u0027t attempt to preserve the time\nprecedence of PUTs and POSTs. If the PUT of D2 is only partially\nsuccessful, and then followed by a POST of metadata M2, the D1 replica\nremaining in user namespace may temporarily have the M2 .meta\nfile. This is eventually rectified in the user namespace by the\nobject-replicator (which replaces D1 with D2), but if another\noverwrite occurs before then, the copy of D1 to the versions container\nwill create another uniquely named version of D1 that erroneously\nincludes the M2 metadata.\n\nThis patch modifies object versioning middleware to use the\nx-backend-data-timestamp to create the version-id that is used to\nuniquely name versions. This means that each repeated copy of the same\ndata to the versions container is written to the same version object;\nthere will only be one version created for D1.\n\nUnlink the X-Timestamp or Last-Modified time, it is possible that the\nX-Backend-Data-Timestamp has an offset component. This is stripped off\nwhen making the version-id since ~Timestamp does not support\ntimestamps with offsets. The author is not aware of scenarios where\nthe offset component of the timestamp would be significant for the\npurposes of identifying unique versions.\n\nThis change does NOT fix the possibility of erroneous metadata being\nincluded when data replicas are copied to the versions container;\nmultiple copy events may still occur (albeit now to the same version\nobject) and may include subsequently POSTed metadata.\n\nChange-Id: I15a59a35d857791140b2475cb70a6514e0f95e28\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a064defe13fc9156063f5f2dff2f13463dcbcb98"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/a064defe13fc9156063f5f2dff2f13463dcbcb98"}]},"branch":"refs/heads/feature/mpu"},"c0481c2a02068379d4ad720dc5cd10e3f4a3a185":{"kind":"TRIVIAL_REBASE","_number":3,"created":"2024-11-29 16:59:56.000000000","uploader":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"ref":"refs/changes/79/936379/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/79/936379/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/79/936379/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/79/936379/3"}}},"commit":{"parents":[{"commit":"10fe07c797a22806434417d86868cffa3171c314","subject":"Merge \"mpu: cleanup after specific version is deleted\" into feature/mpu","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/10fe07c797a22806434417d86868cffa3171c314"}]}],"author":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2024-11-26 17:39:10.000000000","tz":0},"committer":{"name":"Alistair Coles","email":"alistairncoles@gmail.com","date":"2024-11-29 16:35:30.000000000","tz":0},"subject":"WIP object_versioning: only create one version of each .data file","message":"WIP object_versioning: only create one version of each .data file\n\nAvoid multiple versions of the same .data file by using the\nx-backend-data-timestamp to create the version-id that is used to\nuniquely name the version of any existing object that is copied out of\nthe user namespace to the versions container.\n\nPrior to versioning being enabled, object data is written to the user\nnamespace. After versioning is enabled, any such data (let\u0027s call it\nD1) that is overwritten is copied to the versions container before\nbeing replaced by a symlink to the new data (let\u0027s call it D2). The\nversion name is based on the x-timestamp of the copied data D1.\n\nWhen overwrites only partially succeed, a replica of the overwritten\nD1 data can be left in the user namespace. A subsequent overwrite may\nthen copy this replica of D1 to the versions container *again*. Each\ntime D1 data is copied to the versions container in this manner, a\nversion is created with a name based on the current x-timestamp of the\ncopied D1 replica. The x-timestamp may have advanced since the last\ncopy if a POST has been made. This can result in multiple differently\nnamed versions of the same D1 data.\n\nFurthermore, object_versioning doesn\u0027t attempt to preserve the time\nprecedence of PUTs and POSTs. If the PUT of D2 is only partially\nsuccessful, and then followed by a POST of metadata M2, the D1 replica\nremaining in user namespace may temporarily have the M2 .meta\nfile. This is eventually rectified in the user namespace by the\nobject-replicator (which replaces D1 with D2), but if another\noverwrite occurs before then, the copy of D1 to the versions container\nwill create another uniquely named version of D1 that erroneously\nincludes the M2 metadata.\n\nThis patch modifies object versioning middleware to use the\nx-backend-data-timestamp to create the version-id that is used to\nuniquely name versions. This means that each repeated copy of the same\ndata to the versions container is written to the same version object;\nthere will only be one version created for D1.\n\nUnlink the X-Timestamp or Last-Modified time, it is possible that the\nX-Backend-Data-Timestamp has an offset component. This is stripped off\nwhen making the version-id since ~Timestamp does not support\ntimestamps with offsets. The author is not aware of scenarios where\nthe offset component of the timestamp would be significant for the\npurposes of identifying unique versions.\n\nThis change does NOT fix the possibility of erroneous metadata being\nincluded when data replicas are copied to the versions container;\nmultiple copy events may still occur (albeit now to the same version\nobject) and may include subsequently POSTed metadata.\n\nChange-Id: I15a59a35d857791140b2475cb70a6514e0f95e28\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/c0481c2a02068379d4ad720dc5cd10e3f4a3a185"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/c0481c2a02068379d4ad720dc5cd10e3f4a3a185"}]},"branch":"refs/heads/feature/mpu"}},"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":""}}}]}
