)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b83cddfb591348114c44404e6f8d21a78593e514","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[Netapp] Add support for prune deleted volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If volume deletion fails, we rename it those and then periodic task"},{"line_number":10,"context_line":"running from ensure_shares will handle cleanup of those renamed volumes."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Consider the state of volume during pruning, e.g."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"8e96f545_877bc3d9","line":9,"range":{"start_line":9,"start_character":39,"end_line":9,"end_character":44},"updated":"2025-05-08 21:33:31.000000000","message":"drop unnecessary word","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"47f106643cfdbf632901162ccb5377ada61a97cd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[Netapp] Add support for prune deleted volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If volume deletion fails, we rename it those and then periodic task"},{"line_number":10,"context_line":"running from ensure_shares will handle cleanup of those renamed volumes."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Consider the state of volume during pruning, e.g."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"4b591424_0269c8bc","line":9,"range":{"start_line":9,"start_character":39,"end_line":9,"end_character":44},"in_reply_to":"8e96f545_877bc3d9","updated":"2025-05-09 16:58:09.000000000","message":"Done","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b83cddfb591348114c44404e6f8d21a78593e514","unresolved":true,"context_lines":[{"line_number":23,"context_line":"that were already in the recovery queue. Those should not be touched,"},{"line_number":24,"context_line":"they don\u0027t need to be brought back online to solve clone split situations."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"We don\u0027t care about the progess percentage. Instead use speaking states"},{"line_number":27,"context_line":"for better readability."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"We are now able to differ the error conditions for clone split:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"b154d369_aafd04b5","line":26,"range":{"start_line":26,"start_character":56,"end_line":26,"end_character":71},"updated":"2025-05-08 21:33:31.000000000","message":"what are \"speaking states\"?","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"47f106643cfdbf632901162ccb5377ada61a97cd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"that were already in the recovery queue. Those should not be touched,"},{"line_number":24,"context_line":"they don\u0027t need to be brought back online to solve clone split situations."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"We don\u0027t care about the progess percentage. Instead use speaking states"},{"line_number":27,"context_line":"for better readability."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"We are now able to differ the error conditions for clone split:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9daf4fb4_497125d6","line":26,"range":{"start_line":26,"start_character":56,"end_line":26,"end_character":71},"in_reply_to":"b154d369_aafd04b5","updated":"2025-05-09 16:58:09.000000000","message":"Instead of percentage, we return \u0027unknown\u0027/\u0027finished\u0027 etc.","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"1fc670d5fab21e1971ce65cfaa78e4bcc889f669","unresolved":true,"context_lines":[{"line_number":19,"context_line":"offline volume without child clones will then successfully finish"},{"line_number":20,"context_line":"volume-destroy request."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The prune deleted volumes is operating on deleted volumes (type DEL)"},{"line_number":23,"context_line":"that were already in the recovery queue. Those should not be touched,"},{"line_number":24,"context_line":"they don\u0027t need to be brought back online to solve clone split situations."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"37b66e71_e08b3783","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":38},"updated":"2026-01-12 08:08:23.000000000","message":"is *not* operating","commit_id":"1984b057a283f82737a8cef14450dba3685477f8"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"b3276bfbfbf0488face4cca287f2c70b840c6c02","unresolved":false,"context_lines":[{"line_number":19,"context_line":"offline volume without child clones will then successfully finish"},{"line_number":20,"context_line":"volume-destroy request."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The prune deleted volumes is operating on deleted volumes (type DEL)"},{"line_number":23,"context_line":"that were already in the recovery queue. Those should not be touched,"},{"line_number":24,"context_line":"they don\u0027t need to be brought back online to solve clone split situations."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3ad4273f_04580fc1","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":38},"in_reply_to":"37b66e71_e08b3783","updated":"2026-01-12 14:37:20.000000000","message":"Done","commit_id":"1984b057a283f82737a8cef14450dba3685477f8"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"32f630e655bb0ce0f960143cb881f822a79a25d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"19ed202c_a7d1f766","updated":"2024-11-11 17:01:50.000000000","message":"Gireesh/Jay,\nLet me know you thoughts on this. I will then add tests in further iteration.","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c7d18c1e_8e44f1a9","updated":"2024-12-03 10:38:37.000000000","message":"Thanks kiran for working on this. I have added a few comments for your review. Please take a look.","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"73664f4da6d680ad5e0c612edd221ba6174ee1bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"156253d3_3b45f536","in_reply_to":"19ed202c_a7d1f766","updated":"2024-12-03 10:40:17.000000000","message":"Also add the release notes","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7bfe5bbc2c83392eef7086125b9b6fca1646ea7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2b161cf0_ed8e3d95","updated":"2024-12-12 13:26:27.000000000","message":"Moved prune deletion function to lib_base and added respective calls to cmode/cmode_rest. \n\nGireesh,\ncan you please check and comment so that I will add more tests in new patchset ?","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"809f00418717482cb7b8b997aec5f0945232a999","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2d67ee68_01985524","updated":"2024-12-12 15:44:18.000000000","message":"Thanks kiran for incorporating the review comments. I have few more comments here.","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d7fdd42ddfbda76b27fb3b2bb636b205cf5cbae1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9a34cca6_760c5750","updated":"2024-12-13 15:25:30.000000000","message":"Thanks kiran for incorporating the all review comments. Changes looks fine for me.","commit_id":"e760a65b24d119fae6381e843489133f1ead21ac"},{"author":{"_account_id":33038,"name":"Chuan Miao","email":"chuan137@gmail.com","username":"chuan137"},"change_message_id":"fab40d74a850410798030c6123a5a7e5369210b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"56ea901b_19c3eb3f","updated":"2024-12-18 09:56:55.000000000","message":"LGTM","commit_id":"a486c4a10e3f98f9d6991c9db0ad7ca17586b5ed"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cf82404bb2f74131faa260a52c27b6dbfc323bf7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c55c886b_0c76e5da","updated":"2025-02-24 11:15:58.000000000","message":"Thanks kiran to re-working on this, I have few comments along with this please add the release note and unit tests for this.","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"d96ecdb5d3af1f349b31e5974cce758f3cac4f81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9119d1f1_2e541cf3","updated":"2025-01-31 15:08:25.000000000","message":"Updated prune_deleted_volumes (which is earlier reviewed) to consider updated volume_clone_split_status() which now returns state instead of percentage.","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"c0dab88b08075be1e664587a7bafa58c066330de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e9b32aa5_0cdee044","updated":"2025-02-03 11:07:09.000000000","message":"recheck","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"124f01ace394d53ff43c851ae6bf74bc1c6fe1c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ec02341e_af6a7bc9","updated":"2025-02-13 15:02:41.000000000","message":"recheck","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"6c1ef0d8c34b05c720a611b5293b525f70759700","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f2f3bc66_75bb510a","in_reply_to":"c55c886b_0c76e5da","updated":"2025-02-24 17:37:51.000000000","message":"release-notes are already added. More tests added","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"0f6e2f9be308a0e581483777b1e4f27a6127f563","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5bb8ff15_530115d5","updated":"2025-03-11 09:36:21.000000000","message":"Please have a look at the inline comments.","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"e84f46d3169724f1c6f199b8f11d52d4da92cbd6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c4ebb056_8ba956d8","updated":"2025-02-26 14:10:24.000000000","message":"Thanks kiran for incorporating the review comments, change looks good for me.","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"70b13a21ec0bbb2e2f7477ab1bf244e13b0f6593","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a124179d_df63a695","updated":"2025-04-24 11:53:09.000000000","message":"I have already reviewed this.","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2955246145881eca1aeecce51ed906e8c92939b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"f3f06561_096bdece","updated":"2025-05-09 17:08:40.000000000","message":"Thanks for the changes, still disagree with the REST implementation... lets wait for Gireesh/NetApp maintainers to comment here","commit_id":"c5d653c454ae23e75e18f86cb924f13efdc16110"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"2aeb2cd39b2166bbbfdf238d0cd9e97cfc69bb9f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0196c02e_1738b11f","updated":"2025-05-14 11:04:31.000000000","message":"recheck","commit_id":"c5d653c454ae23e75e18f86cb924f13efdc16110"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"823dcc1a55b1f7cb792f01993135f3a265cf87c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f94a8742_99f73ace","updated":"2025-05-29 09:58:50.000000000","message":"recheck","commit_id":"ed4529f0e9ef64a0e4dbed807fa9714c4bc14eb4"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"00b2662a585dadd4d3e41ed71d8ee58d6b8a9f9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"c95047a7_30f0ee0b","updated":"2025-06-02 15:15:49.000000000","message":"Thanks kiran for working on this patch, LGTM ..!","commit_id":"0e98d894b7a7a68fe0f2f45e96cec2c2a4a494f2"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"55faee207ba79f04433510db07ef392f0a937c98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"1997a494_f5baf72f","updated":"2025-09-11 17:45:53.000000000","message":"I reorged the code the way exist in our downstream repo. The cmode is exact as it is. While cmode_rest is updated to delete irrespective of online or offline.","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"cf828a92b63a3ba603efe49e87fb2f52395938df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2d8aac1d_fb1d5b80","updated":"2025-09-10 21:33:41.000000000","message":"I\u0027ve a concern noted inline. I think we can discuss it, i don\u0027t want to block this if NetApp folks don\u0027t see any problems","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"63c8288d32bbf7838e97094a4925efcedacdf822","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"6493da3c_43ee4680","updated":"2025-09-11 16:07:19.000000000","message":"Looks good except the below comments. They are not blocking in any sense but good to fix if we have a follow up patch.","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"99e91182dad4fa4966eb626b8b5274f0d88f58b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"831b6f28_197a114e","updated":"2025-09-11 17:34:59.000000000","message":"Thanks for the +1 @anoop.shukla@netapp.com; @gawasthi2010@gmail.com +2\u0027ed a prior patch. Getting this in in the interest of time so it can be a part of Flamingo RC1\n\n@kinpaa@gmail.com: please address Anoop\u0027s comments in a follow up","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"518abe003f42548d997020bf8cd3443d5e16c668","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"0f59220e_322ab5b5","updated":"2025-09-17 03:43:22.000000000","message":"Hi Kiran,\n\nMultiple places Generic exception is present. Is it possible to handle specific exceptions based on workflow. This will help in multiple ways.Identify specific issue and context for User perspective.\n\nThank you!\nJayaanand.","commit_id":"043adf4cbabea0316cc21ab9fd28173aeed1feda"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"41ab5129462c04bee75b2ac4d84b976962322f9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"8a6570d3_9a37f558","updated":"2025-09-13 04:58:47.000000000","message":"I have asked netapp to keep this change in their CI for 2 weeks and observe for REST errors if any. We can wait till then.","commit_id":"043adf4cbabea0316cc21ab9fd28173aeed1feda"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"a085a66342ecc82528b0df5a1efdf3e3b70f7c3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"0e3b16a2_ae84b2da","updated":"2025-09-12 20:14:56.000000000","message":"LGTM, thank you!","commit_id":"043adf4cbabea0316cc21ab9fd28173aeed1feda"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"5cc192c91a83e67ad203424e1612b3e024723bbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"748bc871_1f9d1756","updated":"2025-12-01 10:54:52.000000000","message":"Rebasing to run on NetApp CI.","commit_id":"043adf4cbabea0316cc21ab9fd28173aeed1feda"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fb132e47caa087cd2b19bc2cf98b240f3653fa52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"94b9c63c_dbb7e22d","updated":"2026-01-09 08:56:19.000000000","message":"Please take a look at the comments.","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"d1dfda882c0f9829d89102742b4edc6a29793c02","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"2e4259f6_f838f208","updated":"2025-12-16 10:08:03.000000000","message":"run-NetApp CI","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"1fc670d5fab21e1971ce65cfaa78e4bcc889f669","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ad10520a_ccf4d7f5","updated":"2026-01-12 08:08:23.000000000","message":"Hi Kiran, thanks for bringing this to the community. The logic looks good to me.","commit_id":"1984b057a283f82737a8cef14450dba3685477f8"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"b3276bfbfbf0488face4cca287f2c70b840c6c02","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"2d291a77_41cb54da","updated":"2026-01-12 14:37:20.000000000","message":"Thanks for giving final review @Maurice since our downstream code is changed significantly w.r.t this PR after reviews from Netapp.","commit_id":"1984b057a283f82737a8cef14450dba3685477f8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2f4cd44aa92102b6344b4b2fee6baecc65ac43dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"37209a80_43439871","updated":"2026-01-12 21:52:16.000000000","message":"A few questions inline, pertaining to your recent changes","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"e608c129f96756737b324323af95371208eb27e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"f975f8b2_bfa06178","updated":"2026-01-14 09:54:17.000000000","message":"LGTM. Thanks for working on this bug.","commit_id":"ae3428b18031c76fb41c30b5f527cdf1ad432381"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f8d348d1db83fd88498eb4a1c951da671befd2bf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"118f1d32_4275f29c","updated":"2026-01-15 14:51:34.000000000","message":"Thanks kiran for working on this, changes looks good to me","commit_id":"ae3428b18031c76fb41c30b5f527cdf1ad432381"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e128ab102018622a0c3dbc7af8112c85fc8ea563","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"c90835e5_cbdb8914","updated":"2026-01-13 19:38:46.000000000","message":"Thanks, LGTM. Lets have some NetApp folks reviewing as well.","commit_id":"ae3428b18031c76fb41c30b5f527cdf1ad432381"}],"manila/share/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":3433,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":3434,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLUMEONLINE:"},{"line_number":3435,"context_line":"                return"},{"line_number":3436,"context_line":"            raise"},{"line_number":3437,"context_line":""},{"line_number":3438,"context_line":"    @na_utils.trace"},{"line_number":3439,"context_line":"    def offline_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7803b509_fb9cebe4","line":3436,"range":{"start_line":3436,"start_character":12,"end_line":3436,"end_character":17},"updated":"2024-12-03 10:38:37.000000000","message":"Change it to \nraise exception.NetAppException(message\u003de.message)","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":3433,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":3434,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLUMEONLINE:"},{"line_number":3435,"context_line":"                return"},{"line_number":3436,"context_line":"            raise"},{"line_number":3437,"context_line":""},{"line_number":3438,"context_line":"    @na_utils.trace"},{"line_number":3439,"context_line":"    def offline_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"d6eaee88_b2583a4f","line":3436,"range":{"start_line":3436,"start_character":12,"end_line":3436,"end_character":17},"updated":"2024-12-03 10:38:37.000000000","message":"change it to \nraise exception.NetAppException(message\u003de.message)","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":3433,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":3434,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLUMEONLINE:"},{"line_number":3435,"context_line":"                return"},{"line_number":3436,"context_line":"            raise"},{"line_number":3437,"context_line":""},{"line_number":3438,"context_line":"    @na_utils.trace"},{"line_number":3439,"context_line":"    def offline_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"582c15f3_74e03e59","line":3436,"range":{"start_line":3436,"start_character":12,"end_line":3436,"end_character":17},"in_reply_to":"7803b509_fb9cebe4","updated":"2024-12-03 14:50:01.000000000","message":"Done","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":3433,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":3434,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLUMEONLINE:"},{"line_number":3435,"context_line":"                return"},{"line_number":3436,"context_line":"            raise"},{"line_number":3437,"context_line":""},{"line_number":3438,"context_line":"    @na_utils.trace"},{"line_number":3439,"context_line":"    def offline_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"91ec6a24_6684cf85","line":3436,"range":{"start_line":3436,"start_character":12,"end_line":3436,"end_character":17},"in_reply_to":"d6eaee88_b2583a4f","updated":"2024-12-03 14:50:01.000000000","message":"Done","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":3509,"context_line":"        self.send_request(\u0027volume-rename\u0027, api_args)"},{"line_number":3510,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":3511,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":3512,"context_line":"        LOG.info(msg, msg_args)"},{"line_number":3513,"context_line":""},{"line_number":3514,"context_line":"    @na_utils.trace"},{"line_number":3515,"context_line":"    def soft_delete_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b534f0a_0700596b","line":3512,"range":{"start_line":3512,"start_character":12,"end_line":3512,"end_character":16},"updated":"2024-12-03 10:38:37.000000000","message":"please change it to debug","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":3509,"context_line":"        self.send_request(\u0027volume-rename\u0027, api_args)"},{"line_number":3510,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":3511,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":3512,"context_line":"        LOG.info(msg, msg_args)"},{"line_number":3513,"context_line":""},{"line_number":3514,"context_line":"    @na_utils.trace"},{"line_number":3515,"context_line":"    def soft_delete_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2153d022_38e6f1ab","line":3512,"range":{"start_line":3512,"start_character":12,"end_line":3512,"end_character":16},"in_reply_to":"5b534f0a_0700596b","updated":"2024-12-03 14:50:01.000000000","message":"Done","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":3517,"context_line":"        try:"},{"line_number":3518,"context_line":"            self.send_request(\u0027volume-destroy\u0027, {\u0027name\u0027: volume_name})"},{"line_number":3519,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":3520,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLDEL_NOT_ALLOW_BY_CLONE:"},{"line_number":3521,"context_line":"                LOG.warning(\u0027Delete volume %s failed\u0027, volume_name)"},{"line_number":3522,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":3523,"context_line":""},{"line_number":3524,"context_line":"    @na_utils.trace"},{"line_number":3525,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":3526,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"f3ca8436_1e290cbe","line":3523,"range":{"start_line":3520,"start_character":12,"end_line":3523,"end_character":0},"updated":"2024-12-03 10:38:37.000000000","message":"return within e.code \u003d\u003d netapp_api.EVOLDEL_NOT_ALLOW_BY_CLONE condition and raised the exception in case soft delete is failed due to some other reason.","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":3517,"context_line":"        try:"},{"line_number":3518,"context_line":"            self.send_request(\u0027volume-destroy\u0027, {\u0027name\u0027: volume_name})"},{"line_number":3519,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":3520,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLDEL_NOT_ALLOW_BY_CLONE:"},{"line_number":3521,"context_line":"                LOG.warning(\u0027Delete volume %s failed\u0027, volume_name)"},{"line_number":3522,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":3523,"context_line":""},{"line_number":3524,"context_line":"    @na_utils.trace"},{"line_number":3525,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":3526,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"034e06a9_d2acb3ce","line":3523,"range":{"start_line":3520,"start_character":12,"end_line":3523,"end_character":0},"in_reply_to":"f3ca8436_1e290cbe","updated":"2024-12-03 14:50:01.000000000","message":"Done","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":3522,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":3523,"context_line":""},{"line_number":3524,"context_line":"    @na_utils.trace"},{"line_number":3525,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":3526,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":3527,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":3528,"context_line":"        api_args \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"f6a5670d_21cf94c2","line":3525,"range":{"start_line":3525,"start_character":4,"end_line":3525,"end_character":36},"updated":"2024-12-03 10:38:37.000000000","message":"Can you move this method to lib_base and replace this method with get_all_deleted_volumes() ..etc.","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7bfe5bbc2c83392eef7086125b9b6fca1646ea7a","unresolved":false,"context_lines":[{"line_number":3522,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":3523,"context_line":""},{"line_number":3524,"context_line":"    @na_utils.trace"},{"line_number":3525,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":3526,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":3527,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":3528,"context_line":"        api_args \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"4239eee3_9d93d277","line":3525,"range":{"start_line":3525,"start_character":4,"end_line":3525,"end_character":36},"in_reply_to":"854a2582_613092fb","updated":"2024-12-12 13:26:27.000000000","message":"Done","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"15fbc1e510c04bb0ac88e53121f433182811386b","unresolved":true,"context_lines":[{"line_number":3522,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":3523,"context_line":""},{"line_number":3524,"context_line":"    @na_utils.trace"},{"line_number":3525,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":3526,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":3527,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":3528,"context_line":"        api_args \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"854a2582_613092fb","line":3525,"range":{"start_line":3525,"start_character":4,"end_line":3525,"end_character":36},"in_reply_to":"b4f5435b_3285ce28","updated":"2024-12-04 08:44:39.000000000","message":"So in cmode lib you can have get_all_deleted_volumes method to get the all deleted volumes. this should be present on both ZAPI and REST.\nIn lib_base you can have prune_deleted_volumes() method, this will call to get_all_deleted_volumes(), method to get the all volume set with prefix DELETED_PREFIX, it can call either ZAPI or REST. Once you get the all the volume you will have the common logic for prune deleted volume.","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":true,"context_lines":[{"line_number":3522,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":3523,"context_line":""},{"line_number":3524,"context_line":"    @na_utils.trace"},{"line_number":3525,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":3526,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":3527,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":3528,"context_line":"        api_args \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"b4f5435b_3285ce28","line":3525,"range":{"start_line":3525,"start_character":4,"end_line":3525,"end_character":36},"in_reply_to":"f6a5670d_21cf94c2","updated":"2024-12-03 14:50:01.000000000","message":"There are two different implementations in i.e. cmode and cmode_rest. Why do you suggest to move to lib_base and also rename to \u0027get_all_deleted_volumes\u0027 as this is not just getting volumes, but also move them in valid state to destroy successfully  ?","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":3572,"context_line":"            if volume_state \u003d\u003d \u0027offline\u0027:"},{"line_number":3573,"context_line":"                clones \u003d self.get_clones_of_parent_volume(vserver, volume_name)"},{"line_number":3574,"context_line":"                if clones:"},{"line_number":3575,"context_line":"                    # Found parent volume which has multiple clone childs, so"},{"line_number":3576,"context_line":"                    # make volume online. Once the volume will be online, we"},{"line_number":3577,"context_line":"                    # will split clones (in next callback)."},{"line_number":3578,"context_line":"                    client \u003d copy.deepcopy(self)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0c10c62f_01bd2149","line":3575,"range":{"start_line":3575,"start_character":67,"end_line":3575,"end_character":73},"updated":"2024-12-03 10:38:37.000000000","message":"Change it to children","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":3572,"context_line":"            if volume_state \u003d\u003d \u0027offline\u0027:"},{"line_number":3573,"context_line":"                clones \u003d self.get_clones_of_parent_volume(vserver, volume_name)"},{"line_number":3574,"context_line":"                if clones:"},{"line_number":3575,"context_line":"                    # Found parent volume which has multiple clone childs, so"},{"line_number":3576,"context_line":"                    # make volume online. Once the volume will be online, we"},{"line_number":3577,"context_line":"                    # will split clones (in next callback)."},{"line_number":3578,"context_line":"                    client \u003d copy.deepcopy(self)"}],"source_content_type":"text/x-python","patch_set":1,"id":"41c452a7_98339e47","line":3575,"range":{"start_line":3575,"start_character":67,"end_line":3575,"end_character":73},"in_reply_to":"0c10c62f_01bd2149","updated":"2024-12-03 14:50:01.000000000","message":"Done","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":3569,"context_line":""},{"line_number":3570,"context_line":"            LOG.debug(\u0027Found volume %(vv)s in state  %(vs)s\u0027, {"},{"line_number":3571,"context_line":"                      \u0027vv\u0027: volume_name, \u0027vs\u0027: volume_state})"},{"line_number":3572,"context_line":"            if volume_state \u003d\u003d \u0027offline\u0027:"},{"line_number":3573,"context_line":"                clones \u003d self.get_clones_of_parent_volume(vserver, volume_name)"},{"line_number":3574,"context_line":"                if clones:"},{"line_number":3575,"context_line":"                    # Found parent volume which has multiple clone childs, so"},{"line_number":3576,"context_line":"                    # make volume online. Once the volume will be online, we"},{"line_number":3577,"context_line":"                    # will split clones (in next callback)."},{"line_number":3578,"context_line":"                    client \u003d copy.deepcopy(self)"},{"line_number":3579,"context_line":"                    client.set_vserver(vserver)"},{"line_number":3580,"context_line":"                    try:"},{"line_number":3581,"context_line":"                        client.volume_online(volume_name)"},{"line_number":3582,"context_line":"                    except Exception:"},{"line_number":3583,"context_line":"                        LOG.error(\"Volume online failed for \""},{"line_number":3584,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3585,"context_line":""},{"line_number":3586,"context_line":"                    for clone in clones:"},{"line_number":3587,"context_line":"                        try:"},{"line_number":3588,"context_line":"                            client.volume_online(clone)"},{"line_number":3589,"context_line":"                        except Exception:"},{"line_number":3590,"context_line":"                            LOG.error(\"Volume online failed for \""},{"line_number":3591,"context_line":"                                      \"volume %s\", clone)"},{"line_number":3592,"context_line":""},{"line_number":3593,"context_line":"                else:"},{"line_number":3594,"context_line":"                    # Either child or parent without child clones."},{"line_number":3595,"context_line":"                    client \u003d copy.deepcopy(self)"},{"line_number":3596,"context_line":"                    client.set_vserver(vserver)"},{"line_number":3597,"context_line":"                    try:"},{"line_number":3598,"context_line":"                        client.send_request("},{"line_number":3599,"context_line":"                            \u0027volume-destroy\u0027, {\u0027name\u0027: volume_name})"},{"line_number":3600,"context_line":"                    except netapp_api.NaApiError as e:"},{"line_number":3601,"context_line":"                        LOG.error(\u0027Pruning soft-deleted \u0027"},{"line_number":3602,"context_line":"                                  \u0027volume %s failed\u0027, volume_name)"},{"line_number":3603,"context_line":"                        if e.code \u003d\u003d netapp_api.EVOLDEL_NOT_ALLOW_BY_CLONE:"},{"line_number":3604,"context_line":"                            if client.volume_clone_split_status("},{"line_number":3605,"context_line":"                                    volume_name) !\u003d 100:"},{"line_number":3606,"context_line":"                                client.volume_clone_split_start(volume_name)"},{"line_number":3607,"context_line":"                                LOG.debug(\u0027Starting clone split for \u0027"},{"line_number":3608,"context_line":"                                          \u0027volume %s \u0027, volume_name)"},{"line_number":3609,"context_line":"            elif volume_state \u003d\u003d \u0027online\u0027:"},{"line_number":3610,"context_line":"                # These must be parent volume which was brought online in"},{"line_number":3611,"context_line":"                # previous callback. If no clones found means all splits are"},{"line_number":3612,"context_line":"                # completed, so offline the volume."},{"line_number":3613,"context_line":"                clones \u003d self.get_clones_of_parent_volume(vserver, volume_name)"},{"line_number":3614,"context_line":"                client \u003d copy.deepcopy(self)"},{"line_number":3615,"context_line":"                client.set_vserver(vserver)"},{"line_number":3616,"context_line":"                if not clones:"},{"line_number":3617,"context_line":"                    try:"},{"line_number":3618,"context_line":"                        client.volume_offline(volume_name)"},{"line_number":3619,"context_line":"                    except Exception:"},{"line_number":3620,"context_line":"                        LOG.error(\"Volume offline failed for \""},{"line_number":3621,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3622,"context_line":"                else:"},{"line_number":3623,"context_line":"                    for clone in clones:"},{"line_number":3624,"context_line":"                        if client.volume_clone_split_status(clone) !\u003d 100:"},{"line_number":3625,"context_line":"                            client.volume_clone_split_start(clone)"},{"line_number":3626,"context_line":"                            LOG.debug(\u0027Starting clone split for \u0027"},{"line_number":3627,"context_line":"                                      \u0027volume %s \u0027, volume_name)"},{"line_number":3628,"context_line":""},{"line_number":3629,"context_line":"    @na_utils.trace"},{"line_number":3630,"context_line":"    def create_snapshot(self, volume_name, snapshot_name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2a6ddf8e_29b8a976","line":3627,"range":{"start_line":3572,"start_character":12,"end_line":3627,"end_character":64},"updated":"2024-12-03 10:38:37.000000000","message":"I think you can change the above logic as below this will optimise the code.\n\n1. get the clones of volume \n2. if no clones:\n      if volume is online \n          offline(volume)\n      delete/destroy(volume)\n3 else\n    if volume offline \n       make volume online\n       start the split operation","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":3569,"context_line":""},{"line_number":3570,"context_line":"            LOG.debug(\u0027Found volume %(vv)s in state  %(vs)s\u0027, {"},{"line_number":3571,"context_line":"                      \u0027vv\u0027: volume_name, \u0027vs\u0027: volume_state})"},{"line_number":3572,"context_line":"            if volume_state \u003d\u003d \u0027offline\u0027:"},{"line_number":3573,"context_line":"                clones \u003d self.get_clones_of_parent_volume(vserver, volume_name)"},{"line_number":3574,"context_line":"                if clones:"},{"line_number":3575,"context_line":"                    # Found parent volume which has multiple clone childs, so"},{"line_number":3576,"context_line":"                    # make volume online. Once the volume will be online, we"},{"line_number":3577,"context_line":"                    # will split clones (in next callback)."},{"line_number":3578,"context_line":"                    client \u003d copy.deepcopy(self)"},{"line_number":3579,"context_line":"                    client.set_vserver(vserver)"},{"line_number":3580,"context_line":"                    try:"},{"line_number":3581,"context_line":"                        client.volume_online(volume_name)"},{"line_number":3582,"context_line":"                    except Exception:"},{"line_number":3583,"context_line":"                        LOG.error(\"Volume online failed for \""},{"line_number":3584,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3585,"context_line":""},{"line_number":3586,"context_line":"                    for clone in clones:"},{"line_number":3587,"context_line":"                        try:"},{"line_number":3588,"context_line":"                            client.volume_online(clone)"},{"line_number":3589,"context_line":"                        except Exception:"},{"line_number":3590,"context_line":"                            LOG.error(\"Volume online failed for \""},{"line_number":3591,"context_line":"                                      \"volume %s\", clone)"},{"line_number":3592,"context_line":""},{"line_number":3593,"context_line":"                else:"},{"line_number":3594,"context_line":"                    # Either child or parent without child clones."},{"line_number":3595,"context_line":"                    client \u003d copy.deepcopy(self)"},{"line_number":3596,"context_line":"                    client.set_vserver(vserver)"},{"line_number":3597,"context_line":"                    try:"},{"line_number":3598,"context_line":"                        client.send_request("},{"line_number":3599,"context_line":"                            \u0027volume-destroy\u0027, {\u0027name\u0027: volume_name})"},{"line_number":3600,"context_line":"                    except netapp_api.NaApiError as e:"},{"line_number":3601,"context_line":"                        LOG.error(\u0027Pruning soft-deleted \u0027"},{"line_number":3602,"context_line":"                                  \u0027volume %s failed\u0027, volume_name)"},{"line_number":3603,"context_line":"                        if e.code \u003d\u003d netapp_api.EVOLDEL_NOT_ALLOW_BY_CLONE:"},{"line_number":3604,"context_line":"                            if client.volume_clone_split_status("},{"line_number":3605,"context_line":"                                    volume_name) !\u003d 100:"},{"line_number":3606,"context_line":"                                client.volume_clone_split_start(volume_name)"},{"line_number":3607,"context_line":"                                LOG.debug(\u0027Starting clone split for \u0027"},{"line_number":3608,"context_line":"                                          \u0027volume %s \u0027, volume_name)"},{"line_number":3609,"context_line":"            elif volume_state \u003d\u003d \u0027online\u0027:"},{"line_number":3610,"context_line":"                # These must be parent volume which was brought online in"},{"line_number":3611,"context_line":"                # previous callback. If no clones found means all splits are"},{"line_number":3612,"context_line":"                # completed, so offline the volume."},{"line_number":3613,"context_line":"                clones \u003d self.get_clones_of_parent_volume(vserver, volume_name)"},{"line_number":3614,"context_line":"                client \u003d copy.deepcopy(self)"},{"line_number":3615,"context_line":"                client.set_vserver(vserver)"},{"line_number":3616,"context_line":"                if not clones:"},{"line_number":3617,"context_line":"                    try:"},{"line_number":3618,"context_line":"                        client.volume_offline(volume_name)"},{"line_number":3619,"context_line":"                    except Exception:"},{"line_number":3620,"context_line":"                        LOG.error(\"Volume offline failed for \""},{"line_number":3621,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3622,"context_line":"                else:"},{"line_number":3623,"context_line":"                    for clone in clones:"},{"line_number":3624,"context_line":"                        if client.volume_clone_split_status(clone) !\u003d 100:"},{"line_number":3625,"context_line":"                            client.volume_clone_split_start(clone)"},{"line_number":3626,"context_line":"                            LOG.debug(\u0027Starting clone split for \u0027"},{"line_number":3627,"context_line":"                                      \u0027volume %s \u0027, volume_name)"},{"line_number":3628,"context_line":""},{"line_number":3629,"context_line":"    @na_utils.trace"},{"line_number":3630,"context_line":"    def create_snapshot(self, volume_name, snapshot_name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb977d1a_0a1be422","line":3627,"range":{"start_line":3572,"start_character":12,"end_line":3627,"end_character":64},"in_reply_to":"2a6ddf8e_29b8a976","updated":"2024-12-03 14:50:01.000000000","message":"this is also a way to do but handling condition on online/offline states would be good approach and we maintain it in downstream repository since 2023. so I think, we should keep same here.","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"65ffcd80a3e25ebc8021c653f28796d31b2f6571","unresolved":true,"context_lines":[{"line_number":3596,"context_line":"                else:"},{"line_number":3597,"context_line":"                    # Either child or parent without child clones."},{"line_number":3598,"context_line":"                    try:"},{"line_number":3599,"context_line":"                        client.send_request("},{"line_number":3600,"context_line":"                            \u0027volume-destroy\u0027, {\u0027name\u0027: volume_name})"},{"line_number":3601,"context_line":"                    except netapp_api.NaApiError as e:"},{"line_number":3602,"context_line":"                        LOG.error(\u0027Pruning soft-deleted \u0027"},{"line_number":3603,"context_line":"                                  \u0027volume %s failed\u0027, volume_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c7b27a41_8e166590","line":3600,"range":{"start_line":3599,"start_character":24,"end_line":3600,"end_character":68},"updated":"2024-12-04 16:33:54.000000000","message":"use delete_volume() method","commit_id":"55b7fb25621bff81f00b5951ae7cfe43db996200"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7bfe5bbc2c83392eef7086125b9b6fca1646ea7a","unresolved":false,"context_lines":[{"line_number":3596,"context_line":"                else:"},{"line_number":3597,"context_line":"                    # Either child or parent without child clones."},{"line_number":3598,"context_line":"                    try:"},{"line_number":3599,"context_line":"                        client.send_request("},{"line_number":3600,"context_line":"                            \u0027volume-destroy\u0027, {\u0027name\u0027: volume_name})"},{"line_number":3601,"context_line":"                    except netapp_api.NaApiError as e:"},{"line_number":3602,"context_line":"                        LOG.error(\u0027Pruning soft-deleted \u0027"},{"line_number":3603,"context_line":"                                  \u0027volume %s failed\u0027, volume_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"2f6f4eea_7705c153","line":3600,"range":{"start_line":3599,"start_character":24,"end_line":3600,"end_character":68},"in_reply_to":"c7b27a41_8e166590","updated":"2024-12-12 13:26:27.000000000","message":"Done","commit_id":"55b7fb25621bff81f00b5951ae7cfe43db996200"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cf82404bb2f74131faa260a52c27b6dbfc323bf7","unresolved":true,"context_lines":[{"line_number":3301,"context_line":"            try:"},{"line_number":3302,"context_line":"                if int(percentage) \u003c 100:"},{"line_number":3303,"context_line":"                    return \u0027ongoing\u0027"},{"line_number":3304,"context_line":"            except Exception as e:"},{"line_number":3305,"context_line":"                LOG.exception(f\"unexpected error converting clone-split \""},{"line_number":3306,"context_line":"                              f\"percentage \u0027{percentage}\u0027 to integer: \""},{"line_number":3307,"context_line":"                              f\"{e}\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"e9ea062e_aec57fb3","line":3304,"range":{"start_line":3304,"start_character":12,"end_line":3304,"end_character":34},"updated":"2025-02-24 11:15:58.000000000","message":"Change it to \nexcept (ValueError, TypeError) as e:","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"6c1ef0d8c34b05c720a611b5293b525f70759700","unresolved":false,"context_lines":[{"line_number":3301,"context_line":"            try:"},{"line_number":3302,"context_line":"                if int(percentage) \u003c 100:"},{"line_number":3303,"context_line":"                    return \u0027ongoing\u0027"},{"line_number":3304,"context_line":"            except Exception as e:"},{"line_number":3305,"context_line":"                LOG.exception(f\"unexpected error converting clone-split \""},{"line_number":3306,"context_line":"                              f\"percentage \u0027{percentage}\u0027 to integer: \""},{"line_number":3307,"context_line":"                              f\"{e}\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"7b793435_6cbc42e6","line":3304,"range":{"start_line":3304,"start_character":12,"end_line":3304,"end_character":34},"in_reply_to":"e9ea062e_aec57fb3","updated":"2025-02-24 17:37:51.000000000","message":"Done","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"0f6e2f9be308a0e581483777b1e4f27a6127f563","unresolved":true,"context_lines":[{"line_number":3533,"context_line":"        \"\"\"Renames a volume.\"\"\""},{"line_number":3534,"context_line":"        api_args \u003d {\u0027volume\u0027: volume_name, \u0027new-volume-name\u0027: new_volume_name}"},{"line_number":3535,"context_line":"        self.send_request(\u0027volume-rename\u0027, api_args)"},{"line_number":3536,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":3537,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":3538,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":3539,"context_line":""},{"line_number":3540,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":8,"id":"021e1b6c_51cc382b","line":3537,"range":{"start_line":3536,"start_character":8,"end_line":3537,"end_character":42},"updated":"2025-03-11 09:36:21.000000000","message":"Technically we just rename the volume here (it is used by the soft-delete mechanism, but it could be used for other things, too).\nIf you want to touch this, you could also add the `new_volume_name` to the debug output.\n\nNevertheless I\u0027m fine with keeping it that way, too","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a904e0272b9c37c0ee66128b6bc72ca0ad510faf","unresolved":false,"context_lines":[{"line_number":3533,"context_line":"        \"\"\"Renames a volume.\"\"\""},{"line_number":3534,"context_line":"        api_args \u003d {\u0027volume\u0027: volume_name, \u0027new-volume-name\u0027: new_volume_name}"},{"line_number":3535,"context_line":"        self.send_request(\u0027volume-rename\u0027, api_args)"},{"line_number":3536,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":3537,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":3538,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":3539,"context_line":""},{"line_number":3540,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":8,"id":"3135f9ac_a0eb0db0","line":3537,"range":{"start_line":3536,"start_character":8,"end_line":3537,"end_character":42},"in_reply_to":"021e1b6c_51cc382b","updated":"2025-03-11 11:15:00.000000000","message":"Done","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"518abe003f42548d997020bf8cd3443d5e16c668","unresolved":true,"context_lines":[{"line_number":3775,"context_line":"                    client.set_vserver(vserver)"},{"line_number":3776,"context_line":"                    try:"},{"line_number":3777,"context_line":"                        client.volume_online(volume_name)"},{"line_number":3778,"context_line":"                    except Exception:"},{"line_number":3779,"context_line":"                        LOG.error(\"Volume online failed for \""},{"line_number":3780,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3781,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"380405a0_66890b66","line":3778,"updated":"2025-09-17 03:43:22.000000000","message":"We need to handle specific exceptions instead of generic exception based on workflow.","commit_id":"043adf4cbabea0316cc21ab9fd28173aeed1feda"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"96a2843a9013f89e29fb9377373f9809a75496a5","unresolved":false,"context_lines":[{"line_number":3775,"context_line":"                    client.set_vserver(vserver)"},{"line_number":3776,"context_line":"                    try:"},{"line_number":3777,"context_line":"                        client.volume_online(volume_name)"},{"line_number":3778,"context_line":"                    except Exception:"},{"line_number":3779,"context_line":"                        LOG.error(\"Volume online failed for \""},{"line_number":3780,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3781,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"22ab6e08_3a6f6022","line":3778,"in_reply_to":"380405a0_66890b66","updated":"2025-10-20 12:05:38.000000000","message":"This run as periodic function as a cleanup of volumes that are soft deleted. Thus the exception is catched and logged with assumption that we look to those volumes again in next iteration and try to delete them. Thus we dont need to have specific exception as its not outcome of user trigged API.","commit_id":"043adf4cbabea0316cc21ab9fd28173aeed1feda"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fb132e47caa087cd2b19bc2cf98b240f3653fa52","unresolved":true,"context_lines":[{"line_number":3556,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":3557,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":3558,"context_line":"                # we cannot tell about the progress"},{"line_number":3559,"context_line":"                return \u0027unknown\u0027"},{"line_number":3560,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"},{"line_number":3561,"context_line":"                # volume no longer is a clone means it is 100% split"},{"line_number":3562,"context_line":"                return \u0027finished\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"1edc310d_d88a1486","line":3559,"updated":"2026-01-09 08:56:19.000000000","message":"It would be better to use constants for the strings mentioned here for status.","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"389db69792b0ac319e08ae4b210707460e5612a9","unresolved":false,"context_lines":[{"line_number":3556,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":3557,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":3558,"context_line":"                # we cannot tell about the progress"},{"line_number":3559,"context_line":"                return \u0027unknown\u0027"},{"line_number":3560,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"},{"line_number":3561,"context_line":"                # volume no longer is a clone means it is 100% split"},{"line_number":3562,"context_line":"                return \u0027finished\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"f8716f35_9050e14d","line":3559,"in_reply_to":"1edc310d_d88a1486","updated":"2026-01-09 10:42:58.000000000","message":"Acknowledged","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fb132e47caa087cd2b19bc2cf98b240f3653fa52","unresolved":true,"context_lines":[{"line_number":3921,"context_line":"                                LOG.error(\"Volume clone split failed for \""},{"line_number":3922,"context_line":"                                          \"volume %s\", volume_name)"},{"line_number":3923,"context_line":""},{"line_number":3924,"context_line":"            elif volume_state \u003d\u003d \u0027online\u0027:"},{"line_number":3925,"context_line":"                # These must be parent volume which was brought online in"},{"line_number":3926,"context_line":"                # previous callback. If no clones found means all splits are"},{"line_number":3927,"context_line":"                # completed, so offline the volume."}],"source_content_type":"text/x-python","patch_set":16,"id":"fbb2032e_09e175ad","line":3924,"updated":"2026-01-09 08:56:19.000000000","message":"Please use constants for the state type fields. Using strings is prone to errors. And also allows to future maintain the code.","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"389db69792b0ac319e08ae4b210707460e5612a9","unresolved":false,"context_lines":[{"line_number":3921,"context_line":"                                LOG.error(\"Volume clone split failed for \""},{"line_number":3922,"context_line":"                                          \"volume %s\", volume_name)"},{"line_number":3923,"context_line":""},{"line_number":3924,"context_line":"            elif volume_state \u003d\u003d \u0027online\u0027:"},{"line_number":3925,"context_line":"                # These must be parent volume which was brought online in"},{"line_number":3926,"context_line":"                # previous callback. If no clones found means all splits are"},{"line_number":3927,"context_line":"                # completed, so offline the volume."}],"source_content_type":"text/x-python","patch_set":16,"id":"d1a6c234_ad375233","line":3924,"in_reply_to":"fbb2032e_09e175ad","updated":"2026-01-09 10:42:58.000000000","message":"Acknowledged","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fb132e47caa087cd2b19bc2cf98b240f3653fa52","unresolved":true,"context_lines":[{"line_number":3935,"context_line":"                        LOG.error(\"Volume offline failed for \""},{"line_number":3936,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3937,"context_line":"                else:"},{"line_number":3938,"context_line":"                    for clone in clones:"},{"line_number":3939,"context_line":"                        try:"},{"line_number":3940,"context_line":"                            clone_status \u003d client.volume_clone_split_status("},{"line_number":3941,"context_line":"                                clone)"}],"source_content_type":"text/x-python","patch_set":16,"id":"f0b671fe_7c8d2930","line":3938,"updated":"2026-01-09 08:56:19.000000000","message":"clone split can take a lot of time depending on the amount of data thats being split. Are we going to have timeouts for this logic where we do not end up looping for more time than really resonable?","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"389db69792b0ac319e08ae4b210707460e5612a9","unresolved":false,"context_lines":[{"line_number":3935,"context_line":"                        LOG.error(\"Volume offline failed for \""},{"line_number":3936,"context_line":"                                  \"volume %s\", volume_name)"},{"line_number":3937,"context_line":"                else:"},{"line_number":3938,"context_line":"                    for clone in clones:"},{"line_number":3939,"context_line":"                        try:"},{"line_number":3940,"context_line":"                            clone_status \u003d client.volume_clone_split_status("},{"line_number":3941,"context_line":"                                clone)"}],"source_content_type":"text/x-python","patch_set":16,"id":"0e2b471f_f9a1c371","line":3938,"in_reply_to":"f0b671fe_7c8d2930","updated":"2026-01-09 10:42:58.000000000","message":"this is cleanup periodic callback, where we process the volume based on their current status. If split is ongoing, we ignore and handle in next iteration else start split and again handle in next iteration. We dont need to wait for split to finish in same callback.","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":1744,"context_line":"        self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027patch\u0027, body\u003dbody)"},{"line_number":1745,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":1746,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":1747,"context_line":"        LOG.info(msg, msg_args)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":"    @na_utils.trace"},{"line_number":1750,"context_line":"    def soft_delete_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"80dac579_8b952311","line":1747,"range":{"start_line":1747,"start_character":12,"end_line":1747,"end_character":16},"updated":"2024-12-03 10:38:37.000000000","message":"debug","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":1744,"context_line":"        self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027patch\u0027, body\u003dbody)"},{"line_number":1745,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":1746,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":1747,"context_line":"        LOG.info(msg, msg_args)"},{"line_number":1748,"context_line":""},{"line_number":1749,"context_line":"    @na_utils.trace"},{"line_number":1750,"context_line":"    def soft_delete_volume(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"6d3fabaf_21c80e8f","line":1747,"range":{"start_line":1747,"start_character":12,"end_line":1747,"end_character":16},"in_reply_to":"80dac579_8b952311","updated":"2024-12-03 14:50:01.000000000","message":"Done","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cecf22a75510a4fd6284f0f8c58872f9a99931bc","unresolved":true,"context_lines":[{"line_number":1761,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"    @na_utils.trace"},{"line_number":1764,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":1765,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":1766,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":1767,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e8d8a0ca_ca8ccfe2","line":1764,"range":{"start_line":1764,"start_character":8,"end_line":1764,"end_character":29},"updated":"2024-12-03 10:38:37.000000000","message":"All the comments provided for ZAPI also applicable here.","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a974178c7a5f02b7961d21a7b246a6fb58ba7f52","unresolved":false,"context_lines":[{"line_number":1761,"context_line":"                self.rename_volume(volume_name, DELETED_PREFIX + volume_name)"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"    @na_utils.trace"},{"line_number":1764,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":1765,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":1766,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":1767,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c95fe8e4_c16736fa","line":1764,"range":{"start_line":1764,"start_character":8,"end_line":1764,"end_character":29},"in_reply_to":"e8d8a0ca_ca8ccfe2","updated":"2024-12-03 14:50:01.000000000","message":"Acknowledged","commit_id":"937b129cd7ff39633f25f17265f7fd68be950f96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"65ffcd80a3e25ebc8021c653f28796d31b2f6571","unresolved":true,"context_lines":[{"line_number":1804,"context_line":"                    try:"},{"line_number":1805,"context_line":"                        volume \u003d self._get_volume_by_args(vol_name\u003dvolume_name)"},{"line_number":1806,"context_line":"                        uuid \u003d volume[\u0027uuid\u0027]"},{"line_number":1807,"context_line":"                        client.send_request(f\u0027/storage/volumes/{uuid}\u0027,"},{"line_number":1808,"context_line":"                                            \u0027delete\u0027)"},{"line_number":1809,"context_line":"                    except netapp_api.NaApiError as e:"},{"line_number":1810,"context_line":"                        LOG.error(\u0027Pruning soft-deleted \u0027"},{"line_number":1811,"context_line":"                                  \u0027volume %s failed\u0027, volume_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b00d5c10_40b9e195","line":1808,"range":{"start_line":1807,"start_character":24,"end_line":1808,"end_character":53},"updated":"2024-12-04 16:33:54.000000000","message":"Use delete_volume function.","commit_id":"55b7fb25621bff81f00b5951ae7cfe43db996200"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7bfe5bbc2c83392eef7086125b9b6fca1646ea7a","unresolved":false,"context_lines":[{"line_number":1804,"context_line":"                    try:"},{"line_number":1805,"context_line":"                        volume \u003d self._get_volume_by_args(vol_name\u003dvolume_name)"},{"line_number":1806,"context_line":"                        uuid \u003d volume[\u0027uuid\u0027]"},{"line_number":1807,"context_line":"                        client.send_request(f\u0027/storage/volumes/{uuid}\u0027,"},{"line_number":1808,"context_line":"                                            \u0027delete\u0027)"},{"line_number":1809,"context_line":"                    except netapp_api.NaApiError as e:"},{"line_number":1810,"context_line":"                        LOG.error(\u0027Pruning soft-deleted \u0027"},{"line_number":1811,"context_line":"                                  \u0027volume %s failed\u0027, volume_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9de35f42_83db7232","line":1808,"range":{"start_line":1807,"start_character":24,"end_line":1808,"end_character":53},"in_reply_to":"b00d5c10_40b9e195","updated":"2024-12-12 13:26:27.000000000","message":"Done","commit_id":"55b7fb25621bff81f00b5951ae7cfe43db996200"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"809f00418717482cb7b8b997aec5f0945232a999","unresolved":true,"context_lines":[{"line_number":1782,"context_line":"        except netapp_api.api.NaApiError:"},{"line_number":1783,"context_line":"            LOG.error(\"Failed to get deleted volumes to prune\")"},{"line_number":1784,"context_line":"            return []"},{"line_number":1785,"context_line":"        return result.get(\u0027records\u0027, [])"},{"line_number":1786,"context_line":""},{"line_number":1787,"context_line":"    @na_utils.trace"},{"line_number":1788,"context_line":"    def qos_policy_group_get(self, qos_policy_group_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ace9c289_f3d4a470","line":1785,"range":{"start_line":1785,"start_character":8,"end_line":1785,"end_character":40},"updated":"2024-12-12 15:44:18.000000000","message":"Are you sure this will return same data structure as we are returing from ZAPI. It is better parse this and return the same data structure, list of dict and dict should have only three key, volume_name, vserver_name and volume_state, same as ZAPI.","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d7fdd42ddfbda76b27fb3b2bb636b205cf5cbae1","unresolved":false,"context_lines":[{"line_number":1782,"context_line":"        except netapp_api.api.NaApiError:"},{"line_number":1783,"context_line":"            LOG.error(\"Failed to get deleted volumes to prune\")"},{"line_number":1784,"context_line":"            return []"},{"line_number":1785,"context_line":"        return result.get(\u0027records\u0027, [])"},{"line_number":1786,"context_line":""},{"line_number":1787,"context_line":"    @na_utils.trace"},{"line_number":1788,"context_line":"    def qos_policy_group_get(self, qos_policy_group_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"689fb4d3_070c495d","line":1785,"range":{"start_line":1785,"start_character":8,"end_line":1785,"end_character":40},"in_reply_to":"6c5d304f_5439795e","updated":"2024-12-13 15:25:30.000000000","message":"hope you tested the rest workflow, I am trusting on your comments and giving +1 based on this.","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"aa89b93bb8762cbe6df917db9bf95cb93b9eb102","unresolved":false,"context_lines":[{"line_number":1782,"context_line":"        except netapp_api.api.NaApiError:"},{"line_number":1783,"context_line":"            LOG.error(\"Failed to get deleted volumes to prune\")"},{"line_number":1784,"context_line":"            return []"},{"line_number":1785,"context_line":"        return result.get(\u0027records\u0027, [])"},{"line_number":1786,"context_line":""},{"line_number":1787,"context_line":"    @na_utils.trace"},{"line_number":1788,"context_line":"    def qos_policy_group_get(self, qos_policy_group_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"6c5d304f_5439795e","line":1785,"range":{"start_line":1785,"start_character":8,"end_line":1785,"end_character":40},"in_reply_to":"ace9c289_f3d4a470","updated":"2024-12-12 16:30:55.000000000","message":"yeah, I did other way since ZAPI is going to deprecate in future makes sense to have output in REST. The output of ZAPI is modified to fit in the form of output of REST API. REST return records as it is while ZAPI fills records array from attributes,","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cf82404bb2f74131faa260a52c27b6dbfc323bf7","unresolved":true,"context_lines":[{"line_number":2089,"context_line":"            try:"},{"line_number":2090,"context_line":"                if int(percent) \u003c 100:"},{"line_number":2091,"context_line":"                    return \u0027ongoing\u0027"},{"line_number":2092,"context_line":"            except Exception as e:"},{"line_number":2093,"context_line":"                LOG.exception(f\"unexpected error converting clone-split \""},{"line_number":2094,"context_line":"                              f\"percentage \u0027{percent}\u0027 to integer: {e}\")"},{"line_number":2095,"context_line":"                return \u0027unknown\u0027"},{"line_number":2096,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2097,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2098,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"}],"source_content_type":"text/x-python","patch_set":7,"id":"c6aca429_2bf23702","line":2095,"range":{"start_line":2092,"start_character":12,"end_line":2095,"end_character":32},"updated":"2025-02-24 11:15:58.000000000","message":"I don\u0027t think any statement in try block can hit the exception, I am seeing only if int(percent) \u003c 100, you are expecting this will throw the exception ..?","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"6c1ef0d8c34b05c720a611b5293b525f70759700","unresolved":false,"context_lines":[{"line_number":2089,"context_line":"            try:"},{"line_number":2090,"context_line":"                if int(percent) \u003c 100:"},{"line_number":2091,"context_line":"                    return \u0027ongoing\u0027"},{"line_number":2092,"context_line":"            except Exception as e:"},{"line_number":2093,"context_line":"                LOG.exception(f\"unexpected error converting clone-split \""},{"line_number":2094,"context_line":"                              f\"percentage \u0027{percent}\u0027 to integer: {e}\")"},{"line_number":2095,"context_line":"                return \u0027unknown\u0027"},{"line_number":2096,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2097,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2098,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"}],"source_content_type":"text/x-python","patch_set":7,"id":"b0123e8a_1d7694e9","line":2095,"range":{"start_line":2092,"start_character":12,"end_line":2095,"end_character":32},"in_reply_to":"c6aca429_2bf23702","updated":"2025-02-24 17:37:51.000000000","message":"yes, I am expecting percent with value that can be convreted to int., but in case fails, we should be safe and catch exception.","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cf82404bb2f74131faa260a52c27b6dbfc323bf7","unresolved":true,"context_lines":[{"line_number":2084,"context_line":"        }"},{"line_number":2085,"context_line":""},{"line_number":2086,"context_line":"        try:"},{"line_number":2087,"context_line":"            res \u003d self.send_request(\u0027/storage/volumes/\u0027, \u0027get\u0027, query\u003dquery)"},{"line_number":2088,"context_line":"            percent \u003d res.get(\u0027clone.split_complete_percent\u0027)"},{"line_number":2089,"context_line":"            try:"},{"line_number":2090,"context_line":"                if int(percent) \u003c 100:"},{"line_number":2091,"context_line":"                    return \u0027ongoing\u0027"},{"line_number":2092,"context_line":"            except Exception as e:"},{"line_number":2093,"context_line":"                LOG.exception(f\"unexpected error converting clone-split \""},{"line_number":2094,"context_line":"                              f\"percentage \u0027{percent}\u0027 to integer: {e}\")"},{"line_number":2095,"context_line":"                return \u0027unknown\u0027"},{"line_number":2096,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2097,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2098,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":2099,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2100,"context_line":"                # we cannot tell about the progress"},{"line_number":2101,"context_line":"                return \u0027unknown\u0027"},{"line_number":2102,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"},{"line_number":2103,"context_line":"                # volume no longer is a clone means it is 100% split"},{"line_number":2104,"context_line":"                return \u0027finished\u0027"},{"line_number":2105,"context_line":"            else:"},{"line_number":2106,"context_line":"                # log other exceptions for future code improvement"},{"line_number":2107,"context_line":"                LOG.exception(f\"unexpected volume-clone-split-status error \""},{"line_number":2108,"context_line":"                              f\"code {e.code}, message {e.message} for \""},{"line_number":2109,"context_line":"                              f\"volume {volume_name}\")"},{"line_number":2110,"context_line":""},{"line_number":2111,"context_line":"                return \u0027unknown\u0027"},{"line_number":2112,"context_line":""},{"line_number":2113,"context_line":"    @na_utils.trace"},{"line_number":2114,"context_line":"    def volume_clone_split_stop(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"b403f100_1d1350c0","line":2111,"range":{"start_line":2087,"start_character":12,"end_line":2111,"end_character":32},"updated":"2025-02-24 11:15:58.000000000","message":"You can write this code as below \n\ntry:\n            res \u003d self.send_request(\u0027/storage/volumes/\u0027, \u0027get\u0027, query\u003dquery)\n            percent \u003d res.get(\u0027clone.split_complete_percent\u0027)\n            if int(percent) \u003c 100:\n                return \u0027ongoing\u0027\n            \n        except netapp_api.NaApiError as e:\n            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,\n                          netapp_api.EVOLUMENOTONLINE,\n                          netapp_api.EPARENTNOTONLINE):\n                # we cannot tell about the progress\n                return \u0027unknown\u0027\n            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:\n                # volume no longer is a clone means it is 100% split\n                return \u0027finished\u0027\n            else:\n                # log other exceptions for future code improvement\n                LOG.exception(f\"unexpected volume-clone-split-status error \"\n                              f\"code {e.code}, message {e.message} for \"\n                              f\"volume {volume_name}\")\n\n                return \u0027unknown\u0027\n          except (ValueError, TypeError) as e:\n               LOG.exception(f\"unexpected error converting clone-split \"\n                              f\"percentage \u0027{percent}\u0027 to integer: {e}\")\n                return \u0027unknown\u0027","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"6c1ef0d8c34b05c720a611b5293b525f70759700","unresolved":false,"context_lines":[{"line_number":2084,"context_line":"        }"},{"line_number":2085,"context_line":""},{"line_number":2086,"context_line":"        try:"},{"line_number":2087,"context_line":"            res \u003d self.send_request(\u0027/storage/volumes/\u0027, \u0027get\u0027, query\u003dquery)"},{"line_number":2088,"context_line":"            percent \u003d res.get(\u0027clone.split_complete_percent\u0027)"},{"line_number":2089,"context_line":"            try:"},{"line_number":2090,"context_line":"                if int(percent) \u003c 100:"},{"line_number":2091,"context_line":"                    return \u0027ongoing\u0027"},{"line_number":2092,"context_line":"            except Exception as e:"},{"line_number":2093,"context_line":"                LOG.exception(f\"unexpected error converting clone-split \""},{"line_number":2094,"context_line":"                              f\"percentage \u0027{percent}\u0027 to integer: {e}\")"},{"line_number":2095,"context_line":"                return \u0027unknown\u0027"},{"line_number":2096,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2097,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2098,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":2099,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2100,"context_line":"                # we cannot tell about the progress"},{"line_number":2101,"context_line":"                return \u0027unknown\u0027"},{"line_number":2102,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"},{"line_number":2103,"context_line":"                # volume no longer is a clone means it is 100% split"},{"line_number":2104,"context_line":"                return \u0027finished\u0027"},{"line_number":2105,"context_line":"            else:"},{"line_number":2106,"context_line":"                # log other exceptions for future code improvement"},{"line_number":2107,"context_line":"                LOG.exception(f\"unexpected volume-clone-split-status error \""},{"line_number":2108,"context_line":"                              f\"code {e.code}, message {e.message} for \""},{"line_number":2109,"context_line":"                              f\"volume {volume_name}\")"},{"line_number":2110,"context_line":""},{"line_number":2111,"context_line":"                return \u0027unknown\u0027"},{"line_number":2112,"context_line":""},{"line_number":2113,"context_line":"    @na_utils.trace"},{"line_number":2114,"context_line":"    def volume_clone_split_stop(self, volume_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fe151f90_4a611097","line":2111,"range":{"start_line":2087,"start_character":12,"end_line":2111,"end_character":32},"in_reply_to":"b403f100_1d1350c0","updated":"2025-02-24 17:37:51.000000000","message":"Done","commit_id":"401a4898fc7515af7de59912763e020ff63ce1b6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b83cddfb591348114c44404e6f8d21a78593e514","unresolved":true,"context_lines":[{"line_number":1756,"context_line":"            # delete volume async operation."},{"line_number":1757,"context_line":"            self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027delete\u0027)"},{"line_number":1758,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":1759,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLDEL_NOT_ALLOW_BY_CLONE:"},{"line_number":1760,"context_line":"                if in_prune:"},{"line_number":1761,"context_line":"                    return \u0027del_not_allow_by_clone\u0027"},{"line_number":1762,"context_line":"                LOG.warning(\u0027Delete volume %s failed, renaming..\u0027, volume_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"2976c230_ea1d412c","line":1759,"range":{"start_line":1759,"start_character":0,"end_line":1759,"end_character":63},"updated":"2025-05-08 21:33:31.000000000","message":"REST doesn\u0027t give you the same errors as ONTAPI: \n\nLooks like the error code is:\n\n 524615 - Failed to delete volume because it has one or more clones.\n \nhttps://docs.netapp.com/us-en/ontap-restapi/ontap/delete-storage-volumes-.html#error","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"47f106643cfdbf632901162ccb5377ada61a97cd","unresolved":false,"context_lines":[{"line_number":1756,"context_line":"            # delete volume async operation."},{"line_number":1757,"context_line":"            self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027delete\u0027)"},{"line_number":1758,"context_line":"        except netapp_api.api.NaApiError as e:"},{"line_number":1759,"context_line":"            if e.code \u003d\u003d netapp_api.EVOLDEL_NOT_ALLOW_BY_CLONE:"},{"line_number":1760,"context_line":"                if in_prune:"},{"line_number":1761,"context_line":"                    return \u0027del_not_allow_by_clone\u0027"},{"line_number":1762,"context_line":"                LOG.warning(\u0027Delete volume %s failed, renaming..\u0027, volume_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"f6e8cec8_e5d4602d","line":1759,"range":{"start_line":1759,"start_character":0,"end_line":1759,"end_character":63},"in_reply_to":"2976c230_ea1d412c","updated":"2025-05-09 16:58:09.000000000","message":"Updated this code, thanks for pointing out.","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b83cddfb591348114c44404e6f8d21a78593e514","unresolved":true,"context_lines":[{"line_number":2093,"context_line":"            if int(percent) \u003c 100:"},{"line_number":2094,"context_line":"                return \u0027ongoing\u0027"},{"line_number":2095,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2096,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2097,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":2098,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2099,"context_line":"                # we cannot tell about the progress"},{"line_number":2100,"context_line":"                return \u0027unknown\u0027"},{"line_number":2101,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ebcbf460_cae75fac","line":2098,"range":{"start_line":2096,"start_character":25,"end_line":2098,"end_character":55},"updated":"2025-05-08 21:33:31.000000000","message":"i don\u0027t think the GET /storage/volumes REST API raises these errors.. these are ONTAPI error codes: https://docs.netapp.com/us-en/ontap-restapi/ontap/get-storage-volumes.html#response\n\nthe REST API returns a bunch of clone attributes: https://docs.netapp.com/us-en/ontap-restapi/ontap/get-storage-volumes.html#definitions:~:text\u003dx%2Dnullable%3A%20true-,clone,-Name\n\nmaybe the logic here should use those","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b8c59ec024320f63c6bef6cf3bb8c6a313e38133","unresolved":true,"context_lines":[{"line_number":2093,"context_line":"            if int(percent) \u003c 100:"},{"line_number":2094,"context_line":"                return \u0027ongoing\u0027"},{"line_number":2095,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2096,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2097,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":2098,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2099,"context_line":"                # we cannot tell about the progress"},{"line_number":2100,"context_line":"                return \u0027unknown\u0027"},{"line_number":2101,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"}],"source_content_type":"text/x-python","patch_set":9,"id":"2e0061b9_186aaec6","line":2098,"range":{"start_line":2096,"start_character":25,"end_line":2098,"end_character":55},"in_reply_to":"05d57965_d42c8e2c","updated":"2025-05-21 12:28:45.000000000","message":"Yes, I am agree with Goutham, you are using ZAPI error code for REST API. Yes you need to parse the error response from API ans set the condition accordingly.","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"91e6df66c6c192f6e3076d14c862c2b198b3a551","unresolved":false,"context_lines":[{"line_number":2093,"context_line":"            if int(percent) \u003c 100:"},{"line_number":2094,"context_line":"                return \u0027ongoing\u0027"},{"line_number":2095,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2096,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2097,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":2098,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2099,"context_line":"                # we cannot tell about the progress"},{"line_number":2100,"context_line":"                return \u0027unknown\u0027"},{"line_number":2101,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"}],"source_content_type":"text/x-python","patch_set":9,"id":"74862075_f53ae12d","line":2098,"range":{"start_line":2096,"start_character":25,"end_line":2098,"end_character":55},"in_reply_to":"2e0061b9_186aaec6","updated":"2025-05-26 12:40:26.000000000","message":"The get query response is parsed for getting clone status.","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2955246145881eca1aeecce51ed906e8c92939b9","unresolved":true,"context_lines":[{"line_number":2093,"context_line":"            if int(percent) \u003c 100:"},{"line_number":2094,"context_line":"                return \u0027ongoing\u0027"},{"line_number":2095,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2096,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2097,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":2098,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2099,"context_line":"                # we cannot tell about the progress"},{"line_number":2100,"context_line":"                return \u0027unknown\u0027"},{"line_number":2101,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"}],"source_content_type":"text/x-python","patch_set":9,"id":"05d57965_d42c8e2c","line":2098,"range":{"start_line":2096,"start_character":25,"end_line":2098,"end_character":55},"in_reply_to":"a654f39f_f2291e6c","updated":"2025-05-09 17:08:40.000000000","message":"The GET volumes call won\u0027t return clone split errors the same way as the cmode ONTAPI call you\u0027re making in client_cmode.py.. here, the code is fetching volume details, you\u0027ll need to parse the attributes returned by the API instead of reacting to errors.\n\nIn the ONTAPI implementation of this method: \"volume_clone_split_status\", the ONTAPI used is: \"volume-clone-split-status\"","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"47f106643cfdbf632901162ccb5377ada61a97cd","unresolved":true,"context_lines":[{"line_number":2093,"context_line":"            if int(percent) \u003c 100:"},{"line_number":2094,"context_line":"                return \u0027ongoing\u0027"},{"line_number":2095,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2096,"context_line":"            if e.code in (netapp_api.EVOLOPNOTUNDERWAY,"},{"line_number":2097,"context_line":"                          netapp_api.EVOLUMENOTONLINE,"},{"line_number":2098,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2099,"context_line":"                # we cannot tell about the progress"},{"line_number":2100,"context_line":"                return \u0027unknown\u0027"},{"line_number":2101,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"}],"source_content_type":"text/x-python","patch_set":9,"id":"a654f39f_f2291e6c","line":2098,"range":{"start_line":2096,"start_character":25,"end_line":2098,"end_character":55},"in_reply_to":"ebcbf460_cae75fac","updated":"2025-05-09 16:58:09.000000000","message":"yes, this errors are take from cmode implementation. \n\n@gawasthi2010@gmail.com, can you please comment how can we handle those error cases for REST implementation ?","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b83cddfb591348114c44404e6f8d21a78593e514","unresolved":true,"context_lines":[{"line_number":2098,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2099,"context_line":"                # we cannot tell about the progress"},{"line_number":2100,"context_line":"                return \u0027unknown\u0027"},{"line_number":2101,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"},{"line_number":2102,"context_line":"                # volume no longer is a clone means it is 100% split"},{"line_number":2103,"context_line":"                return \u0027finished\u0027"},{"line_number":2104,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"0d58b623_2bee13f6","line":2101,"range":{"start_line":2101,"start_character":0,"end_line":2101,"end_character":51},"updated":"2025-05-08 21:33:31.000000000","message":"same","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"47f106643cfdbf632901162ccb5377ada61a97cd","unresolved":false,"context_lines":[{"line_number":2098,"context_line":"                          netapp_api.EPARENTNOTONLINE):"},{"line_number":2099,"context_line":"                # we cannot tell about the progress"},{"line_number":2100,"context_line":"                return \u0027unknown\u0027"},{"line_number":2101,"context_line":"            elif e.code \u003d\u003d netapp_api.EVOLNOTCLONE:"},{"line_number":2102,"context_line":"                # volume no longer is a clone means it is 100% split"},{"line_number":2103,"context_line":"                return \u0027finished\u0027"},{"line_number":2104,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5b5e280a_c3a23c25","line":2101,"range":{"start_line":2101,"start_character":0,"end_line":2101,"end_character":51},"in_reply_to":"0d58b623_2bee13f6","updated":"2025-05-09 16:58:09.000000000","message":"Acknowledged","commit_id":"5dd81e550893fc262d846b638e598b97516cc2ad"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"63c8288d32bbf7838e97094a4925efcedacdf822","unresolved":true,"context_lines":[{"line_number":2159,"context_line":"        percent \u003d vol.get(\u0027clone.split_complete_percent\u0027)"},{"line_number":2160,"context_line":"        try:"},{"line_number":2161,"context_line":"            if int(percent) \u003c 100:"},{"line_number":2162,"context_line":"                return \u0027ongoing\u0027"},{"line_number":2163,"context_line":"            if int(percent) \u003d\u003d 100:"},{"line_number":2164,"context_line":"                return \u0027finished\u0027"},{"line_number":2165,"context_line":"        except (ValueError, TypeError) as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"af368565_bcacf74b","line":2162,"updated":"2025-09-11 16:07:19.000000000","message":"Ideally these should have been created as constants/enums and reused across ZAPI and REST implementation. May be we can fix that in future.","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"5cc192c91a83e67ad203424e1612b3e024723bbf","unresolved":false,"context_lines":[{"line_number":2159,"context_line":"        percent \u003d vol.get(\u0027clone.split_complete_percent\u0027)"},{"line_number":2160,"context_line":"        try:"},{"line_number":2161,"context_line":"            if int(percent) \u003c 100:"},{"line_number":2162,"context_line":"                return \u0027ongoing\u0027"},{"line_number":2163,"context_line":"            if int(percent) \u003d\u003d 100:"},{"line_number":2164,"context_line":"                return \u0027finished\u0027"},{"line_number":2165,"context_line":"        except (ValueError, TypeError) as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"c4db8a6d_02c82d10","line":2162,"in_reply_to":"af368565_bcacf74b","updated":"2025-12-01 10:54:52.000000000","message":"Acknowledged","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fb132e47caa087cd2b19bc2cf98b240f3653fa52","unresolved":true,"context_lines":[{"line_number":1808,"context_line":""},{"line_number":1809,"context_line":"        body \u003d {\u0027name\u0027: new_volume_name}"},{"line_number":1810,"context_line":"        self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027patch\u0027, body\u003dbody)"},{"line_number":1811,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":1812,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":1813,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":1814,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"03b517b1_eb511a25","line":1811,"updated":"2026-01-09 08:56:19.000000000","message":"This method should print message that the volume is renamed.","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"389db69792b0ac319e08ae4b210707460e5612a9","unresolved":false,"context_lines":[{"line_number":1808,"context_line":""},{"line_number":1809,"context_line":"        body \u003d {\u0027name\u0027: new_volume_name}"},{"line_number":1810,"context_line":"        self.send_request(f\u0027/storage/volumes/{uuid}\u0027, \u0027patch\u0027, body\u003dbody)"},{"line_number":1811,"context_line":"        msg \u003d _(\u0027Soft-deleted volume %(volume)s.\u0027)"},{"line_number":1812,"context_line":"        msg_args \u003d {\u0027volume\u0027: volume_name}"},{"line_number":1813,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":1814,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"0e409140_09e39de5","line":1811,"in_reply_to":"03b517b1_eb511a25","updated":"2026-01-09 10:42:58.000000000","message":"ok","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fb132e47caa087cd2b19bc2cf98b240f3653fa52","unresolved":true,"context_lines":[{"line_number":1872,"context_line":"            clones \u003d self.get_clones_of_parent_volume("},{"line_number":1873,"context_line":"                vserver, vol_name)"},{"line_number":1874,"context_line":"            if clones:"},{"line_number":1875,"context_line":"                if vol_state \u003d\u003d \u0027offline\u0027:"},{"line_number":1876,"context_line":"                    try:"},{"line_number":1877,"context_line":"                        client.online_volume(vol_name)"},{"line_number":1878,"context_line":"                    except Exception:"}],"source_content_type":"text/x-python","patch_set":16,"id":"dab5d244_fd8af7b4","line":1875,"updated":"2026-01-09 08:56:19.000000000","message":"Same comment here. Please use constants.","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"389db69792b0ac319e08ae4b210707460e5612a9","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"            clones \u003d self.get_clones_of_parent_volume("},{"line_number":1873,"context_line":"                vserver, vol_name)"},{"line_number":1874,"context_line":"            if clones:"},{"line_number":1875,"context_line":"                if vol_state \u003d\u003d \u0027offline\u0027:"},{"line_number":1876,"context_line":"                    try:"},{"line_number":1877,"context_line":"                        client.online_volume(vol_name)"},{"line_number":1878,"context_line":"                    except Exception:"}],"source_content_type":"text/x-python","patch_set":16,"id":"d1b98181_508e172a","line":1875,"in_reply_to":"dab5d244_fd8af7b4","updated":"2026-01-09 10:42:58.000000000","message":"Acknowledged","commit_id":"45cfb8b0992be36194fb8211fda18f66d0960678"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2f4cd44aa92102b6344b4b2fee6baecc65ac43dc","unresolved":true,"context_lines":[{"line_number":1825,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"    @na_utils.trace"},{"line_number":1828,"context_line":"    def soft_delete_volume(self, volume_name, in_prune\u003dFalse):"},{"line_number":1829,"context_line":"        \"\"\"Soft deletes a volume.\"\"\""},{"line_number":1830,"context_line":"        try:"},{"line_number":1831,"context_line":"            # Get volume UUID."}],"source_content_type":"text/x-python","patch_set":18,"id":"07807d3f_83ede72d","line":1828,"range":{"start_line":1828,"start_character":45,"end_line":1828,"end_character":60},"updated":"2026-01-12 21:52:16.000000000","message":"the name \"in_prune\" seems confusing here, my understanding is that you don\u0027t want this method to fail if \"EREST_VOLDEL_NOT_ALLOW_BY_CLONE\" is raised and this method is being invoked when \"pruning\".. \n\n\nThe implementation is different in the ZAPI code.. maybe call the parameter \"ignore_clone_related_errors\" ?","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7da8c8acdc076b8a02017405b52b27439c621d99","unresolved":false,"context_lines":[{"line_number":1825,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":1826,"context_line":""},{"line_number":1827,"context_line":"    @na_utils.trace"},{"line_number":1828,"context_line":"    def soft_delete_volume(self, volume_name, in_prune\u003dFalse):"},{"line_number":1829,"context_line":"        \"\"\"Soft deletes a volume.\"\"\""},{"line_number":1830,"context_line":"        try:"},{"line_number":1831,"context_line":"            # Get volume UUID."}],"source_content_type":"text/x-python","patch_set":18,"id":"956280bd_442005c2","line":1828,"range":{"start_line":1828,"start_character":45,"end_line":1828,"end_character":60},"in_reply_to":"07807d3f_83ede72d","updated":"2026-01-13 14:15:25.000000000","message":"renamed to \"return errors\", we can handle exception as well, but for better readability I changed for errors in periodic callback function.","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2f4cd44aa92102b6344b4b2fee6baecc65ac43dc","unresolved":true,"context_lines":[{"line_number":1844,"context_line":"                if in_prune:"},{"line_number":1845,"context_line":"                    return \u0027error\u0027"},{"line_number":1846,"context_line":"                raise exception.NetAppException(message\u003de.message)"},{"line_number":1847,"context_line":"        if in_prune:"},{"line_number":1848,"context_line":"            return \u0027success\u0027"},{"line_number":1849,"context_line":""},{"line_number":1850,"context_line":"    @na_utils.trace"},{"line_number":1851,"context_line":"    def delete_volume(self, volume_name, in_prune\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":18,"id":"4ea50dc9_0b154bc3","line":1848,"range":{"start_line":1847,"start_character":0,"end_line":1848,"end_character":28},"updated":"2026-01-12 21:52:16.000000000","message":"don\u0027t see a reason to do this, by default None is returned, and that\u0027s just fine per your code below","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7da8c8acdc076b8a02017405b52b27439c621d99","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"                if in_prune:"},{"line_number":1845,"context_line":"                    return \u0027error\u0027"},{"line_number":1846,"context_line":"                raise exception.NetAppException(message\u003de.message)"},{"line_number":1847,"context_line":"        if in_prune:"},{"line_number":1848,"context_line":"            return \u0027success\u0027"},{"line_number":1849,"context_line":""},{"line_number":1850,"context_line":"    @na_utils.trace"},{"line_number":1851,"context_line":"    def delete_volume(self, volume_name, in_prune\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":18,"id":"35e32545_8a167d69","line":1848,"range":{"start_line":1847,"start_character":0,"end_line":1848,"end_character":28},"in_reply_to":"4ea50dc9_0b154bc3","updated":"2026-01-13 14:15:25.000000000","message":"Acknowledged","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2f4cd44aa92102b6344b4b2fee6baecc65ac43dc","unresolved":true,"context_lines":[{"line_number":1848,"context_line":"            return \u0027success\u0027"},{"line_number":1849,"context_line":""},{"line_number":1850,"context_line":"    @na_utils.trace"},{"line_number":1851,"context_line":"    def delete_volume(self, volume_name, in_prune\u003dFalse):"},{"line_number":1852,"context_line":"        \"\"\"Deletes a volume.\"\"\""},{"line_number":1853,"context_line":"        return self.soft_delete_volume(volume_name, in_prune\u003din_prune)"},{"line_number":1854,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"941119e2_dd1bab07","line":1851,"range":{"start_line":1851,"start_character":41,"end_line":1851,"end_character":55},"updated":"2026-01-12 21:52:16.000000000","message":"delete_volume is invoked through lib_base and elsewhere, these invocations don\u0027t use \"in_prune\". I think NetApp\u0027s maintainers wanted to maintain the same signature for ONTAPI and REST API methods.","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7da8c8acdc076b8a02017405b52b27439c621d99","unresolved":true,"context_lines":[{"line_number":1848,"context_line":"            return \u0027success\u0027"},{"line_number":1849,"context_line":""},{"line_number":1850,"context_line":"    @na_utils.trace"},{"line_number":1851,"context_line":"    def delete_volume(self, volume_name, in_prune\u003dFalse):"},{"line_number":1852,"context_line":"        \"\"\"Deletes a volume.\"\"\""},{"line_number":1853,"context_line":"        return self.soft_delete_volume(volume_name, in_prune\u003din_prune)"},{"line_number":1854,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"abb5a0a9_d6024227","line":1851,"range":{"start_line":1851,"start_character":41,"end_line":1851,"end_character":55},"in_reply_to":"941119e2_dd1bab07","updated":"2026-01-13 14:15:25.000000000","message":"yes, its optional param.","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2f4cd44aa92102b6344b4b2fee6baecc65ac43dc","unresolved":true,"context_lines":[{"line_number":1868,"context_line":"            return []"},{"line_number":1869,"context_line":"        return result.get(\u0027records\u0027, [])"},{"line_number":1870,"context_line":""},{"line_number":1871,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":1872,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":1873,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":1874,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7ecaf2d8_37f01f33","line":1871,"updated":"2026-01-12 21:52:16.000000000","message":"@na_utils.trace","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7da8c8acdc076b8a02017405b52b27439c621d99","unresolved":false,"context_lines":[{"line_number":1868,"context_line":"            return []"},{"line_number":1869,"context_line":"        return result.get(\u0027records\u0027, [])"},{"line_number":1870,"context_line":""},{"line_number":1871,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":1872,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":1873,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":1874,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"27a8c11f_3dc02e62","line":1871,"in_reply_to":"7ecaf2d8_37f01f33","updated":"2026-01-13 14:15:25.000000000","message":"Done","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2f4cd44aa92102b6344b4b2fee6baecc65ac43dc","unresolved":true,"context_lines":[{"line_number":2226,"context_line":"            \u0027fields\u0027: \u0027clone.split_complete_percent\u0027"},{"line_number":2227,"context_line":"        }"},{"line_number":2228,"context_line":""},{"line_number":2229,"context_line":"        response \u003d self.send_request(\u0027/storage/volumes/\u0027, \u0027get\u0027, query\u003dquery)"},{"line_number":2230,"context_line":"        if not self._has_records(response):"},{"line_number":2231,"context_line":"            return na_utils.CLONE_SPLIT_STATUS_FINISHED"},{"line_number":2232,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"e0d29838_9fc16761","line":2229,"range":{"start_line":2229,"start_character":8,"end_line":2229,"end_character":77},"updated":"2026-01-12 21:52:16.000000000","message":"you\u0027re removing the NaApiError handling here.. send_request may not fail gracefully","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7da8c8acdc076b8a02017405b52b27439c621d99","unresolved":false,"context_lines":[{"line_number":2226,"context_line":"            \u0027fields\u0027: \u0027clone.split_complete_percent\u0027"},{"line_number":2227,"context_line":"        }"},{"line_number":2228,"context_line":""},{"line_number":2229,"context_line":"        response \u003d self.send_request(\u0027/storage/volumes/\u0027, \u0027get\u0027, query\u003dquery)"},{"line_number":2230,"context_line":"        if not self._has_records(response):"},{"line_number":2231,"context_line":"            return na_utils.CLONE_SPLIT_STATUS_FINISHED"},{"line_number":2232,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"19e862ba_b5ec4f83","line":2229,"range":{"start_line":2229,"start_character":8,"end_line":2229,"end_character":77},"in_reply_to":"e0d29838_9fc16761","updated":"2026-01-13 14:15:25.000000000","message":"its GET request, throughout file all GET request are checked with response code. So this one is also updated for same.","commit_id":"01cf538d117f20ee6bd6a34cf03e49c895d64980"}],"manila/share/drivers/netapp/dataontap/client/rest_api.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"0f6e2f9be308a0e581483777b1e4f27a6127f563","unresolved":true,"context_lines":[{"line_number":56,"context_line":"EREST_UNMOUNT_FAILED_LOCK \u003d \u0027917536\u0027"},{"line_number":57,"context_line":"EREST_CANNOT_MODITY_OFFLINE_VOLUME \u003d \u0027917533\u0027"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"EVOLDEL_NOT_ALLOW_BY_CLONE \u003d \u002715894\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class NaRetryableError(api.NaApiError):"}],"source_content_type":"text/x-python","patch_set":8,"id":"f7356dfa_f622f4b9","line":59,"updated":"2025-03-11 09:36:21.000000000","message":"This sticks out, is this needed? It is already in api.py","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b83cddfb591348114c44404e6f8d21a78593e514","unresolved":true,"context_lines":[{"line_number":56,"context_line":"EREST_UNMOUNT_FAILED_LOCK \u003d \u0027917536\u0027"},{"line_number":57,"context_line":"EREST_CANNOT_MODITY_OFFLINE_VOLUME \u003d \u0027917533\u0027"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"EVOLDEL_NOT_ALLOW_BY_CLONE \u003d \u002715894\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class NaRetryableError(api.NaApiError):"}],"source_content_type":"text/x-python","patch_set":8,"id":"c44643e9_44650986","line":59,"in_reply_to":"16a566cf_61258aad","updated":"2025-05-08 21:33:31.000000000","message":"It\u0027s incorrect too: https://docs.netapp.com/us-en/ontap-restapi/ontap/delete-storage-volumes-.html#error\n\nthe error codes in this file are prefixed: \"EREST_\" to distinguish ONTAPI error codes","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"47f106643cfdbf632901162ccb5377ada61a97cd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"EREST_UNMOUNT_FAILED_LOCK \u003d \u0027917536\u0027"},{"line_number":57,"context_line":"EREST_CANNOT_MODITY_OFFLINE_VOLUME \u003d \u0027917533\u0027"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"EVOLDEL_NOT_ALLOW_BY_CLONE \u003d \u002715894\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class NaRetryableError(api.NaApiError):"}],"source_content_type":"text/x-python","patch_set":8,"id":"a82d4fbf_fac176e7","line":59,"in_reply_to":"c44643e9_44650986","updated":"2025-05-09 16:58:09.000000000","message":"Done","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a904e0272b9c37c0ee66128b6bc72ca0ad510faf","unresolved":true,"context_lines":[{"line_number":56,"context_line":"EREST_UNMOUNT_FAILED_LOCK \u003d \u0027917536\u0027"},{"line_number":57,"context_line":"EREST_CANNOT_MODITY_OFFLINE_VOLUME \u003d \u0027917533\u0027"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"EVOLDEL_NOT_ALLOW_BY_CLONE \u003d \u002715894\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class NaRetryableError(api.NaApiError):"}],"source_content_type":"text/x-python","patch_set":8,"id":"16a566cf_61258aad","line":59,"in_reply_to":"f7356dfa_f622f4b9","updated":"2025-03-11 11:15:00.000000000","message":"it needs for tests in test_client_cmode_rest.py.","commit_id":"6fc3d5d47de54f8949ef5a3adf094e3d5a06e0e3"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"809f00418717482cb7b8b997aec5f0945232a999","unresolved":true,"context_lines":[{"line_number":4074,"context_line":""},{"line_number":4075,"context_line":"        self.prune_deleted_volumes()"},{"line_number":4076,"context_line":""},{"line_number":4077,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":4078,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":4079,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":4080,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"738be44d_e233e49f","line":4077,"range":{"start_line":4077,"start_character":3,"end_line":4077,"end_character":36},"updated":"2024-12-12 15:44:18.000000000","message":"I think you can optimize the code here, can you think though and optimize it.\nI suggested in my previous comments as below.\n\nif no clones:\n delete/destroy(volume)\nelse\n  if volume offline\n      make volume online\n      start the split operation","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"aa89b93bb8762cbe6df917db9bf95cb93b9eb102","unresolved":false,"context_lines":[{"line_number":4074,"context_line":""},{"line_number":4075,"context_line":"        self.prune_deleted_volumes()"},{"line_number":4076,"context_line":""},{"line_number":4077,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":4078,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""},{"line_number":4079,"context_line":"        LOG.debug(\u0027Checking for deleted volumes to prune.\u0027)"},{"line_number":4080,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"c1685949_65592ccc","line":4077,"range":{"start_line":4077,"start_character":3,"end_line":4077,"end_character":36},"in_reply_to":"738be44d_e233e49f","updated":"2024-12-12 16:30:55.000000000","message":"I was not willing to change from downstream code. updated, but I dont see any optimization.","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"809f00418717482cb7b8b997aec5f0945232a999","unresolved":true,"context_lines":[{"line_number":4086,"context_line":"            client \u003d copy.deepcopy(self._client)"},{"line_number":4087,"context_line":"            client.set_vserver(vserver)"},{"line_number":4088,"context_line":"            if volume_state \u003d\u003d \u0027offline\u0027:"},{"line_number":4089,"context_line":"                clones \u003d self._client.get_clones_of_parent_volume("},{"line_number":4090,"context_line":"                    vserver, volume_name)"},{"line_number":4091,"context_line":"                if clones:"},{"line_number":4092,"context_line":"                    # Found parent volume which has multiple clone childs, so"},{"line_number":4093,"context_line":"                    # make volume online. Once the volume will be online, we"}],"source_content_type":"text/x-python","patch_set":4,"id":"93526704_21159738","line":4090,"range":{"start_line":4089,"start_character":16,"end_line":4090,"end_character":41},"updated":"2024-12-12 15:44:18.000000000","message":"this you can move to before if condition, in this case no need to get the clone in line no 4123.","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"aa89b93bb8762cbe6df917db9bf95cb93b9eb102","unresolved":false,"context_lines":[{"line_number":4086,"context_line":"            client \u003d copy.deepcopy(self._client)"},{"line_number":4087,"context_line":"            client.set_vserver(vserver)"},{"line_number":4088,"context_line":"            if volume_state \u003d\u003d \u0027offline\u0027:"},{"line_number":4089,"context_line":"                clones \u003d self._client.get_clones_of_parent_volume("},{"line_number":4090,"context_line":"                    vserver, volume_name)"},{"line_number":4091,"context_line":"                if clones:"},{"line_number":4092,"context_line":"                    # Found parent volume which has multiple clone childs, so"},{"line_number":4093,"context_line":"                    # make volume online. Once the volume will be online, we"}],"source_content_type":"text/x-python","patch_set":4,"id":"eed56b85_043bd026","line":4090,"range":{"start_line":4089,"start_character":16,"end_line":4090,"end_character":41},"in_reply_to":"93526704_21159738","updated":"2024-12-12 16:30:55.000000000","message":"Done","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"809f00418717482cb7b8b997aec5f0945232a999","unresolved":true,"context_lines":[{"line_number":4120,"context_line":"                # These must be parent volume which was brought online in"},{"line_number":4121,"context_line":"                # previous callback. If no clones found means all splits are"},{"line_number":4122,"context_line":"                # completed, so offline the volume."},{"line_number":4123,"context_line":"                clones \u003d self._client.get_clones_of_parent_volume("},{"line_number":4124,"context_line":"                    vserver, volume_name)"},{"line_number":4125,"context_line":"                if not clones:"},{"line_number":4126,"context_line":"                    try:"},{"line_number":4127,"context_line":"                        client.offline_volume(volume_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"73a6d307_1c069695","line":4124,"range":{"start_line":4123,"start_character":16,"end_line":4124,"end_character":41},"updated":"2024-12-12 15:44:18.000000000","message":"this you can delete if you moving this code before if condition","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"aa89b93bb8762cbe6df917db9bf95cb93b9eb102","unresolved":false,"context_lines":[{"line_number":4120,"context_line":"                # These must be parent volume which was brought online in"},{"line_number":4121,"context_line":"                # previous callback. If no clones found means all splits are"},{"line_number":4122,"context_line":"                # completed, so offline the volume."},{"line_number":4123,"context_line":"                clones \u003d self._client.get_clones_of_parent_volume("},{"line_number":4124,"context_line":"                    vserver, volume_name)"},{"line_number":4125,"context_line":"                if not clones:"},{"line_number":4126,"context_line":"                    try:"},{"line_number":4127,"context_line":"                        client.offline_volume(volume_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"e2fa6010_b552fb5b","line":4124,"range":{"start_line":4123,"start_character":16,"end_line":4124,"end_character":41},"in_reply_to":"73a6d307_1c069695","updated":"2024-12-12 16:30:55.000000000","message":"Done","commit_id":"e0f37dff8a9116a48072d48d953bbf37ad4aa0d5"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"cf828a92b63a3ba603efe49e87fb2f52395938df","unresolved":true,"context_lines":[{"line_number":4229,"context_line":"                self._apply_snapdir_visibility("},{"line_number":4230,"context_line":"                    hide_snapdir, share_name, vserver_client)"},{"line_number":4231,"context_line":""},{"line_number":4232,"context_line":"        self.prune_deleted_volumes()"},{"line_number":4233,"context_line":""},{"line_number":4234,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":4235,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"58d03693_f1ab5e79","line":4232,"range":{"start_line":4232,"start_character":0,"end_line":4232,"end_character":36},"updated":"2025-09-10 21:33:41.000000000","message":"this would delay startup of the service itself? Can we just let the housekeeping thread do this?","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"55faee207ba79f04433510db07ef392f0a937c98","unresolved":false,"context_lines":[{"line_number":4229,"context_line":"                self._apply_snapdir_visibility("},{"line_number":4230,"context_line":"                    hide_snapdir, share_name, vserver_client)"},{"line_number":4231,"context_line":""},{"line_number":4232,"context_line":"        self.prune_deleted_volumes()"},{"line_number":4233,"context_line":""},{"line_number":4234,"context_line":"    def prune_deleted_volumes(self):"},{"line_number":4235,"context_line":"        \"\"\"Prunes deleted volumes.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1e17997b_09773e25","line":4232,"range":{"start_line":4232,"start_character":0,"end_line":4232,"end_character":36},"in_reply_to":"58d03693_f1ab5e79","updated":"2025-09-11 17:45:53.000000000","message":"yes, fixed it.","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"63c8288d32bbf7838e97094a4925efcedacdf822","unresolved":true,"context_lines":[{"line_number":4288,"context_line":"                        except Exception:"},{"line_number":4289,"context_line":"                            LOG.error(\"Volume clone split failed for \""},{"line_number":4290,"context_line":"                                      \"volume %s\", vol_name)"},{"line_number":4291,"context_line":"                elif vol_state \u003d\u003d \u0027online\u0027:"},{"line_number":4292,"context_line":"                    try:"},{"line_number":4293,"context_line":"                        client.offline_volume(vol_name)"},{"line_number":4294,"context_line":"                    except Exception:"}],"source_content_type":"text/x-python","patch_set":14,"id":"60a4e5a3_bb9b5ecc","line":4291,"updated":"2025-09-11 16:07:19.000000000","message":"This is not required for REST, ZAPI might require a volume to be offlined before deleting. But we could have saved one step wrt REST by just calling delete irrespective of whether its online or offline.","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"55faee207ba79f04433510db07ef392f0a937c98","unresolved":false,"context_lines":[{"line_number":4288,"context_line":"                        except Exception:"},{"line_number":4289,"context_line":"                            LOG.error(\"Volume clone split failed for \""},{"line_number":4290,"context_line":"                                      \"volume %s\", vol_name)"},{"line_number":4291,"context_line":"                elif vol_state \u003d\u003d \u0027online\u0027:"},{"line_number":4292,"context_line":"                    try:"},{"line_number":4293,"context_line":"                        client.offline_volume(vol_name)"},{"line_number":4294,"context_line":"                    except Exception:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f468c04_78c8adec","line":4291,"in_reply_to":"60a4e5a3_bb9b5ecc","updated":"2025-09-11 17:45:53.000000000","message":"Done","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"99e91182dad4fa4966eb626b8b5274f0d88f58b3","unresolved":true,"context_lines":[{"line_number":4288,"context_line":"                        except Exception:"},{"line_number":4289,"context_line":"                            LOG.error(\"Volume clone split failed for \""},{"line_number":4290,"context_line":"                                      \"volume %s\", vol_name)"},{"line_number":4291,"context_line":"                elif vol_state \u003d\u003d \u0027online\u0027:"},{"line_number":4292,"context_line":"                    try:"},{"line_number":4293,"context_line":"                        client.offline_volume(vol_name)"},{"line_number":4294,"context_line":"                    except Exception:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3ef05824_4b3e1d73","line":4291,"in_reply_to":"60a4e5a3_bb9b5ecc","updated":"2025-09-11 17:34:59.000000000","message":"That\u0027s worth fixing in a follow up comment - maybe add a parameter \"for_delete (default value being True)\" and let the method in client_cmode_rest.py return doing nothing; thanks for noting this","commit_id":"6807a1702b5a694d87fc8d19738ddac705e4138b"}],"manila/share/drivers/netapp/utils.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"1fc670d5fab21e1971ce65cfaa78e4bcc889f669","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"ABSOLUTE_MAX_INODES \u003d 2_040_109_45"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"CLONE_SPILT_STATUS_ONGOING \u003d \u0027ongoing\u0027"},{"line_number":58,"context_line":"CLONE_SPILT_STATUS_UNKNOWN \u003d \u0027unknown\u0027"},{"line_number":59,"context_line":"CLONE_SPILT_STATUS_FINISHED \u003d \u0027finished\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class NetAppDriverException(exception.ShareBackendException):"},{"line_number":63,"context_line":"    message \u003d _(\"NetApp Manila Driver exception.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"f7ce8480_4c8c8ba7","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":0},"updated":"2026-01-12 08:08:23.000000000","message":"Typos: CLONE_SPLIT_STATUS_XXX\n\n(search and replace /spilt/split/ in all changed places)","commit_id":"1984b057a283f82737a8cef14450dba3685477f8"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"b3276bfbfbf0488face4cca287f2c70b840c6c02","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"ABSOLUTE_MAX_INODES \u003d 2_040_109_45"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"CLONE_SPILT_STATUS_ONGOING \u003d \u0027ongoing\u0027"},{"line_number":58,"context_line":"CLONE_SPILT_STATUS_UNKNOWN \u003d \u0027unknown\u0027"},{"line_number":59,"context_line":"CLONE_SPILT_STATUS_FINISHED \u003d \u0027finished\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class NetAppDriverException(exception.ShareBackendException):"},{"line_number":63,"context_line":"    message \u003d _(\"NetApp Manila Driver exception.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"5bec35b6_d49ecba3","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":0},"in_reply_to":"f7ce8480_4c8c8ba7","updated":"2026-01-12 14:37:20.000000000","message":"Done","commit_id":"1984b057a283f82737a8cef14450dba3685477f8"}]}
