)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"8779b517190a28ebbd1cde3a001b7e2b25b559f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"339f21f6_312f8169","updated":"2026-03-12 19:02:45.000000000","message":"Local CI not working - tempest logs and results located here: https://github.com/Everpure-Zuul-CI/Common-CI/tree/main/cinder/973957","commit_id":"ee46aedf32e78c6988c973738235e077c8538a32"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e9e53449dccba5ea6c5d523ef71234b2c60c7c8d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f54a47b1_bd1dcea9","updated":"2026-06-06 04:34:54.000000000","message":"Code LGTM, has release notes/UT, but wanted one clarification.","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"e0b199cf2f3523e89644ccae131cdeb63179a6f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0434db1a_d1b8046f","updated":"2026-06-29 12:53:14.000000000","message":"LGTM, CI is passing.","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"99a3df9e08f26005302f84b19d2c5e227ed7e2d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7310af7e_0d076562","updated":"2026-06-28 03:59:28.000000000","message":"LGTM, CI now passing","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"4e4cb66145ffe84644cc00f82887e9b097a48f15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"cf6500e9_24091939","updated":"2026-06-25 23:53:42.000000000","message":"LGTM.  +2 when the CI is passing.","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"bf76fa3660f1ca63ed9d0a87eb4888ddc740bbde","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"2f2c2101_edfae8ef","updated":"2026-04-08 23:51:20.000000000","message":"recheck","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"ba7fe00718320c3013430d038dbeb53c418e5474","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3896dc67_2f70ec4f","updated":"2026-04-09 15:05:19.000000000","message":"recheck","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"37d9f69d0a8a86809269163ad60b411f5d723dc6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"08c559a5_647dc014","updated":"2026-06-27 15:24:12.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"afc63a73669d2a7d2f08973297ba0620d5e7d8f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1f9d8914_bf1091c6","updated":"2026-06-25 15:09:56.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"a5c02a462dd050ddf246ee4e65576cb628e85045","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"2c33cf35_b7c2f45e","updated":"2026-06-26 23:33:00.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"303b99033fdfc99f47c753114ffee16a5fdedcfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"57746f7c_9af45a67","updated":"2026-06-25 16:07:57.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"04ee2d9fc585c6ea1c00f21ca8cb7967ea28cf1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"60d124f5_12e20078","updated":"2026-06-25 19:14:51.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"7045276bbb951e1ac35514ff48321fec6af45a28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b7c88ac2_e3ef4ca3","updated":"2026-06-25 19:28:06.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"93e6565641c3af2b005c887b0f83e3e2fdcaa34a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"cf5e8a41_8c075913","updated":"2026-06-27 01:43:59.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"1df3a45f7cfef708a38cecd02003eaf59a7fe350","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e1ec02d2_09369c68","updated":"2026-06-25 14:13:57.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"e05a1f01473701e785d0ba43d581cca44d26d839","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f0b9344a_7a195752","updated":"2026-06-25 19:34:47.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"3bb96735c5e7f19e08d36ecf7038259e4380ae60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f163b818_89312817","updated":"2026-06-25 16:24:15.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"f96b01f6f0dc44da360cad98fca68e2c88485044","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f6a02819_a74f89bb","updated":"2026-06-25 16:02:14.000000000","message":"run Pure Storage CI","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"ae3782364a10aa109ea7795bfea706845e6fa779","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"10d56731_30265816","in_reply_to":"cf6500e9_24091939","updated":"2026-06-27 16:34:00.000000000","message":"CI now passing","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"}],"cinder/tests/unit/volume/drivers/test_pure.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e9e53449dccba5ea6c5d523ef71234b2c60c7c8d","unresolved":false,"context_lines":[{"line_number":5557,"context_line":"        with mock.patch.object(self.driver, \u0027_disconnect\u0027):"},{"line_number":5558,"context_line":"            self.driver.terminate_connection(vol, None)"},{"line_number":5559,"context_line":""},{"line_number":5560,"context_line":"    def test_iscsi_lock_key_format_is_host_based(self):"},{"line_number":5561,"context_line":"        # This is a documentation test - the actual lock format is:"},{"line_number":5562,"context_line":"        # \u0027pure-{connector[host]}\u0027 for normal operations"},{"line_number":5563,"context_line":"        # \u0027pure-{volume.id}\u0027 for force detach (connector\u003dNone)"}],"source_content_type":"text/x-python","patch_set":5,"id":"647e74f7_bc64fe9e","line":5560,"updated":"2026-06-06 04:34:54.000000000","message":"That\u0027s one way to get UT numbers up :-)","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"}],"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":"b139a850d4eeeda81897cb60a3f17f11bc9bd1aa","unresolved":true,"context_lines":[{"line_number":1358,"context_line":"                        # Swallow any exception, just warn and continue"},{"line_number":1359,"context_line":"                        LOG.warning(\"Disconnect on secondary array failed \""},{"line_number":1360,"context_line":"                                    \"with message: %(msg)s\","},{"line_number":1361,"context_line":"                                    {\"msg\": err.reason})"},{"line_number":1362,"context_line":"            # Now disconnect from the current array"},{"line_number":1363,"context_line":"            self._disconnect(self._get_current_array(), volume,"},{"line_number":1364,"context_line":"                             connector, remove_remote_hosts\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"e09742bb_cf74a279","line":1361,"updated":"2026-04-08 14:13:21.000000000","message":"err never defined in scope(i.e. Name eerror). Also no try/catch with err :-)","commit_id":"ee46aedf32e78c6988c973738235e077c8538a32"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"9aa3e1619c7b3c9ed1400594b25f0ae55093ab0b","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"                        # Swallow any exception, just warn and continue"},{"line_number":1359,"context_line":"                        LOG.warning(\"Disconnect on secondary array failed \""},{"line_number":1360,"context_line":"                                    \"with message: %(msg)s\","},{"line_number":1361,"context_line":"                                    {\"msg\": err.reason})"},{"line_number":1362,"context_line":"            # Now disconnect from the current array"},{"line_number":1363,"context_line":"            self._disconnect(self._get_current_array(), volume,"},{"line_number":1364,"context_line":"                             connector, remove_remote_hosts\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"0ae2dfe1_620b5137","line":1361,"in_reply_to":"e09742bb_cf74a279","updated":"2026-04-08 16:33:01.000000000","message":"Done","commit_id":"ee46aedf32e78c6988c973738235e077c8538a32"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e9e53449dccba5ea6c5d523ef71234b2c60c7c8d","unresolved":true,"context_lines":[{"line_number":1356,"context_line":"        \"\"\"Terminate connection.\"\"\""},{"line_number":1357,"context_line":"        # Use host-based locking when connector is provided, otherwise"},{"line_number":1358,"context_line":"        # use volume-based locking for force detach scenarios"},{"line_number":1359,"context_line":"        host \u003d connector[\u0027host\u0027] if connector else volume.id"},{"line_number":1360,"context_line":""},{"line_number":1361,"context_line":"        @coordination.synchronized(\u0027pure-{host}\u0027)"},{"line_number":1362,"context_line":"        def _do_terminate_connection(host):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff2ead01_dc9658fc","line":1359,"updated":"2026-06-06 04:34:54.000000000","message":"I\u0027m guessing cinder won\u0027t do a force detach while also trying to initialize a connection, but I want to make sure that there isn\u0027t a chance for these two to collide since when the connector is None, the lock will be different.","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"b9bb7d45ce43283bc2c91c02db383011df1c0faf","unresolved":false,"context_lines":[{"line_number":1356,"context_line":"        \"\"\"Terminate connection.\"\"\""},{"line_number":1357,"context_line":"        # Use host-based locking when connector is provided, otherwise"},{"line_number":1358,"context_line":"        # use volume-based locking for force detach scenarios"},{"line_number":1359,"context_line":"        host \u003d connector[\u0027host\u0027] if connector else volume.id"},{"line_number":1360,"context_line":""},{"line_number":1361,"context_line":"        @coordination.synchronized(\u0027pure-{host}\u0027)"},{"line_number":1362,"context_line":"        def _do_terminate_connection(host):"}],"source_content_type":"text/x-python","patch_set":5,"id":"4e55668f_343de49a","line":1359,"in_reply_to":"ff2ead01_dc9658fc","updated":"2026-06-25 14:13:27.000000000","message":"When connector is None (force detach) there\u0027s no host to key on, so it falls back to pure-{volume.id}, which is a different lock namespace than the pure-{host} lock used by initialize_connection and normal terminate_connection. So this patch does not serialize a force-detach against an in-flight initialize.\n\nThat\u0027s intentional: a force-detach has no connector and removes all host connections for the volume (_disconnect with connector\u003dNone), so a single per-host lock can\u0027t represent it. The race this bug targets is same-host LUN reuse (terminate frees a LUN on host X, initialize reuses it on host X before os-brick finishes) — both of those carry a connector and lock on pure-{host}, so that path is fully covered.","commit_id":"8202c94bcd63935cf3056e24160d199963e3377a"}]}
