)]}'
{"cinder/volume/drivers/pure.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"13e4317abd5bac3aa18c61737fe75720bc2aa14d","unresolved":true,"context_lines":[{"line_number":1428,"context_line":"                 for array in arrays"},{"line_number":1429,"context_line":"                 for host in hosts}"},{"line_number":1430,"context_line":"        if attaching or not connector:"},{"line_number":1431,"context_line":"            names.add(\u0027pure-%s\u0027 % volume.id)"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        # Sorted so that concurrent operations spanning several names always"},{"line_number":1434,"context_line":"        # acquire the locks in the same order and cannot deadlock."}],"source_content_type":"text/x-python","patch_set":2,"id":"72e2945c_ac723b45","line":1431,"updated":"2026-09-17 03:47:08.000000000","message":"The lock set is right. Do not add the volume key only when hosts is\nempty: a force detach that already has some attached_host values\nwould miss a concurrent initialize_connection that has not recorded\na host (including multiattach to a second host).\n\nParent 1005164 (this change\u0027s parent) used\npure-\u003carray_id\u003e-\u003cvolume.id\u003e when hosts was empty, and\ninitialize_connection did not take a volume key at all. Attach\n(attaching\u003dTrue) and connector\u003dNone now both use pure-\u003cvolume.id\u003e\nwith no array id, so they intersect even when\n_connection_lock_arrays returns more than one array. Keep the two\nchanges stacked.","commit_id":"a48d80f29d43de54b05070ac29ff5c084922b814"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"6de0cb2d340b99d75d9697742b08ea030a8c3353","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"                 for array in arrays"},{"line_number":1429,"context_line":"                 for host in hosts}"},{"line_number":1430,"context_line":"        if attaching or not connector:"},{"line_number":1431,"context_line":"            names.add(\u0027pure-%s\u0027 % volume.id)"},{"line_number":1432,"context_line":""},{"line_number":1433,"context_line":"        # Sorted so that concurrent operations spanning several names always"},{"line_number":1434,"context_line":"        # acquire the locks in the same order and cannot deadlock."}],"source_content_type":"text/x-python","patch_set":2,"id":"59c63e8f_ae15591d","line":1431,"in_reply_to":"72e2945c_ac723b45","updated":"2026-09-17 12:51:08.000000000","message":"On the volume key — agreed, and that is what the patch does. It is added whenever ``attaching`` is true or the connector is None, not only when ``hosts`` is empty, so a force detach that already has some ``attached_host`` values still takes it and still excludes an ``initialize_connection`` that has not recorded a host yet, multiattach to a second host included. It is deliberately unqualified by array id so that attach and force detach intersect however many arrays ``_connection_lock_arrays`` returns. ``test_connection_lock_names_blind_force_detach_excludes_attach`` pins exactly that. The two changes remain stacked.\n\nYour comment on the parent was a real correction and I have acted on it here. Base ``terminate_connection`` and the FC one both resolve the serving array with ``_get_current_array(volume\u003dvolume)``, the same as ``initialize_connection``, so no connection path uses ``self._array`` directly. ``_connection_lock_arrays`` no longer includes it — one fewer lock on a volume a group failover has moved, and the docstring no longer claims something untrue. I made that change in this change rather than the parent so 1005164 keeps its existing review.","commit_id":"a48d80f29d43de54b05070ac29ff5c084922b814"}]}
