)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"0de1c11c675e091a697a3708f9c9e053a9762815","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"be60f4ec_3e39505e","updated":"2026-03-30 08:04:06.000000000","message":"Receiving the following error on patch 938771:\nremote: ERROR: Change 938771 may not exceed 1000 updates. It may still be abandoned, submitted and you can add/remove reviewers to/from the attention-set. To continue working on this change, recreate it with a new Change-Id, then abandon this one.\n\nHence created this new patch 982617 in continuation.\n\n\nAbandoning the old one: 938771: [IBM SVf Driver] Added support of clone operation for volumegroup | https://review.opendev.org/c/openstack/cinder/+/938771\n\n@silvan@quobyte.com Could you please put your comment from the previous patch to this one?","commit_id":"e09e5d2846c6914e09a433dc8048b2c3c737b275"},{"author":{"_account_id":37328,"name":"Nimesh Desai","display_name":"Nimesh Desai","email":"nimesh.desai@ibm.com","username":"nimeshdesai"},"change_message_id":"1dcd26e2d049063d1037ee7b9807193776a932ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"cbc58c24_cc6ad262","updated":"2026-05-05 11:39:10.000000000","message":"The patch has been updated with following changes:\nReverted decorator approach\nError handling\nMock tests addition","commit_id":"7964a557894f31d8c95817c0e3e34ad05409ee43"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"d52c4c12b79b29f1b0d5262b8827e5263fece101","unresolved":true,"context_lines":[{"line_number":1030,"context_line":"            # Save the original name and assign the getter method for \u0027name\u0027"},{"line_number":1031,"context_line":"            volume._original_name \u003d original_name  # Save the original name"},{"line_number":1032,"context_line":"            volume._get_name \u003d get_name"},{"line_number":1033,"context_line":"            volume.__class__.name \u003d property(get_name)"},{"line_number":1034,"context_line":""},{"line_number":1035,"context_line":"    def volume_name_decorator(arg_name):"},{"line_number":1036,"context_line":"        \"\"\"Decorator factory to wrap a specific argument containing"}],"source_content_type":"text/x-python","patch_set":5,"id":"9304cd64_e7685dea","line":1033,"updated":"2026-04-07 10:04:55.000000000","message":"replaces the name property on the Volume class itself — not just on the single instance. Since volume.__class__ is cinder.objects.volume.Volume, this overwrites the name property for every Volume OVO instance in the entire process, not just the one being decorated.","commit_id":"c96e1b49a76a1e61d307a23ab9cd9117225e483d"},{"author":{"_account_id":37328,"name":"Nimesh Desai","display_name":"Nimesh Desai","email":"nimesh.desai@ibm.com","username":"nimeshdesai"},"change_message_id":"1dcd26e2d049063d1037ee7b9807193776a932ad","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"            # Save the original name and assign the getter method for \u0027name\u0027"},{"line_number":1031,"context_line":"            volume._original_name \u003d original_name  # Save the original name"},{"line_number":1032,"context_line":"            volume._get_name \u003d get_name"},{"line_number":1033,"context_line":"            volume.__class__.name \u003d property(get_name)"},{"line_number":1034,"context_line":""},{"line_number":1035,"context_line":"    def volume_name_decorator(arg_name):"},{"line_number":1036,"context_line":"        \"\"\"Decorator factory to wrap a specific argument containing"}],"source_content_type":"text/x-python","patch_set":5,"id":"9c94e018_0c7fe2ff","line":1033,"in_reply_to":"9304cd64_e7685dea","updated":"2026-05-05 11:39:10.000000000","message":"Done","commit_id":"c96e1b49a76a1e61d307a23ab9cd9117225e483d"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"d52c4c12b79b29f1b0d5262b8827e5263fece101","unresolved":true,"context_lines":[{"line_number":1032,"context_line":"            volume._get_name \u003d get_name"},{"line_number":1033,"context_line":"            volume.__class__.name \u003d property(get_name)"},{"line_number":1034,"context_line":""},{"line_number":1035,"context_line":"    def volume_name_decorator(arg_name):"},{"line_number":1036,"context_line":"        \"\"\"Decorator factory to wrap a specific argument containing"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        volume objects."}],"source_content_type":"text/x-python","patch_set":5,"id":"7c9fb886_8d8c01dd","line":1035,"updated":"2026-04-07 10:04:55.000000000","message":"decorator never restores the original name property or _modified_name attributes after function execution. There is no finally block to undo the wrapping. If the decorated function raises an exception, the volume objects remain permanently modified.","commit_id":"c96e1b49a76a1e61d307a23ab9cd9117225e483d"},{"author":{"_account_id":37328,"name":"Nimesh Desai","display_name":"Nimesh Desai","email":"nimesh.desai@ibm.com","username":"nimeshdesai"},"change_message_id":"1dcd26e2d049063d1037ee7b9807193776a932ad","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            volume._get_name \u003d get_name"},{"line_number":1033,"context_line":"            volume.__class__.name \u003d property(get_name)"},{"line_number":1034,"context_line":""},{"line_number":1035,"context_line":"    def volume_name_decorator(arg_name):"},{"line_number":1036,"context_line":"        \"\"\"Decorator factory to wrap a specific argument containing"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"        volume objects."}],"source_content_type":"text/x-python","patch_set":5,"id":"13a9379d_0e69f7d4","line":1035,"in_reply_to":"7c9fb886_8d8c01dd","updated":"2026-05-05 11:39:10.000000000","message":"Done","commit_id":"c96e1b49a76a1e61d307a23ab9cd9117225e483d"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"d52c4c12b79b29f1b0d5262b8827e5263fece101","unresolved":true,"context_lines":[{"line_number":3334,"context_line":"        \"\"\"Check if volumegroup snapshot exists.\"\"\""},{"line_number":3335,"context_line":""},{"line_number":3336,"context_line":"        attrs \u003d self.ssh.lsvolumegroupsnapshot(params)"},{"line_number":3337,"context_line":"        return attrs[0] is not None"},{"line_number":3338,"context_line":""},{"line_number":3339,"context_line":"    def delete_volumegroup_snapshot(self, group_snapshot, snapshots,"},{"line_number":3340,"context_line":"                                    group_type):"}],"source_content_type":"text/x-python","patch_set":5,"id":"489902aa_9183c639","line":3337,"updated":"2026-04-07 10:04:55.000000000","message":"type error is possible length check is important before None check","commit_id":"c96e1b49a76a1e61d307a23ab9cd9117225e483d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"161e9bddec6738d3d5256c61a9f3a77c24946348","unresolved":true,"context_lines":[{"line_number":3334,"context_line":"        \"\"\"Check if volumegroup snapshot exists.\"\"\""},{"line_number":3335,"context_line":""},{"line_number":3336,"context_line":"        attrs \u003d self.ssh.lsvolumegroupsnapshot(params)"},{"line_number":3337,"context_line":"        return attrs[0] is not None"},{"line_number":3338,"context_line":""},{"line_number":3339,"context_line":"    def delete_volumegroup_snapshot(self, group_snapshot, snapshots,"},{"line_number":3340,"context_line":"                                    group_type):"}],"source_content_type":"text/x-python","patch_set":5,"id":"6d71203b_c52c0f04","line":3337,"in_reply_to":"489902aa_9183c639","updated":"2026-04-27 18:20:19.000000000","message":"I agree, I don\u0027t understand this change, since lsvolumegroupsnapshot() could return an empty list?","commit_id":"c96e1b49a76a1e61d307a23ab9cd9117225e483d"},{"author":{"_account_id":37328,"name":"Nimesh Desai","display_name":"Nimesh Desai","email":"nimesh.desai@ibm.com","username":"nimeshdesai"},"change_message_id":"1dcd26e2d049063d1037ee7b9807193776a932ad","unresolved":false,"context_lines":[{"line_number":3334,"context_line":"        \"\"\"Check if volumegroup snapshot exists.\"\"\""},{"line_number":3335,"context_line":""},{"line_number":3336,"context_line":"        attrs \u003d self.ssh.lsvolumegroupsnapshot(params)"},{"line_number":3337,"context_line":"        return attrs[0] is not None"},{"line_number":3338,"context_line":""},{"line_number":3339,"context_line":"    def delete_volumegroup_snapshot(self, group_snapshot, snapshots,"},{"line_number":3340,"context_line":"                                    group_type):"}],"source_content_type":"text/x-python","patch_set":5,"id":"8487628d_2470b630","line":3337,"in_reply_to":"6d71203b_c52c0f04","updated":"2026-05-05 11:39:10.000000000","message":"Done","commit_id":"c96e1b49a76a1e61d307a23ab9cd9117225e483d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b439d8504d422d206319ae5e54d609bcbe5bbf4e","unresolved":true,"context_lines":[{"line_number":572,"context_line":"        if volumegroup_snapshot_svc_id:"},{"line_number":573,"context_line":"            if clone_type:"},{"line_number":574,"context_line":"                ssh_cmd.extend([\u0027-type\u0027, clone_type, \u0027-fromsnapshotid\u0027,"},{"line_number":575,"context_line":"                                volumegroup_snapshot_svc_id])"},{"line_number":576,"context_line":"            else:"},{"line_number":577,"context_line":"                ssh_cmd.extend([\u0027-type\u0027, \u0027clone\u0027, \u0027-fromsnapshotid\u0027,"},{"line_number":578,"context_line":"                                volumegroup_snapshot_svc_id])"}],"source_content_type":"text/x-python","patch_set":12,"id":"353372c9_4819d391","line":575,"updated":"2026-05-05 21:02:46.000000000","message":"This new addition isn\u0027t covered by unit tests, any chance of adding a test for when \"clone_type\" is passed?\n\nhttps://d60a0b31f718833bb740-43320acd00026c27d441db253a37fde1.ssl.cf5.rackcdn.com/openstack/a263fc52ea454aa69f1f39717f5dcad8/cover/z_da174c6a0dd05faf_storwize_svc_common_py.html","commit_id":"7964a557894f31d8c95817c0e3e34ad05409ee43"},{"author":{"_account_id":37328,"name":"Nimesh Desai","display_name":"Nimesh Desai","email":"nimesh.desai@ibm.com","username":"nimeshdesai"},"change_message_id":"7cd3998f58d4b7465876799e47ad765aa19b7e0f","unresolved":false,"context_lines":[{"line_number":572,"context_line":"        if volumegroup_snapshot_svc_id:"},{"line_number":573,"context_line":"            if clone_type:"},{"line_number":574,"context_line":"                ssh_cmd.extend([\u0027-type\u0027, clone_type, \u0027-fromsnapshotid\u0027,"},{"line_number":575,"context_line":"                                volumegroup_snapshot_svc_id])"},{"line_number":576,"context_line":"            else:"},{"line_number":577,"context_line":"                ssh_cmd.extend([\u0027-type\u0027, \u0027clone\u0027, \u0027-fromsnapshotid\u0027,"},{"line_number":578,"context_line":"                                volumegroup_snapshot_svc_id])"}],"source_content_type":"text/x-python","patch_set":12,"id":"694bd4cf_a7af71e9","line":575,"in_reply_to":"353372c9_4819d391","updated":"2026-05-06 10:17:56.000000000","message":"Added UT for clone_type","commit_id":"7964a557894f31d8c95817c0e3e34ad05409ee43"}]}
