)]}'
{"id":"openstack%2Fswift~1006571","triplet_id":"openstack%2Fswift~master~I156bbb97d0ddfe62e9d593580fd381b68e1e9760","project":"openstack/swift","branch":"master","attention_set":{"15343":{"account":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"last_update":"2026-09-22 10:44:53.000000000","reason":"Vote got outdated and was removed: Code-Review+1"}},"removed_from_attention_set":{"38496":{"account":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"last_update":"2026-09-22 11:02:51.000000000","reason":"\u003cGERRIT_ACCOUNT_38496\u003e replied on the change","reason_account":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"}}},"hashtags":[],"change_id":"I156bbb97d0ddfe62e9d593580fd381b68e1e9760","subject":"Verify donor fragment ETags when rebuilding an EC fragment","status":"NEW","created":"2026-09-21 15:20:24.000000000","updated":"2026-09-22 11:52:15.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":10,"unresolved_comment_count":4,"has_review_started":true,"meta_rev_id":"b3c476bf57c827f080aca469d342e3a4c2555b6a","_number":1006571,"virtual_id_number":1006571,"owner":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-09-22 11:49:22.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-21 16:09:02.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-09-21 16:37:46.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2026-09-21 21:50:16.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":"9f53b505dae73437a5252339228929bc1d4a9f07","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"date":"2026-09-21 15:20:24.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"c4cd773ea28271196a01acc9a4f4617ad15ac1eb","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-21 16:09:02.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/3a048003a6d944dcb90c4066f49ccceb\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/bd8a422c8a4f48869642bfd6cec0da5a : SUCCESS in 41m 24s","accounts_in_message":[],"_revision_number":1},{"id":"9d7771e4caa7885cff4138b8f84dd433d897296f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-21 16:37:46.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/47a76b68f30d4b19b71b0481e8567f03\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/8fff79f8fe3945418c8641e395f66ff0 : SUCCESS in 8m 57s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/87f22884100a4f3283d2068eebc6a1b8 : SUCCESS in 9m 19s\n- grenade https://zuul.opendev.org/t/openstack/build/db3c2e5ae94949b79406a6828c666cb3 : SUCCESS in 1h 01m 46s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/4d2e5eeeaff4459f8b7eb0e369ef13bd : SUCCESS in 1h 05m 31s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/ac00b4ac028145139254c17a18746975 : SUCCESS in 36m 45s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/d7fe99bb64424e6dae994502d4893355 : SUCCESS in 1h 02m 36s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/83d7f610583449c197ad0b5e240b9313 : SUCCESS in 12m 32s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/6eb3e4e87aac41fa8096f7d809c462f1 : SUCCESS in 20m 57s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/9c2ca2887e4c4fecb3a16c21b106335b : SUCCESS in 20m 41s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/c88c9af4c7b848ee9c9d41a935ae779d : SUCCESS in 5m 02s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/a5e6e00cbdfe4e798c92ae6b5d31973c : SUCCESS in 26m 11s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/3907d449867742b9b55765d69f673d6f : SUCCESS in 11m 33s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/514a0deaa5b24c94a8a535f51c4e6c52 : SUCCESS in 34m 19s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/2365deb756ef43a098d528b8c8cb2337 : SUCCESS in 11m 13s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/f0f2eee8bc6d42c1a7ca5016df6ce91e : SUCCESS in 13m 44s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/3fb3917b6d0e4073bff7f5dee8a2e996 : SUCCESS in 12m 52s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/56b8b9b4057849759a884be7e8f917e5 : SUCCESS in 15m 47s\n- swift-tox-func-py39-centos-9-stream https://zuul.opendev.org/t/openstack/build/5a5ce5e391304377884a9c8a7539a9fe : SUCCESS in 10m 31s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/e4abdcc5c37c46f99af7e9a2b9988cd0 : SUCCESS in 3m 54s\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/52fdf504da8148c08a3f28c36b43036e : SUCCESS in 9m 07s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/f60c6e17961a4f5bbb1209281d1b2e3b : SUCCESS in 43m 03s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/3ceeeb55552245268b0fd84bbc456b7a : SUCCESS in 30m 30s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/ab9d5a0d84404ef48a9ecdb7080728b1 : SUCCESS in 53m 34s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/9ec70513b8d64debabfdf19c8144eaa8 : SUCCESS in 28m 55s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/f8970208a8714c73b9e82179ade68dc1 : SUCCESS in 4m 18s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/3cfafa15cefb4dda8e207e8a90590dd5 : SUCCESS in 11m 01s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/996af0a2384d4e8ca565813b3ec4d61d : SUCCESS in 1h 09m 54s\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":1},{"id":"7d9034d8d764a4a65d6b34ee3fd2ea2fd4108d18","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2026-09-21 21:50:16.000000000","message":"Patch Set 1: Code-Review+1\n\n(5 comments)","accounts_in_message":[],"_revision_number":1},{"id":"e2b2900251a8153230ee0c3e616a1d514e10b55d","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"date":"2026-09-22 10:44:53.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Code-Review+1 (copy condition: \"changekind:TRIVIAL_REBASE OR is:MIN\")\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"79fa5b5a32d4d8d5ca9d6c0d4a1c5044fe3fac82","author":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"date":"2026-09-22 11:02:51.000000000","message":"Patch Set 2:\n\n(5 comments)","accounts_in_message":[],"_revision_number":2},{"id":"761351427f13fe00daeb8e9d1f6d7b252216d2e0","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 11:49:22.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/4fe5fa573c1b4b57af256a8787942a45\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/cbec75c1fbc44c31b4e7ce758fd645bf : SUCCESS in 5m 57s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/85b3899e8a264026b82816c5b0c36ce1 : SUCCESS in 5m 19s\n- grenade https://zuul.opendev.org/t/openstack/build/de22826293664ad9b5280c51f893a7bf : SUCCESS in 33m 53s\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/cabba8b7020f4186a265e92567f8ab3d : SUCCESS in 33m 53s\n- tempest-integrated-object-storage https://zuul.opendev.org/t/openstack/build/7e1759cf82c145e284b8d1c72e780cee : SUCCESS in 27m 07s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/97ebf7c009f54f1aa1ec5999f9d7cfc3 : SUCCESS in 38m 20s\n- swift-tox-func-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/c4167ccfecd64b3da86cae149cf22a69 : SUCCESS in 19m 39s (non-voting)\n- swift-tox-func-encryption-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/118c3ca986234df3a57576b982bbd178 : SUCCESS in 11m 33s (non-voting)\n- swift-tox-func-ec-py39-centos-9-stream-fips https://zuul.opendev.org/t/openstack/build/e0e192fa0f3343468a13e420c4b139a5 : SUCCESS in 23m 14s (non-voting)\n- swift-build-image https://zuul.opendev.org/t/openstack/build/c9f52e300fd7422797fc884736e47610 : SUCCESS in 5m 42s (non-voting)\n- swift-tox-py37 https://zuul.opendev.org/t/openstack/build/9b42bf39ef704cdeabc3e41f26003660 : SUCCESS in 13m 12s\n- swift-tox-py310 https://zuul.opendev.org/t/openstack/build/7e60ca61c63d477bb8c942de02aac8d7 : SUCCESS in 22m 28s\n- swift-tox-py313 https://zuul.opendev.org/t/openstack/build/a89352baa30f479da4e8e712f01bcd32 : SUCCESS in 31m 51s\n- swift-tox-py314 https://zuul.opendev.org/t/openstack/build/336cf7a126374bc48762f66469603eed : SUCCESS in 14m 28s\n- swift-tox-func-py312 https://zuul.opendev.org/t/openstack/build/3a2ca9468d2540158a0c86eabd1d95e2 : SUCCESS in 14m 12s\n- swift-tox-func-encryption-py312 https://zuul.opendev.org/t/openstack/build/7bd8fd93ecdd430a9366dd0dc84102a3 : SUCCESS in 14m 19s\n- swift-tox-func-ec-py312 https://zuul.opendev.org/t/openstack/build/84f9ec5d412344fcb59c7734a03cef52 : SUCCESS in 8m 39s\n- swift-tox-func-py39-centos-9-stream https://zuul.opendev.org/t/openstack/build/23fe34db61254acf8717b52d3f1a9e86 : SUCCESS in 17m 59s\n- swift-func-cors https://zuul.opendev.org/t/openstack/build/e7dba6314bc848f484cdd8be1cfedc1b : SUCCESS in 6m 12s\n- swift-tox-func-s3api-compat-tests-tempauth https://zuul.opendev.org/t/openstack/build/7757421d330c468da94e9eb133bc8416 : SUCCESS in 5m 14s\n- swift-probetests-centos-9-stream https://zuul.opendev.org/t/openstack/build/c10f35205c394064ad5723d57543457f : SUCCESS in 50m 47s\n- swift-dsvm-functional https://zuul.opendev.org/t/openstack/build/3486be65e0a24805b61b41fde43f4ef6 : SUCCESS in 38m 04s\n- swift-dsvm-functional-ipv6 https://zuul.opendev.org/t/openstack/build/9a39bcd5cc7347f595b4f67beee6ab46 : SUCCESS in 58m 27s\n- swift-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/3158f3192f0847cd859b7c49a9c0585a : SUCCESS in 28m 25s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/5ae84c3668d640cea13957f875809cb4 : SUCCESS in 2m 50s\n- swift-multinode-rolling-upgrade https://zuul.opendev.org/t/openstack/build/3b0d262420104450933ba28cd306291a : SUCCESS in 17m 05s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/83fc87093b6f4455a218a0403766dec8 : SUCCESS in 28m 34s\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-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-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-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},{"id":"b3c476bf57c827f080aca469d342e3a4c2555b6a","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-22 11:52:15.000000000","message":"Patch Set 2:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/aac453764b3841919902fe8bded34e9e\n\n- swift-tox-py312-arm64 https://zuul.opendev.org/t/openstack/build/4fbb62863b12407b8f8b852780d7ac39 : SUCCESS in 1h 04m 14s","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"92b4117940e7886d8c8e4ad309ce317ba0833cca","revisions":{"b5c27b87e3797db730e0cda57a253517af76bff1":{"kind":"REWORK","_number":1,"created":"2026-09-21 15:20:24.000000000","uploader":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"ref":"refs/changes/71/1006571/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/71/1006571/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/71/1006571/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/71/1006571/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/71/1006571/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/71/1006571/1"}}},"commit":{"parents":[{"commit":"6b83d7f3fcf95539b17dc1e3f5f1074c29afc487","subject":"Merge \"tests: Use POLICIES.default in quarantine hashdir tests\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6b83d7f3fcf95539b17dc1e3f5f1074c29afc487"}]}],"author":{"name":"Andressa Cabistani","email":"acabistani@gmail.com","date":"2026-09-21 15:09:53.000000000","tz":0},"committer":{"name":"Andressa Cabistani","email":"acabistani@gmail.com","date":"2026-09-21 15:19:46.000000000","tz":0},"subject":"Verify donor fragment ETags when rebuilding an EC fragment","message":"Verify donor fragment ETags when rebuilding an EC fragment\n\nThe reconstructor decoded whatever bytes a donor sent and committed the\nresult, with no check that those bytes were the ones the donor had been\nwritten with. A fragment archive that had rotted on disk was therefore\na usable rebuild input: the donor still advertises its original ETag,\nbecause that ETag lives in xattrs the rot did not touch, and the\nreconstructor ignored it.\n\nThe damage is silent, permanent and contagious. The rebuilt fragment\u0027s\nown ETag is computed from the corrupt content, so the bad fragment is\ninternally consistent and no auditor will ever quarantine it. The donor\ndetects its own corruption at close() -- after it has finished sending\n-- and quarantines itself, destroying the evidence. The reconstructor\nthen has that donor\u0027s fragment to rebuild in turn, and the fragment it\njust wrote from corrupt input is an eligible donor for that rebuild. On\na SAIO with a 4+2 policy, rotting one archive produced two permanently\ncorrupt fragments in a single reconstructor pass.\n\nHash each donor\u0027s stream as it arrives and compare the result against\nthe ETag that donor advertised. Verify on the pass that completes a\ndonor, before anything rebuilt from it is yielded; verifying once the\nrebuild loop ends is too late. A single-segment object streams in one\npass, so by then the rebuilt fragment has been yielded and ssync has\nwritten content_length bytes to the receiver, which finalises on byte\ncount and is not waiting for anything further from the sender.\n\nRaising is what makes this a fix rather than a log line. Bit-rot does\nnot change a fragment\u0027s length, so without it the rebuild finishes\nnormally, bytes_read \u003d\u003d df.content_length holds, and the existing\nshort-send guard in ssync never fires.\n\nIt has to be ReplicationException and not DiskFileError.\nssync_sender.updates() deliberately ignores DiskFileError on the\ndocumented assumption that it can only come from opening the diskfile,\n\"before any data is read and sent\". Raised mid-stream it is swallowed\nand the session goes on to report success. ReplicationException aborts\nthe session and logs a simple error naming the target, which is what\nthe short-send guard raises for the same reason: the receiver may\nalready be holding partial state.\n\nOnly donors that reached EOF are checked. One still mid-stream when\nanother ends early would hash short and be reported as corrupt when it\nis not, and a genuinely truncated archive is already caught by the\nreceiver\u0027s content-length check. A donor that advertises no ETag cannot\nbe verified and is left alone, so older backends keep working.\n\nCloses-Bug: #1971546\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I156bbb97d0ddfe62e9d593580fd381b68e1e9760\nSigned-off-by: Andressa Cabistani \u003cacabistani@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b5c27b87e3797db730e0cda57a253517af76bff1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/b5c27b87e3797db730e0cda57a253517af76bff1"}]},"branch":"refs/heads/master"},"92b4117940e7886d8c8e4ad309ce317ba0833cca":{"kind":"REWORK","_number":2,"created":"2026-09-22 10:44:53.000000000","uploader":{"_account_id":38496,"name":"Andressa Cabistani","display_name":"Andressa","email":"acabistani@gmail.com","username":"andressadotpy","status":"I\u0027m a Software Engineer at Red Hat and I love Open Source and connect with people! Feel free to DM through IRC, I\u0027ll be delighted to chat"},"ref":"refs/changes/71/1006571/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/swift","ref":"refs/changes/71/1006571/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/swift refs/changes/71/1006571/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/swift refs/changes/71/1006571/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/swift refs/changes/71/1006571/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/swift refs/changes/71/1006571/2"}}},"commit":{"parents":[{"commit":"6b83d7f3fcf95539b17dc1e3f5f1074c29afc487","subject":"Merge \"tests: Use POLICIES.default in quarantine hashdir tests\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/6b83d7f3fcf95539b17dc1e3f5f1074c29afc487"}]}],"author":{"name":"Andressa Cabistani","email":"acabistani@gmail.com","date":"2026-09-21 15:09:53.000000000","tz":0},"committer":{"name":"Andressa Cabistani","email":"acabistani@gmail.com","date":"2026-09-22 10:44:25.000000000","tz":0},"subject":"Verify donor fragment ETags when rebuilding an EC fragment","message":"Verify donor fragment ETags when rebuilding an EC fragment\n\nThe reconstructor decoded whatever bytes a donor sent and committed the\nresult, with no check that those bytes were the ones the donor had been\nwritten with. A fragment archive that had rotted on disk was therefore\na usable rebuild input: the donor still advertises its original ETag,\nbecause that ETag lives in xattrs the rot did not touch, and the\nreconstructor ignored it.\n\nThe damage is silent, permanent and contagious. The rebuilt fragment\u0027s\nown ETag is computed from the corrupt content, so the bad fragment is\ninternally consistent and no auditor will ever quarantine it. The donor\ndetects its own corruption at close() -- after it has finished sending\n-- and quarantines itself, destroying the evidence. The reconstructor\nthen has that donor\u0027s fragment to rebuild in turn, and the fragment it\njust wrote from corrupt input is an eligible donor for that rebuild. On\na SAIO with a 4+2 policy, rotting one archive produced two permanently\ncorrupt fragments in a single reconstructor pass.\n\nHash each donor\u0027s stream as it arrives and compare the result against\nthe ETag that donor advertised. Verify as soon as the donor\u0027s byte\ncount reaches the Content-Length it advertised, rather than waiting for\na read to come back short: an archive whose length is an exact multiple\nof fragment_size is read to the end without a short read ever\nhappening, and that is the case for any object that is an exact\nmultiple of ec_segment_size. By the time the short read does arrive,\none pass later, the rebuilt fragment has been yielded and ssync has\nwritten content_length bytes to the receiver, which finalises on byte\ncount and is not waiting for anything further from the sender.\n\nRaising is what makes this a fix rather than a log line. Bit-rot does\nnot change a fragment\u0027s length, so without it the rebuild finishes\nnormally, bytes_read \u003d\u003d df.content_length holds, and the existing\nshort-send guard in ssync never fires.\n\nIt has to be ReplicationException and not DiskFileError.\nssync_sender.updates() deliberately ignores DiskFileError on the\ndocumented assumption that it can only come from opening the diskfile,\n\"before any data is read and sent\". Raised mid-stream it is swallowed\nand the session goes on to report success. ReplicationException aborts\nthe session and logs a simple error naming the target, which is what\nthe short-send guard raises for the same reason: the receiver may\nalready be holding partial state.\n\nThe comparison happens where the bytes are hashed, but the mismatch is\nrecorded on the response rather than raised there. That code runs in a\nGreenPile greenthread, and eventlet prints a traceback for any\ngreenthread that dies by exception even when the consumer handles it,\nso raising would make a deliberately handled condition look like a\ncrash in the log. The consumer reads the record once the pile is in and\nbefore it rebuilds anything, which is the same point in the stream, and\nit is also ahead of the blanket handler that would otherwise turn the\nerror into a silent end-of-stream break.\n\nA donor that ends before it has sent what it advertised is left alone.\nIts hash covers only part of the archive, so an ETag error would be\nmisleading, and a truncated stream is already caught by the receiver\u0027s\ncontent-length check. A donor that advertises no ETag cannot be\nverified and is left alone too, so older backends keep working.\n\nCloses-Bug: #1971546\nCo-Authored-By: Tim Burke \u003ctim.burke@gmail.com\u003e\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I156bbb97d0ddfe62e9d593580fd381b68e1e9760\nSigned-off-by: Andressa Cabistani \u003cacabistani@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/92b4117940e7886d8c8e4ad309ce317ba0833cca"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/swift/commit/92b4117940e7886d8c8e4ad309ce317ba0833cca"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
