)]}'
{"id":"openstack%2Fglance_store~966035","triplet_id":"openstack%2Fglance_store~stable%2F2025.1~I32fce5aeebe3319f167affa954c681598f81ad74","project":"openstack/glance_store","branch":"stable/2025.1","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":"2026-07-10 11:47:21.000000000","reason":"Change was abandoned"},"27615":{"account":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"last_update":"2025-11-07 15:24:27.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:39:00.000000000","updated":"2026-07-10 11:47:21.000000000","total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"4284e6fd2591eeb557ea0295bc4dc10a5bc763f9","_number":966035,"virtual_id_number":966035,"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:41:27.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:39: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":"REVIEWER"},{"updated":"2025-11-04 14:57:25.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:27.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":"cff4007a48a898946bd5c71c9eef039562123433","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:39:00.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"2c4b195fda91f6a85654284acb86b20e4ce52ce7","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-11-04 14:57:25.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/4afb73d0ea614ec7bd147df518ff36b0\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/f2e1548b5458484c9e188f1c58846cfe : SUCCESS in 1h 56m 05s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/0d69931c42694e74b0c8f4a6f009d9a7 : SUCCESS in 3m 32s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/371a73ce77fd43199c31622f39f10a71 : FAILURE in 3m 13s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/b9e4f23bb34d4fcea936dfe8c102c65c : FAILURE in 3m 16s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/81d28cdde2184d54914822310fa9d5e7 : SUCCESS in 3m 33s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/4c961e059ef2427e9e2547fdecbda611 : SUCCESS in 2m 59s\n- cross-glance-tox-functional https://zuul.opendev.org/t/openstack/build/44d9fde28d2746d288cd02afaa18bdef : FAILURE in 9m 32s\n- glance_store-src-ceph-tempest https://zuul.opendev.org/t/openstack/build/1c73ddd254534ae8b45eaa42ef5b6f4a : SUCCESS in 2h 17m 08s","accounts_in_message":[],"_revision_number":1},{"id":"5fb61f42291a49dca88f477881e192b5bd452e97","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:27.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified-1\n","accounts_in_message":[],"_revision_number":2},{"id":"024f03bc2bba712ffc09c312dd0c637d2f5af7d6","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-11-07 18:41:27.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/91a08631356b4932aab5ff1fe4919eaf\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/6b74be2510114933a0c33dcbce20bcb2 : SUCCESS in 1h 49m 27s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/ba01978af8e542fa8d5b651476de3088 : SUCCESS in 3m 01s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/93bc76d440e74bacab715bce8c01cfa9 : SUCCESS in 3m 49s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/c68b1c296d0049dfbf9b307315edd83e : SUCCESS in 3m 13s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/ecc9114b1a544be6bd7dc5f8a484e956 : SUCCESS in 3m 36s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/e129f6399d734271ade2647662288401 : SUCCESS in 3m 03s\n- cross-glance-tox-functional https://zuul.opendev.org/t/openstack/build/3f0551f67a4341dd9fb364906afd1fc5 : FAILURE in 7m 50s\n- glance_store-src-ceph-tempest https://zuul.opendev.org/t/openstack/build/9d413bb98e434ea881578305540384d1 : TIMED_OUT in 3h 05m 33s","accounts_in_message":[],"_revision_number":2},{"id":"4284e6fd2591eeb557ea0295bc4dc10a5bc763f9","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:47:21.000000000","message":"Abandoned","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"b6f32bda4ae93c3d1cfe91c118287d5ce92cdce8","revisions":{"ebabb74f208384bd9d488a7cbabfac1cfdb7ae6f":{"kind":"REWORK","_number":1,"created":"2025-11-04 12:39:00.000000000","uploader":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"ref":"refs/changes/35/966035/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/glance_store","ref":"refs/changes/35/966035/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/35/966035/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/35/966035/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/35/966035/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/glance_store refs/changes/35/966035/1"}}},"commit":{"parents":[{"commit":"5db60a4a979662d2a09d937cf460f8d72f8403dd","subject":"Support multipart upload when image_size \u003d\u003d 0","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/5db60a4a979662d2a09d937cf460f8d72f8403dd"}]}],"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:35:37.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(cherry picked from commit 35eb1272251feb2cc978f632d7b5e866f4885ba2)\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/ebabb74f208384bd9d488a7cbabfac1cfdb7ae6f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/ebabb74f208384bd9d488a7cbabfac1cfdb7ae6f"}]},"branch":"refs/heads/stable/2025.1"},"b6f32bda4ae93c3d1cfe91c118287d5ce92cdce8":{"kind":"TRIVIAL_REBASE_WITH_MESSAGE_UPDATE","_number":2,"created":"2025-11-07 15:24:27.000000000","uploader":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"ref":"refs/changes/35/966035/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/glance_store","ref":"refs/changes/35/966035/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/35/966035/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/35/966035/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/glance_store refs/changes/35/966035/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/glance_store refs/changes/35/966035/2"}}},"commit":{"parents":[{"commit":"d966bd20a436b0ba200e3e67bd2a51fe1a0679aa","subject":"Cinder: Standardize volume GET calls","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/d966bd20a436b0ba200e3e67bd2a51fe1a0679aa"}]}],"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:22:22.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(cherry picked from commit e01592dbe31da29af0a5b552816b376dd4a348f1)\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/b6f32bda4ae93c3d1cfe91c118287d5ce92cdce8"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/glance_store/commit/b6f32bda4ae93c3d1cfe91c118287d5ce92cdce8"}]},"branch":"refs/heads/stable/2025.1"}},"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":""}}}]}
