)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35467,"name":"Luan Utimura","display_name":"Luan Utimura","email":"luan.utimura@luizalabs.com","username":"lutimura"},"change_message_id":"09f2fd6590a9b0e7debe724f0557f5200d2906db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"48a392c2_c76d6f71","updated":"2025-11-21 13:42:27.000000000","message":"Just sharing my two cents here:\n\nIn the past, I tried the LINSTOR driver with OpenStack Yoga. Not the one provided by [LINBIT](https://github.com/LINBIT/openstack-cinder/blob/linstor/master/cinder/volume/drivers/linstordrv.py), but the one that comes with Cinder, i.e. _the one this change intends to refactor._ From my experience, the driver seemed to be completely broken with the latest version of LINSTOR; Of course, this behavior could be attributed to the fact that I was using an older version of OpenStack — apparently, I was 3 commits behind master.\n\nIn the end, I resorted to the driver version linked above, which I believe is the same version being proposed here, and it worked. Given the current state of things, this change seems like a good contribution.","commit_id":"49b77cbadd8b9aeee0906c14544abbd2783c07af"},{"author":{"_account_id":35467,"name":"Luan Utimura","display_name":"Luan Utimura","email":"luan.utimura@luizalabs.com","username":"lutimura"},"change_message_id":"48870790f7704d2d2aa3ae0533fa81c5ba48617e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9c512c7d_cd5a9a6c","in_reply_to":"48a392c2_c76d6f71","updated":"2025-11-27 18:28:43.000000000","message":"I do think, though, that this change should come with release notes explaining which features currently don’t work as intended, which ones only work partially, and which ones are being added as part of this refactoring — something along those lines. Once that’s in place, I’m happy to update my +1. In any case, good work.","commit_id":"49b77cbadd8b9aeee0906c14544abbd2783c07af"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"ccdd41525678e4c17893b22d33f7935b8f05580a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ca2ea8e6_9c12fbe2","in_reply_to":"9c512c7d_cd5a9a6c","updated":"2026-02-19 12:11:15.000000000","message":"Thanks for the review. I think I have addressed your review.","commit_id":"49b77cbadd8b9aeee0906c14544abbd2783c07af"},{"author":{"_account_id":35467,"name":"Luan Utimura","display_name":"Luan Utimura","email":"luan.utimura@luizalabs.com","username":"lutimura"},"change_message_id":"a42e9d6abd3687189d85a7ba2cddc52d91766256","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"752d2403_a812154b","in_reply_to":"ca2ea8e6_9c12fbe2","updated":"2026-04-02 16:41:27.000000000","message":"Done","commit_id":"49b77cbadd8b9aeee0906c14544abbd2783c07af"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"04f0cf598bd95ebc2b97b93470700e9faee03c4c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5b9c093c_0f44ca8f","updated":"2026-06-05 14:47:34.000000000","message":"I\u0027m not seeing any CI reporting, can you confirm?","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":35467,"name":"Luan Utimura","display_name":"Luan Utimura","email":"luan.utimura@luizalabs.com","username":"lutimura"},"change_message_id":"a42e9d6abd3687189d85a7ba2cddc52d91766256","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b3703372_920e2e78","updated":"2026-04-02 16:41:27.000000000","message":"Thanks for addressing it! Looks good to me.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"80035e300be347b1cf2847023d8e9656d824036d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8d0fb8a2_27dbf78e","updated":"2026-02-23 09:34:41.000000000","message":"recheck subunit2html failed with import errors unrelated to this change","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"c2d277eb423ac025a6195a2f68a3a560241dd53f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"de587c04_f6355210","updated":"2026-02-23 14:15:16.000000000","message":"this test failed in our lightbits-ci:\nempest.api.volume.admin.test_groups.GroupsV314Test.test_create_group_from_group [312.567097s] ... FAILED\n\nmaybe its a transient issue","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"4cf7cbca5fca499bac332966018755a2893d67ef","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bbd47ab7_3724a094","in_reply_to":"5b9c093c_0f44ca8f","updated":"2026-08-26 08:56:24.000000000","message":"Yes. Sorry for the delay.\n\nIt seems our CI set up has been gone for a long time :-/ The previous maintainer is no longer at our company.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"f876f17d6ec25eb5ca82e3af38cd6ac6714d580a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a7792fca_1e7ae2b0","in_reply_to":"bbd47ab7_3724a094","updated":"2026-10-08 14:56:35.000000000","message":"So, managed to get CI setup working. And it even reports success. Logs should be publically available 😀","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"325360fd7f83ff7659904e0b166c29bf55e4551c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"fea1cfb8_73066f47","updated":"2026-10-09 06:50:41.000000000","message":"recheck tempest-slow-py3 retype-attached mount failure and lvm-lio-barbican encrypted transfer, both seen on unrelated changes","commit_id":"31acb6615f7d3762fd3a196934a9a5b8473ba5a7"}],"cinder/volume/drivers/linstordrv.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"59343539c2741d0710312474fecbf01082a4bbee","unresolved":true,"context_lines":[{"line_number":611,"context_line":"            # delete it as well"},{"line_number":612,"context_line":"            rsc.snapshot_delete(\u0027SN_\u0027 + snapshot[\u0027id\u0027])"},{"line_number":613,"context_line":"        except linstor.LinstorError:"},{"line_number":614,"context_line":"            raise exception.SnapshotIsBusy(\u0027SN_\u0027 + snapshot[\u0027id\u0027])"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"    @wrap_linstor_api_exception"},{"line_number":617,"context_line":"    @volume_utils.trace"}],"source_content_type":"text/x-python","patch_set":3,"id":"91c2dbe1_a727c530","line":614,"updated":"2026-09-02 15:23:42.000000000","message":"hear two delete calls are issued after a successful delete of snapshot[\u0027name\u0027] (snapshot-\u003cuuid\u003e), the driver always deletes SN_\u003cid\u003e. Real python-linstor Resource.snapshot_delete() raises LinstorError if the snapshot does not exist (resource.py). That is converted to SnapshotIsBusy, so Cinder leaves the snapshot in error_deleting.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"b44300f587a005bd6157cc28d4c1c98f25ce8e29","unresolved":false,"context_lines":[{"line_number":611,"context_line":"            # delete it as well"},{"line_number":612,"context_line":"            rsc.snapshot_delete(\u0027SN_\u0027 + snapshot[\u0027id\u0027])"},{"line_number":613,"context_line":"        except linstor.LinstorError:"},{"line_number":614,"context_line":"            raise exception.SnapshotIsBusy(\u0027SN_\u0027 + snapshot[\u0027id\u0027])"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"    @wrap_linstor_api_exception"},{"line_number":617,"context_line":"    @volume_utils.trace"}],"source_content_type":"text/x-python","patch_set":3,"id":"059f29de_84e79d4d","line":614,"in_reply_to":"91c2dbe1_a727c530","updated":"2026-09-04 07:56:00.000000000","message":"It should not raise, as LINSTOR only returns WARN_NOT_FOUND, so there should not have been stuck snapshots. However, I\u0027ve replaced this now with an existence check.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"59343539c2741d0710312474fecbf01082a4bbee","unresolved":true,"context_lines":[{"line_number":692,"context_line":"            volume.snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":693,"context_line":"            volume.save()"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            return self.create_volume_from_snapshot(volume, snapshot)"},{"line_number":696,"context_line":"        else:"},{"line_number":697,"context_line":"            rsc \u003d _get_existing_resource("},{"line_number":698,"context_line":"                self.c.get(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"34802f82_741ca176","line":695,"updated":"2026-09-02 15:23:42.000000000","message":"Drivers must not call objects.Snapshot.create() / volume.save(). The v1 driver used a backend-only temp snapshot (create / clone / delete) with no DB rows. This path:\n\nBypasses snapshot quota\nLeaves the snapshot in creating (status \u003d AVAILABLE is never saved)\nNever deletes the Cinder snapshot or the LINSTOR snapshot\nRewrites source_volid → snapshot_id under the manager’s clone flow\nUses private volume._context\nIf this option is kept, follow v1: temp LINSTOR snapshot only, delete in finally. Do not persist Cinder snapshots.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"b44300f587a005bd6157cc28d4c1c98f25ce8e29","unresolved":false,"context_lines":[{"line_number":692,"context_line":"            volume.snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":693,"context_line":"            volume.save()"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            return self.create_volume_from_snapshot(volume, snapshot)"},{"line_number":696,"context_line":"        else:"},{"line_number":697,"context_line":"            rsc \u003d _get_existing_resource("},{"line_number":698,"context_line":"                self.c.get(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"93ea7784_84f434a6","line":695,"in_reply_to":"34802f82_741ca176","updated":"2026-09-04 07:56:00.000000000","message":"Removed this whole feature. It was a change motivated in a time when LINSTOR did not deal with ZFS dependent clones. It does not, so simple cloning is fine now.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"59343539c2741d0710312474fecbf01082a4bbee","unresolved":true,"context_lines":[{"line_number":966,"context_line":"                return True"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        self.target_driver.terminate_connection(volume, connector, **kwargs)"},{"line_number":969,"context_line":"        return len(attachments) \u003e 1"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"@interface.volumedriver"}],"source_content_type":"text/x-python","patch_set":3,"id":"5dbc7d39_b0760a0a","line":969,"updated":"2026-09-02 15:23:42.000000000","message":"iSCSI sets multiattach: not self._use_direct_connection() → True. Force detach passes connector\u003dNone. connector[\u0027initiator\u0027] raises TypeError. Admin force-detach cannot recover a stuck volume.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"},{"author":{"_account_id":33067,"name":"Moritz Tanner","email":"moritz.wanzenboeck@linbit.com","username":"wanzenbug"},"change_message_id":"b44300f587a005bd6157cc28d4c1c98f25ce8e29","unresolved":false,"context_lines":[{"line_number":966,"context_line":"                return True"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        self.target_driver.terminate_connection(volume, connector, **kwargs)"},{"line_number":969,"context_line":"        return len(attachments) \u003e 1"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"@interface.volumedriver"}],"source_content_type":"text/x-python","patch_set":3,"id":"db7f6cbe_5f51b035","line":969,"in_reply_to":"5dbc7d39_b0760a0a","updated":"2026-09-04 07:56:00.000000000","message":"You are right. Fixed now, we call terminate_connection unconditionally in this case.","commit_id":"3c36dae62bee66eff93ed30f774b035fa7bea607"}]}
