)]}'
{"id":"openstack%2Fglance_store~966034","triplet_id":"openstack%2Fglance_store~stable%2F2025.2~I32fce5aeebe3319f167affa954c681598f81ad74","project":"openstack/glance_store","branch":"stable/2025.2","topic":"fix-multiattach-handling","attention_set":{},"removed_from_attention_set":{"15554":{"account":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"last_update":"2025-12-03 14:19:08.000000000","reason":"\u003cGERRIT_ACCOUNT_15554\u003e replied on the change","reason_account":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"}},"27615":{"account":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"last_update":"2025-11-07 15:24:00.000000000","reason":"Reviewer/Cc was removed"}},"hashtags":[],"change_id":"I32fce5aeebe3319f167affa954c681598f81ad74","subject":"Cinder: Handle multiattach volumes in multi worker env","status":"ABANDONED","created":"2025-11-04 12:36:35.000000000","updated":"2026-07-10 11:46:26.000000000","total_comment_count":1,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"284f8d17c0609ed4b9446f6362fbaf6ec56cfaaa","_number":966034,"virtual_id_number":966034,"owner":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":-1,"date":"2025-11-07 18:33:33.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},"Review-Priority":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Branch Freeze"," 0":"No Priority","+1":"Important Change","+2":"Top Priority / Holds Gate"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"CC":[{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2025-11-04 12:36:35.000000000","updated_by":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"reviewer":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"state":"REVIEWER"},{"updated":"2025-11-04 15:35:51.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":"2025-11-07 15:24:00.000000000","updated_by":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"reviewer":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"state":"CC"}],"messages":[{"id":"4de5a1f75e43281f53c9eecf74c21752c6e3c3fe","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"date":"2025-11-04 12:36:35.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"d0774b88adfe4fc3286f4f1ad11b89c8b00b66fc","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-11-04 15:35:51.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/b63a9d5d0d5d4216bfe8cc949d08ae5a\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/5bffa88f2e4a48228da10b8d2b5792d2 : SUCCESS in 1h 40m 20s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/46d3ac00df1b407e9dfa9e3f94f12563 : SUCCESS in 3m 54s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/15c856a0738f4f4b8587a19429ce7973 : FAILURE in 4m 00s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/eb69842d797a4b258a0788b599eefbf5 : FAILURE in 5m 02s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/531481ccc67c4208bf3b7f2dd0242876 : FAILURE in 4m 53s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/86577368576f43f1a2a8489ecb880c3b : SUCCESS in 4m 14s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/7047ae378457405ebd6a5a60eed4feff : SUCCESS in 3m 35s\n- cross-glance-tox-functional https://zuul.opendev.org/t/openstack/build/ba8b0a744d6d4138b259eb640c1557d3 : FAILURE in 6m 08s\n- glance_store-src-ceph-tempest https://zuul.opendev.org/t/openstack/build/f362a784303d4754b2057f4a16c42f4c : SUCCESS in 2h 51m 01s","accounts_in_message":[],"_revision_number":1},{"id":"b520f41590df6722368b726e6689c61ac6edee87","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"date":"2025-11-07 15:24:00.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.\n\nOutdated Votes:\n* Verified-1\n","accounts_in_message":[],"_revision_number":2},{"id":"de3821bcf6784efc3162292188f05e3a122cf9c7","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-11-07 18:33:33.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/87a1e691cb0d43cca9a31fee69330ba5\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/9c91307585b04144b6752e27ecedfd12 : SUCCESS in 1h 41m 51s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/ecefa2366c524a0d98882e5f0a5a95fc : SUCCESS in 3m 11s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/0728c49d8f9747c7bebb8e3424a815e9 : SUCCESS in 3m 38s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/9f8f02341bba4031abe0b1b4fe9e463a : SUCCESS in 3m 28s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/c19bc90078994a288684a9b005bb7fc6 : SUCCESS in 6m 38s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/ba18f943e91e40ab811c568be05d9e54 : SUCCESS in 4m 11s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/dadad3526d9b489f965ca83b7e5a4d20 : SUCCESS in 3m 14s\n- cross-glance-tox-functional https://zuul.opendev.org/t/openstack/build/5ae87c9f6d1848c595c846324b677d70 : FAILURE in 9m 53s\n- glance_store-src-ceph-tempest https://zuul.opendev.org/t/openstack/build/ea60feb0913744a7839d524f84388166 : TIMED_OUT in 3h 04m 58s","accounts_in_message":[],"_revision_number":2},{"id":"92cfba69b63021308e39de579aaca6ad7603f373","author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"date":"2025-12-03 14:19:08.000000000","message":"Patch Set 2:\n\n(1 comment)","accounts_in_message":[],"_revision_number":2},{"id":"284f8d17c0609ed4b9446f6362fbaf6ec56cfaaa","tag":"autogenerated:gerrit:abandon","author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"date":"2026-07-10 11:46:26.000000000","message":"Abandoned","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"e01592dbe31da29af0a5b552816b376dd4a348f1","revisions":{"35eb1272251feb2cc978f632d7b5e866f4885ba2":{"kind":"REWORK","_number":1,"created":"2025-11-04 12:36:35.000000000","uploader":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"ref":"refs/changes/34/966034/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/glance_store","ref":"refs/changes/34/966034/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/34/966034/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/34/966034/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/34/966034/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/glance_store refs/changes/34/966034/1"}}},"commit":{"parents":[{"commit":"723dc3b261115667ef6d9526c304ff118b79cf70","subject":"Update TOX_CONSTRAINTS_FILE for stable/2025.2","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/723dc3b261115667ef6d9526c304ff118b79cf70"}]}],"author":{"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","date":"2025-09-26 21:28:25.000000000","tz":0},"committer":{"name":"Bence Romsics","email":"bence.romsics@gmail.com","date":"2025-11-04 12:34:59.000000000","tz":60},"subject":"Cinder: Handle multiattach volumes in multi worker env","message":"Cinder: Handle multiattach volumes in multi worker env\n\nSince glance completed the support for uWSGI[1], devstack[2]\nalong with other deployment tools have started to default\nglance in uWSGI mode.\nThe problem we currently face is that the attachment state\nmanager (written with threading locks) is not capable of\nhandling multiple uWSGI processes accessing the same image-volume\nwith multiple attach/detach operations which are not coordinated.\n\nThis patch aims to address the problem with a different approach\nkeeping the following things in mind:\n\n1. Attachment create doesn\u0027t require locking since we already handle\nit with Cinder attachment states (\u0027reserved\u0027, \u0027attaching\u0027, \u0027in-use\u0027)\nand the retry mechanism while creating attachment[3]\n\n2. While disconnecting, we need to only perform it if there are\nno other attachments for same volume\n\n3. Delete attachment should always be performed to remove\nattachment records from Cinder DB to make decision for step 2.\nNOTE that Cinder volume driver handles case for multiattach\nvolumes and avoids unmapping if LUN is attached \u003e 1 times.\n\nWith the following in mind, the new approach is:\n\n1. Stop persisting attachment state in memory and rely on\nCinder DB since that is more reliable and fault tolerant.\n\n2. Removing locking from attachment create call\n\n3. Use external/file locks for disconnect and detach operations\n\n4. While disconnecting, acquire file lock and count number\nof attachments for a specific volume and don\u0027t disconnect if\nattachments \u003e 1\n\n5. For non-multiattach volumes, always disconnect\n\n6. Delete the volume attachment inside file lock to ensure\nthe attachment counting is accurate.\n\n[1] https://review.opendev.org/c/openstack/glance/+/742065\n[2] https://review.opendev.org/c/openstack/devstack/+/932201\n[3] https://review.opendev.org/c/openstack/glance_store/+/786410\n\nCloses-Bug: #1965679\nCloses-Bug: #2125840\n\nDepends-On: https://review.opendev.org/c/openstack/cinder/+/962409\n\nSigned-off-by: Rajat Dhasmana \u003crajatdhasmana@gmail.com\u003e\nChange-Id: I32fce5aeebe3319f167affa954c681598f81ad74\n(cherry picked from commit 915dffabc19493e0116cd2bf79c8b4f4dd47c9a3)\nSigned-off-by: Bence Romsics \u003cbence.romsics@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/35eb1272251feb2cc978f632d7b5e866f4885ba2"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/35eb1272251feb2cc978f632d7b5e866f4885ba2"}]},"branch":"refs/heads/stable/2025.2"},"e01592dbe31da29af0a5b552816b376dd4a348f1":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2025-11-07 15:24:00.000000000","uploader":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"ref":"refs/changes/34/966034/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/glance_store","ref":"refs/changes/34/966034/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/34/966034/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/34/966034/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/34/966034/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/glance_store refs/changes/34/966034/2"}}},"commit":{"parents":[{"commit":"6943ba10313128e1e83c804c273b2cf8d220ffaa","subject":"Cinder: Standardize volume GET calls","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/6943ba10313128e1e83c804c273b2cf8d220ffaa"}]}],"author":{"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","date":"2025-09-26 21:28:25.000000000","tz":0},"committer":{"name":"Bence Romsics","email":"bence.romsics@gmail.com","date":"2025-11-07 15:14:47.000000000","tz":60},"subject":"Cinder: Handle multiattach volumes in multi worker env","message":"Cinder: Handle multiattach volumes in multi worker env\n\nSince glance completed the support for uWSGI[1], devstack[2]\nalong with other deployment tools have started to default\nglance in uWSGI mode.\nThe problem we currently face is that the attachment state\nmanager (written with threading locks) is not capable of\nhandling multiple uWSGI processes accessing the same image-volume\nwith multiple attach/detach operations which are not coordinated.\n\nThis patch aims to address the problem with a different approach\nkeeping the following things in mind:\n\n1. Attachment create doesn\u0027t require locking since we already handle\nit with Cinder attachment states (\u0027reserved\u0027, \u0027attaching\u0027, \u0027in-use\u0027)\nand the retry mechanism while creating attachment[3]\n\n2. While disconnecting, we need to only perform it if there are\nno other attachments for same volume\n\n3. Delete attachment should always be performed to remove\nattachment records from Cinder DB to make decision for step 2.\nNOTE that Cinder volume driver handles case for multiattach\nvolumes and avoids unmapping if LUN is attached \u003e 1 times.\n\nWith the following in mind, the new approach is:\n\n1. Stop persisting attachment state in memory and rely on\nCinder DB since that is more reliable and fault tolerant.\n\n2. Removing locking from attachment create call\n\n3. Use external/file locks for disconnect and detach operations\n\n4. While disconnecting, acquire file lock and count number\nof attachments for a specific volume and don\u0027t disconnect if\nattachments \u003e 1\n\n5. For non-multiattach volumes, always disconnect\n\n6. Delete the volume attachment inside file lock to ensure\nthe attachment counting is accurate.\n\n[1] https://review.opendev.org/c/openstack/glance/+/742065\n[2] https://review.opendev.org/c/openstack/devstack/+/932201\n[3] https://review.opendev.org/c/openstack/glance_store/+/786410\n\nCloses-Bug: #1965679\nCloses-Bug: #2125840\n\nDepends-On: https://review.opendev.org/c/openstack/cinder/+/962409\n\nSigned-off-by: Rajat Dhasmana \u003crajatdhasmana@gmail.com\u003e\nChange-Id: I32fce5aeebe3319f167affa954c681598f81ad74\n(cherry picked from commit 915dffabc19493e0116cd2bf79c8b4f4dd47c9a3)\nSigned-off-by: Bence Romsics \u003cbence.romsics@gmail.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/e01592dbe31da29af0a5b552816b376dd4a348f1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/e01592dbe31da29af0a5b552816b376dd4a348f1"}]},"branch":"refs/heads/stable/2025.2"}},"requirements":[],"submit_records":[],"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":"Review-Priority","description":"Review priority","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"-label:Review-Priority\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":[],"failing_atoms":["label:Review-Priority\u003dMIN"],"atom_explanations":{"label:Review-Priority\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":""}}}]}
