)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"c12a08a6c0e2364a95e065827a399d86420a9d4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"98af29ab_c1e9b8d7","updated":"2026-07-30 10:08:43.000000000","message":"Create share from snapshot UT coverage is in progress, will be updated shortly.\nOpening the PR for review.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ccdcbdb6_965af6f8","updated":"2026-07-31 05:10:35.000000000","message":"Please take a look at comments.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"fb8a11c40deb150e8a3865d83ebada362498763b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"31a076f1_8539cf61","updated":"2026-07-30 12:58:33.000000000","message":"recheck","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"dfc6feeba2ae5e1eee49bc1d1ce258141ebe1d36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5966824e_a54bf1ae","updated":"2026-08-03 11:16:58.000000000","message":"Release notes are missing. Please add a release note.","commit_id":"5202cdf979b43771e9a811c896ac2f90a822058a"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f6bd4b5f54bd01f5c20a7ae19c0ed01af6ec52bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"56bfd9d6_252e305d","in_reply_to":"5966824e_a54bf1ae","updated":"2026-08-04 06:37:08.000000000","message":"Done","commit_id":"5202cdf979b43771e9a811c896ac2f90a822058a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"4d9adc2fc93507d449d93a0a22678ceb2a43a9a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"52f95618_a346e8a1","updated":"2026-08-05 05:22:50.000000000","message":"LGTM","commit_id":"4586cbd76ac5e4a5958eb48cc11e875221ef2014"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"ade65f99262f37b3a8974ef51935ca5f0262df4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0d97f351_fd252a4e","updated":"2026-08-11 03:47:48.000000000","message":"recheck","commit_id":"e2943aec51d1204941188d4778ca49e3bdfc592e"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"c4289f4bdf5cd644352844814a8c5682f46c9cb4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1c492bce_64386297","updated":"2026-08-06 05:57:58.000000000","message":"recheck","commit_id":"e2943aec51d1204941188d4778ca49e3bdfc592e"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"8a08b5fb8cb90f21ddfa1b356f0841bf9220a214","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"fcb00af8_706a6829","updated":"2026-08-07 11:09:03.000000000","message":"recheck","commit_id":"e2943aec51d1204941188d4778ca49e3bdfc592e"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"726630e81ece318080b45dcc589395c002fdf8b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"9d26ee28_0544cac8","updated":"2026-08-12 09:44:15.000000000","message":"recheck","commit_id":"90260cab69c18c156743ba1587561a537f9a8bec"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f765f3b6ca0033df6c88e051639b2477d6b9d5cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"aeb5a3cb_8f3c99ec","updated":"2026-08-13 05:14:02.000000000","message":"recheck","commit_id":"90260cab69c18c156743ba1587561a537f9a8bec"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"99efad97b89e0c9bd4cce24a1943157e873f196d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"e6d312ca_273f1338","updated":"2026-08-12 13:19:51.000000000","message":"recheck","commit_id":"90260cab69c18c156743ba1587561a537f9a8bec"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"4b271172d577f6aeb03a87517bd744e80899828c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"42fb8b1a_0adb2aa2","updated":"2026-08-21 06:00:34.000000000","message":"run-NetApp CI","commit_id":"9e9a8f822d8ea2958e88bf857470413767660e0d"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"c4a1a9505c2e2af3fe072a42c61251745ab0c5c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"e022d270_e4d03013","updated":"2026-08-24 20:12:28.000000000","message":"Run-NetApp CI","commit_id":"374693b5d3fc9e30627bf004938ec2808caa8359"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"5820ab0e756bb9e6b0c5c627cd84bc0ff848db46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"07ea6188_64c07d12","updated":"2026-08-25 06:07:02.000000000","message":"recheck","commit_id":"374693b5d3fc9e30627bf004938ec2808caa8359"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"5f07ba939510dec09ed62671620d1d010af080a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"5234abb7_1ee9ff91","updated":"2026-08-25 08:24:49.000000000","message":"Nice! Find a few minor comments inline","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"34ad34c1f5d6130c1e2cc9aeafc5dbefc8465187","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"08685035_a46e91a9","updated":"2026-08-26 05:48:08.000000000","message":"recheck","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f94ecdf6a3359bd115dd8a683b180efdae105bcf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"5bdb0ebd_3cc260f0","updated":"2026-08-26 09:08:14.000000000","message":"@maurice.escher@sap.com Thanks for the feedback. Fixed all the comments, please review/approve.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"49cef15720f871eb5a05b147f7fe6c3a4250078e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"2a6dfed0_f7779b67","updated":"2026-08-26 16:40:12.000000000","message":"LGTM","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"263946888c0d975a1625c10c872a0989db50eade","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"af464d52_43def974","updated":"2026-08-26 12:22:19.000000000","message":"LGTM ..!","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"a2caaf5c7d9f67c6a22f8d865a56b4759cd7d240","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"1f30c078_f5ac4d74","updated":"2026-08-26 12:24:31.000000000","message":"Run-NetApp CI","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"790babcc4cedf8b4f9bb5247b3c93d62ecf87ab8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"c1b4213e_9183f300","updated":"2026-08-26 20:24:19.000000000","message":"Thank you for working on this change, please take a look at the comments inline","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"6691a22e1cb1e71b6bdc4f2ae83456644e0b1eaa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"5b1b2702_c50a6c26","updated":"2026-08-26 15:54:11.000000000","message":"lgtm","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"e40d449c7b1b3a4ce37b24bd4d087c370aebf90b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"562bb5d7_03a81ec2","updated":"2026-08-26 09:08:35.000000000","message":"recheck","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"14fdf841_a1bc315b","updated":"2026-08-27 11:14:04.000000000","message":"Fixed/responded to some of the comments.","commit_id":"f78591e1d9f10f5b3851d0944246f7257d9d526a"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"c6f2de02be69527f5290de524241dd0ea0f068b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"13181436_0a2aa747","updated":"2026-08-28 16:05:00.000000000","message":"@gouthampravi@gmail.com Addressed your feedback comments.\nPlease review.","commit_id":"63f8671603fb8306344a60b4b7ea4409b21df669"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"9fb2f668eb46baa5cb49675b2010b46e80999791","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"27e883a1_3068844f","updated":"2026-08-29 05:27:05.000000000","message":"recheck","commit_id":"cdbc47dd6a9aef973150e4a87efe63149f846fbe"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"c57a7f800fe13e01ded34e26d0bfe5fd2185e8d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"97bddc0f_cfd23b5e","updated":"2026-08-28 17:41:49.000000000","message":"run-NetApp CI","commit_id":"cdbc47dd6a9aef973150e4a87efe63149f846fbe"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"287cc03391720f1e80266d7563b88f7519c529f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"cbc756dc_05286dc3","updated":"2026-08-31 11:39:41.000000000","message":"Run-NetApp CI","commit_id":"18c62b51d03a17826762a968bf8180bb9d134113"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"fae6701286028e3d096d39fdfc015b798a6e5e10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"a320c158_44f4b96f","updated":"2026-08-31 04:53:07.000000000","message":"recheck","commit_id":"18c62b51d03a17826762a968bf8180bb9d134113"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"e6869044b0220410b2b3f5d1cbc74bc3f0df102b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"dbe191ed_3d09f07d","updated":"2026-08-31 09:16:18.000000000","message":"recheck","commit_id":"18c62b51d03a17826762a968bf8180bb9d134113"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"7dedba5506a62a88234f915376fdb5cd1075e2dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"ec6a2aa8_726e62dc","updated":"2026-09-01 18:03:27.000000000","message":"hi @gouthampravi@gmail.com have updated the comments.","commit_id":"32adc47212ec40be5420c1f623e5713e6c572934"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"fc3eedc40cb51eb1c0c3d47078be543e5726b974","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"74dbd379_915b601d","updated":"2026-09-02 04:06:00.000000000","message":"recheck","commit_id":"34c33b70fd5a6565c01ebdf49ce9b6ab2155e1ac"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"bee49aac5ed8d69597b6f7c9ba266284875cacd2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"e432f8d3_22e5a605","updated":"2026-09-02 13:16:20.000000000","message":"recheck","commit_id":"34c33b70fd5a6565c01ebdf49ce9b6ab2155e1ac"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"c94ab4741143c642a62d37222fa40a8fb5b636b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"7e281395_6435107a","in_reply_to":"e432f8d3_22e5a605","updated":"2026-09-02 14:06:43.000000000","message":"hey @manideep.openstack@gmail.com it seems that CI failed because of pep8 issues that must be resolved. Please don\u0027t re-run CI in that case. The comments must be addressed.","commit_id":"34c33b70fd5a6565c01ebdf49ce9b6ab2155e1ac"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"3d5ecb24e78e52e5eefa1c350dab32c4b08f3abb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"fb3ab2d6_01fa246d","updated":"2026-09-04 10:15:23.000000000","message":"recheck","commit_id":"a18babe0e4ee753d9f33957783236878f9f46c61"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"3a93668a2a7e3a88282e6c0f3cee3867edb528eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"abc7c1f0_afa2854a","updated":"2026-09-03 08:47:57.000000000","message":"run-NetApp CI","commit_id":"a18babe0e4ee753d9f33957783236878f9f46c61"}],"manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":5853,"context_line":""},{"line_number":5854,"context_line":"    @na_utils.trace"},{"line_number":5855,"context_line":"    def update_volume_raw(self, svm_name, volume_name, body):"},{"line_number":5856,"context_line":"        \"\"\"Applies a raw PATCH body to a volume."},{"line_number":5857,"context_line":""},{"line_number":5858,"context_line":"        :param svm_name: name of the owning SVM."},{"line_number":5859,"context_line":"        :param volume_name: name of the volume."}],"source_content_type":"text/x-python","patch_set":8,"id":"b6350b38_d2e8d97e","line":5856,"range":{"start_line":5856,"start_character":21,"end_line":5856,"end_character":30},"updated":"2026-07-31 05:10:35.000000000","message":"What is meant by raw PATCH?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"8f79f361ee4d8965a07662e4e1ea52215036e91f","unresolved":false,"context_lines":[{"line_number":5853,"context_line":""},{"line_number":5854,"context_line":"    @na_utils.trace"},{"line_number":5855,"context_line":"    def update_volume_raw(self, svm_name, volume_name, body):"},{"line_number":5856,"context_line":"        \"\"\"Applies a raw PATCH body to a volume."},{"line_number":5857,"context_line":""},{"line_number":5858,"context_line":"        :param svm_name: name of the owning SVM."},{"line_number":5859,"context_line":"        :param volume_name: name of the volume."}],"source_content_type":"text/x-python","patch_set":8,"id":"845ae3a6_91473675","line":5856,"range":{"start_line":5856,"start_character":21,"end_line":5856,"end_character":30},"in_reply_to":"b17ff162_a077e1c1","updated":"2026-08-02 05:59:40.000000000","message":"typo patch_volume()","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":5853,"context_line":""},{"line_number":5854,"context_line":"    @na_utils.trace"},{"line_number":5855,"context_line":"    def update_volume_raw(self, svm_name, volume_name, body):"},{"line_number":5856,"context_line":"        \"\"\"Applies a raw PATCH body to a volume."},{"line_number":5857,"context_line":""},{"line_number":5858,"context_line":"        :param svm_name: name of the owning SVM."},{"line_number":5859,"context_line":"        :param volume_name: name of the volume."}],"source_content_type":"text/x-python","patch_set":8,"id":"b17ff162_a077e1c1","line":5856,"range":{"start_line":5856,"start_character":21,"end_line":5856,"end_character":30},"in_reply_to":"b6350b38_d2e8d97e","updated":"2026-08-02 05:58:11.000000000","message":"Done\nRenamed as patch_update","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"5f07ba939510dec09ed62671620d1d010af080a3","unresolved":true,"context_lines":[{"line_number":1936,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":1937,"context_line":""},{"line_number":1938,"context_line":"    @na_utils.trace"},{"line_number":1939,"context_line":"    def set_volume_smas_protection(self, svm_name, volume_name, protection):"},{"line_number":1940,"context_line":"        \"\"\"Set the SMAS protection attribute on a volume.\"\"\""},{"line_number":1941,"context_line":"        volume \u003d self._get_volume_by_args("},{"line_number":1942,"context_line":"            vol_name\u003dvolume_name, vserver\u003dsvm_name)"}],"source_content_type":"text/x-python","patch_set":17,"id":"2e830e78_d1680384","line":1939,"updated":"2026-08-25 08:24:49.000000000","message":"This method is redundant, simply use patch_volume() below","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f94ecdf6a3359bd115dd8a683b180efdae105bcf","unresolved":false,"context_lines":[{"line_number":1936,"context_line":"        LOG.debug(msg, msg_args)"},{"line_number":1937,"context_line":""},{"line_number":1938,"context_line":"    @na_utils.trace"},{"line_number":1939,"context_line":"    def set_volume_smas_protection(self, svm_name, volume_name, protection):"},{"line_number":1940,"context_line":"        \"\"\"Set the SMAS protection attribute on a volume.\"\"\""},{"line_number":1941,"context_line":"        volume \u003d self._get_volume_by_args("},{"line_number":1942,"context_line":"            vol_name\u003dvolume_name, vserver\u003dsvm_name)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3cc553_fd50e9ec","line":1939,"in_reply_to":"2e830e78_d1680384","updated":"2026-08-26 09:08:14.000000000","message":"Done","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"790babcc4cedf8b4f9bb5247b3c93d62ecf87ab8","unresolved":true,"context_lines":[{"line_number":1937,"context_line":""},{"line_number":1938,"context_line":"    @na_utils.trace"},{"line_number":1939,"context_line":"    def soft_delete_volume(self, volume_name,"},{"line_number":1940,"context_line":"                           return_errors\u003dFalse):"},{"line_number":1941,"context_line":"        \"\"\"Soft deletes a volume.\"\"\""},{"line_number":1942,"context_line":"        try:"},{"line_number":1943,"context_line":"            # Get volume UUID."}],"source_content_type":"text/x-python","patch_set":18,"id":"1b7c624e_57451385","line":1940,"updated":"2026-08-26 20:24:19.000000000","message":"please undo as no changes were made here. we should avoid upsetting the commit history and future git blames","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1937,"context_line":""},{"line_number":1938,"context_line":"    @na_utils.trace"},{"line_number":1939,"context_line":"    def soft_delete_volume(self, volume_name,"},{"line_number":1940,"context_line":"                           return_errors\u003dFalse):"},{"line_number":1941,"context_line":"        \"\"\"Soft deletes a volume.\"\"\""},{"line_number":1942,"context_line":"        try:"},{"line_number":1943,"context_line":"            # Get volume UUID."}],"source_content_type":"text/x-python","patch_set":18,"id":"41a003d7_fddd3b11","line":1940,"in_reply_to":"1b7c624e_57451385","updated":"2026-08-27 11:14:04.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"790babcc4cedf8b4f9bb5247b3c93d62ecf87ab8","unresolved":true,"context_lines":[{"line_number":4283,"context_line":"        clone_info \u003d volume.get(\u0027clone\u0027) or {}"},{"line_number":4284,"context_line":"        percent \u003d clone_info.get(\u0027split_complete_percent\u0027)"},{"line_number":4285,"context_line":"        if percent is not None:"},{"line_number":4286,"context_line":"            # clone.split_complete_percent helps in confirming if the clone"},{"line_number":4287,"context_line":"            # split operation has fully completed. Sometimes the clone flag"},{"line_number":4288,"context_line":"            # can change to False before that copy has actually finished."},{"line_number":4289,"context_line":"            try:"},{"line_number":4290,"context_line":"                return int(percent) \u003e\u003d 100"},{"line_number":4291,"context_line":"            except (TypeError, ValueError):"}],"source_content_type":"text/x-python","patch_set":18,"id":"edf9711b_213c400f","line":4288,"range":{"start_line":4286,"start_character":12,"end_line":4288,"end_character":73},"updated":"2026-08-26 20:24:19.000000000","message":"code feels self explanatory, is this comment LLM generated?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"dad7107e4fb63ff7bc7943ac2f41523d61e6dfce","unresolved":false,"context_lines":[{"line_number":4283,"context_line":"        clone_info \u003d volume.get(\u0027clone\u0027) or {}"},{"line_number":4284,"context_line":"        percent \u003d clone_info.get(\u0027split_complete_percent\u0027)"},{"line_number":4285,"context_line":"        if percent is not None:"},{"line_number":4286,"context_line":"            # clone.split_complete_percent helps in confirming if the clone"},{"line_number":4287,"context_line":"            # split operation has fully completed. Sometimes the clone flag"},{"line_number":4288,"context_line":"            # can change to False before that copy has actually finished."},{"line_number":4289,"context_line":"            try:"},{"line_number":4290,"context_line":"                return int(percent) \u003e\u003d 100"},{"line_number":4291,"context_line":"            except (TypeError, ValueError):"}],"source_content_type":"text/x-python","patch_set":18,"id":"b0ef2be0_94cb90b6","line":4288,"range":{"start_line":4286,"start_character":12,"end_line":4288,"end_character":73},"in_reply_to":"edf9711b_213c400f","updated":"2026-08-27 05:11:04.000000000","message":"No this was written manually. Just an info as to why we introduced a percent check now.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":879,"context_line":""},{"line_number":880,"context_line":"    @staticmethod"},{"line_number":881,"context_line":"    def _share_server_has_replica(share_server):"},{"line_number":882,"context_line":"        \"\"\"Return True if the share server has an SMAS replica."},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"        Safe base-class default: always returns False so that callers in"},{"line_number":885,"context_line":"        the shared create_share_from_snapshot path do not need to guard"},{"line_number":886,"context_line":"        against AttributeError when running under the single-SVM driver"},{"line_number":887,"context_line":"        (DHSS\u003dFalse) or against share servers that carry no replica list."},{"line_number":888,"context_line":"        The multi-SVM subclass overrides this with the real check."},{"line_number":889,"context_line":"        \"\"\""},{"line_number":890,"context_line":"        return False"},{"line_number":891,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"6d176f20_d5097a29","line":888,"range":{"start_line":882,"start_character":63,"end_line":888,"end_character":66},"updated":"2026-08-27 07:04:50.000000000","message":"nit: not useful; drop","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":879,"context_line":""},{"line_number":880,"context_line":"    @staticmethod"},{"line_number":881,"context_line":"    def _share_server_has_replica(share_server):"},{"line_number":882,"context_line":"        \"\"\"Return True if the share server has an SMAS replica."},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"        Safe base-class default: always returns False so that callers in"},{"line_number":885,"context_line":"        the shared create_share_from_snapshot path do not need to guard"},{"line_number":886,"context_line":"        against AttributeError when running under the single-SVM driver"},{"line_number":887,"context_line":"        (DHSS\u003dFalse) or against share servers that carry no replica list."},{"line_number":888,"context_line":"        The multi-SVM subclass overrides this with the real check."},{"line_number":889,"context_line":"        \"\"\""},{"line_number":890,"context_line":"        return False"},{"line_number":891,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"b4b45f89_121ed126","line":888,"range":{"start_line":882,"start_character":63,"end_line":888,"end_character":66},"in_reply_to":"6d176f20_d5097a29","updated":"2026-08-27 11:14:04.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":898,"context_line":"                                   vserver_client)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    @na_utils.trace"},{"line_number":901,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":902,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":903,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":904,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"}],"source_content_type":"text/x-python","patch_set":18,"id":"6484312f_83adeb10","line":901,"range":{"start_line":901,"start_character":0,"end_line":901,"end_character":66},"updated":"2026-08-27 07:04:50.000000000","message":"This method has become so long that it\u0027s gotten so hard to read/grok what it\u0027s doing anymore. It\u0027s bad to see this pattern continue as the driver adds more features.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"37d01f359f3ee249a6105a07c51c35fd97256d29","unresolved":false,"context_lines":[{"line_number":898,"context_line":"                                   vserver_client)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    @na_utils.trace"},{"line_number":901,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":902,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":903,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":904,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"}],"source_content_type":"text/x-python","patch_set":18,"id":"85d44e20_0adb4755","line":901,"range":{"start_line":901,"start_character":0,"end_line":901,"end_character":66},"in_reply_to":"6484312f_83adeb10","updated":"2026-08-28 12:00:50.000000000","message":"Yes completely agreed with this concern. Noted that in subsequent changes we will try to modularize this function.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"790babcc4cedf8b4f9bb5247b3c93d62ecf87ab8","unresolved":true,"context_lines":[{"line_number":903,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":904,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"        # If share is part of SVM SMAS NAS protection, reject if not in_sync."},{"line_number":907,"context_line":"        if self._share_server_has_replica(share_server):"},{"line_number":908,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"},{"line_number":909,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"e24402de_de91f373","line":906,"range":{"start_line":906,"start_character":8,"end_line":906,"end_character":77},"updated":"2026-08-26 20:24:19.000000000","message":"code should be self explanatory as it is","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"37d01f359f3ee249a6105a07c51c35fd97256d29","unresolved":false,"context_lines":[{"line_number":903,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":904,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"        # If share is part of SVM SMAS NAS protection, reject if not in_sync."},{"line_number":907,"context_line":"        if self._share_server_has_replica(share_server):"},{"line_number":908,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"},{"line_number":909,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"72e8e488_36831904","line":906,"range":{"start_line":906,"start_character":8,"end_line":906,"end_character":77},"in_reply_to":"46c3cfa0_348b2cbc","updated":"2026-08-28 12:00:50.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":903,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":904,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"        # If share is part of SVM SMAS NAS protection, reject if not in_sync."},{"line_number":907,"context_line":"        if self._share_server_has_replica(share_server):"},{"line_number":908,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"},{"line_number":909,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"46c3cfa0_348b2cbc","line":906,"range":{"start_line":906,"start_character":8,"end_line":906,"end_character":77},"in_reply_to":"e24402de_de91f373","updated":"2026-08-27 07:04:50.000000000","message":"+1","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"790babcc4cedf8b4f9bb5247b3c93d62ecf87ab8","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"            parent_aggr \u003d share_utils.extract_host(parent_share[\u0027host\u0027],"},{"line_number":1014,"context_line":"                                                   level\u003d\u0027pool\u0027)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        # SMAS NAS pre-check: volume rehost across SVMs on the same cluster"},{"line_number":1017,"context_line":"        # is not supported when the destination share server is under an SM-as"},{"line_number":1018,"context_line":"        # NAS relationship.  Reject here, before we enter the try/except block,"},{"line_number":1019,"context_line":"        # so the actionable message is not swallowed by the generic handler."}],"source_content_type":"text/x-python","patch_set":18,"id":"8d59a823_1adfa329","line":1016,"range":{"start_line":1016,"start_character":30,"end_line":1016,"end_character":43},"updated":"2026-08-26 20:24:19.000000000","message":"not rehost","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"37d01f359f3ee249a6105a07c51c35fd97256d29","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"            parent_aggr \u003d share_utils.extract_host(parent_share[\u0027host\u0027],"},{"line_number":1014,"context_line":"                                                   level\u003d\u0027pool\u0027)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        # SMAS NAS pre-check: volume rehost across SVMs on the same cluster"},{"line_number":1017,"context_line":"        # is not supported when the destination share server is under an SM-as"},{"line_number":1018,"context_line":"        # NAS relationship.  Reject here, before we enter the try/except block,"},{"line_number":1019,"context_line":"        # so the actionable message is not swallowed by the generic handler."}],"source_content_type":"text/x-python","patch_set":18,"id":"ac151c13_b9015e79","line":1016,"range":{"start_line":1016,"start_character":30,"end_line":1016,"end_character":43},"in_reply_to":"5eca7906_2310baf6","updated":"2026-08-28 12:00:50.000000000","message":"Have kept it as rehost in the comment. But agreed that in the user facing message it has to be updated to migration.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"            parent_aggr \u003d share_utils.extract_host(parent_share[\u0027host\u0027],"},{"line_number":1014,"context_line":"                                                   level\u003d\u0027pool\u0027)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        # SMAS NAS pre-check: volume rehost across SVMs on the same cluster"},{"line_number":1017,"context_line":"        # is not supported when the destination share server is under an SM-as"},{"line_number":1018,"context_line":"        # NAS relationship.  Reject here, before we enter the try/except block,"},{"line_number":1019,"context_line":"        # so the actionable message is not swallowed by the generic handler."}],"source_content_type":"text/x-python","patch_set":18,"id":"5eca7906_2310baf6","line":1016,"range":{"start_line":1016,"start_character":30,"end_line":1016,"end_character":43},"in_reply_to":"729ebbd2_8613a17b","updated":"2026-08-27 07:04:50.000000000","message":"Comments are for maintainers, exception messages are for operators. The exception message below confuses me. \n\n\"rehost\" may be ONTAP terminology, but, how does it factor into cloning a snapshot into a new share?\n\nI understand ONTAP has some limitations as you describe; but, can you explain this better to someone that understands the manila operation being performed (\"creating a share from a snapshot\")?\n\nTypically this operation is invoked by an end user.. so apart from seeing the share go to error, they don\u0027t see much. An administrator can pull up logs to triage.. but, in an admin\u0027s shoes i\u0027d be confused what i need to do to get things to work.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"dad7107e4fb63ff7bc7943ac2f41523d61e6dfce","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"            parent_aggr \u003d share_utils.extract_host(parent_share[\u0027host\u0027],"},{"line_number":1014,"context_line":"                                                   level\u003d\u0027pool\u0027)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        # SMAS NAS pre-check: volume rehost across SVMs on the same cluster"},{"line_number":1017,"context_line":"        # is not supported when the destination share server is under an SM-as"},{"line_number":1018,"context_line":"        # NAS relationship.  Reject here, before we enter the try/except block,"},{"line_number":1019,"context_line":"        # so the actionable message is not swallowed by the generic handler."}],"source_content_type":"text/x-python","patch_set":18,"id":"729ebbd2_8613a17b","line":1016,"range":{"start_line":1016,"start_character":30,"end_line":1016,"end_character":43},"in_reply_to":"8d59a823_1adfa329","updated":"2026-08-27 05:11:04.000000000","message":"Should we change to migrate ? In ONTAP its called rehost.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"7dedba5506a62a88234f915376fdb5cd1075e2dc","unresolved":false,"context_lines":[{"line_number":1013,"context_line":"            parent_aggr \u003d share_utils.extract_host(parent_share[\u0027host\u0027],"},{"line_number":1014,"context_line":"                                                   level\u003d\u0027pool\u0027)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        # SMAS NAS pre-check: volume rehost across SVMs on the same cluster"},{"line_number":1017,"context_line":"        # is not supported when the destination share server is under an SM-as"},{"line_number":1018,"context_line":"        # NAS relationship.  Reject here, before we enter the try/except block,"},{"line_number":1019,"context_line":"        # so the actionable message is not swallowed by the generic handler."}],"source_content_type":"text/x-python","patch_set":18,"id":"101cbb26_0f53cf2d","line":1016,"range":{"start_line":1016,"start_character":30,"end_line":1016,"end_character":43},"in_reply_to":"a44eb826_31283d7f","updated":"2026-09-01 18:03:27.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7198afdfaacc386da291855754a6415268993f16","unresolved":true,"context_lines":[{"line_number":1013,"context_line":"            parent_aggr \u003d share_utils.extract_host(parent_share[\u0027host\u0027],"},{"line_number":1014,"context_line":"                                                   level\u003d\u0027pool\u0027)"},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        # SMAS NAS pre-check: volume rehost across SVMs on the same cluster"},{"line_number":1017,"context_line":"        # is not supported when the destination share server is under an SM-as"},{"line_number":1018,"context_line":"        # NAS relationship.  Reject here, before we enter the try/except block,"},{"line_number":1019,"context_line":"        # so the actionable message is not swallowed by the generic handler."}],"source_content_type":"text/x-python","patch_set":18,"id":"a44eb826_31283d7f","line":1016,"range":{"start_line":1016,"start_character":30,"end_line":1016,"end_character":43},"in_reply_to":"ac151c13_b9015e79","updated":"2026-09-01 05:06:41.000000000","message":"Marked as unresolved.\n\ni don\u0027t see the changes based on this agreement?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"790babcc4cedf8b4f9bb5247b3c93d62ecf87ab8","unresolved":true,"context_lines":[{"line_number":1024,"context_line":"            msg \u003d _(\u0027Could not create share %(share_id)s from snapshot \u0027"},{"line_number":1025,"context_line":"                    \u0027%(snapshot_id)s: creating a share across SVMs on the \u0027"},{"line_number":1026,"context_line":"                    \u0027same cluster is not supported when the destination share \u0027"},{"line_number":1027,"context_line":"                    \u0027server is protected by SM-as NAS -- volume rehost is \u0027"},{"line_number":1028,"context_line":"                    \u0027incompatible with SMAS replication. Use the same share \u0027"},{"line_number":1029,"context_line":"                    \u0027server (any pool) or a share server on a different \u0027"},{"line_number":1030,"context_line":"                    \u0027cluster.\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"e9307b7a_82045b74","line":1027,"range":{"start_line":1027,"start_character":54,"end_line":1027,"end_character":70},"updated":"2026-08-26 20:24:19.000000000","message":"please rephrase","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"7e99725a385007e190b7e524b4b037d68193019a","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"            msg \u003d _(\u0027Could not create share %(share_id)s from snapshot \u0027"},{"line_number":1025,"context_line":"                    \u0027%(snapshot_id)s: creating a share across SVMs on the \u0027"},{"line_number":1026,"context_line":"                    \u0027same cluster is not supported when the destination share \u0027"},{"line_number":1027,"context_line":"                    \u0027server is protected by SM-as NAS -- volume rehost is \u0027"},{"line_number":1028,"context_line":"                    \u0027incompatible with SMAS replication. Use the same share \u0027"},{"line_number":1029,"context_line":"                    \u0027server (any pool) or a share server on a different \u0027"},{"line_number":1030,"context_line":"                    \u0027cluster.\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"53a97a02_5f1b96b5","line":1027,"range":{"start_line":1027,"start_character":54,"end_line":1027,"end_character":70},"in_reply_to":"3f46e746_70de20da","updated":"2026-08-28 12:12:42.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"dad7107e4fb63ff7bc7943ac2f41523d61e6dfce","unresolved":true,"context_lines":[{"line_number":1024,"context_line":"            msg \u003d _(\u0027Could not create share %(share_id)s from snapshot \u0027"},{"line_number":1025,"context_line":"                    \u0027%(snapshot_id)s: creating a share across SVMs on the \u0027"},{"line_number":1026,"context_line":"                    \u0027same cluster is not supported when the destination share \u0027"},{"line_number":1027,"context_line":"                    \u0027server is protected by SM-as NAS -- volume rehost is \u0027"},{"line_number":1028,"context_line":"                    \u0027incompatible with SMAS replication. Use the same share \u0027"},{"line_number":1029,"context_line":"                    \u0027server (any pool) or a share server on a different \u0027"},{"line_number":1030,"context_line":"                    \u0027cluster.\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f46e746_70de20da","line":1027,"range":{"start_line":1027,"start_character":54,"end_line":1027,"end_character":70},"in_reply_to":"e9307b7a_82045b74","updated":"2026-08-27 05:11:04.000000000","message":"Same query as above","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1042,"context_line":"                # 1. Create a clone on source (temporary volume). We don\u0027t need"},{"line_number":1043,"context_line":"                # to split from clone in order to replicate data. We don\u0027t need"},{"line_number":1044,"context_line":"                # to create fpolicies since this copy will be deleted."},{"line_number":1045,"context_line":"                temp_share \u003d copy.copy(dest_share)"},{"line_number":1046,"context_line":"                temp_uuid \u003d uuidutils.generate_uuid()"},{"line_number":1047,"context_line":"                temp_share[\u0027id\u0027] \u003d str(temp_uuid)"},{"line_number":1048,"context_line":"                self._allocate_container_from_snapshot("}],"source_content_type":"text/x-python","patch_set":18,"id":"19e8646c_67d163e3","line":1045,"range":{"start_line":1045,"start_character":16,"end_line":1045,"end_character":50},"updated":"2026-08-27 07:04:50.000000000","message":"why this change?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"18b3ce84195d41293e2df2bfa3d556e902639f8d","unresolved":true,"context_lines":[{"line_number":1042,"context_line":"                # 1. Create a clone on source (temporary volume). We don\u0027t need"},{"line_number":1043,"context_line":"                # to split from clone in order to replicate data. We don\u0027t need"},{"line_number":1044,"context_line":"                # to create fpolicies since this copy will be deleted."},{"line_number":1045,"context_line":"                temp_share \u003d copy.copy(dest_share)"},{"line_number":1046,"context_line":"                temp_uuid \u003d uuidutils.generate_uuid()"},{"line_number":1047,"context_line":"                temp_share[\u0027id\u0027] \u003d str(temp_uuid)"},{"line_number":1048,"context_line":"                self._allocate_container_from_snapshot("}],"source_content_type":"text/x-python","patch_set":18,"id":"57ae3504_4a0316ee","line":1045,"range":{"start_line":1045,"start_character":16,"end_line":1045,"end_character":50},"in_reply_to":"19e8646c_67d163e3","updated":"2026-08-28 12:01:41.000000000","message":"I was facing and issue with deep copy where it was complaining about nested objects. Will recheck this again. I am unable to find the exact error message.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7198afdfaacc386da291855754a6415268993f16","unresolved":true,"context_lines":[{"line_number":1042,"context_line":"                # 1. Create a clone on source (temporary volume). We don\u0027t need"},{"line_number":1043,"context_line":"                # to split from clone in order to replicate data. We don\u0027t need"},{"line_number":1044,"context_line":"                # to create fpolicies since this copy will be deleted."},{"line_number":1045,"context_line":"                temp_share \u003d copy.copy(dest_share)"},{"line_number":1046,"context_line":"                temp_uuid \u003d uuidutils.generate_uuid()"},{"line_number":1047,"context_line":"                temp_share[\u0027id\u0027] \u003d str(temp_uuid)"},{"line_number":1048,"context_line":"                self._allocate_container_from_snapshot("}],"source_content_type":"text/x-python","patch_set":18,"id":"65958fda_130a99b9","line":1045,"range":{"start_line":1045,"start_character":16,"end_line":1045,"end_character":50},"in_reply_to":"57ae3504_4a0316ee","updated":"2026-09-01 05:06:41.000000000","message":"revert it, and if it fails, investigate","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"7dedba5506a62a88234f915376fdb5cd1075e2dc","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"                # 1. Create a clone on source (temporary volume). We don\u0027t need"},{"line_number":1043,"context_line":"                # to split from clone in order to replicate data. We don\u0027t need"},{"line_number":1044,"context_line":"                # to create fpolicies since this copy will be deleted."},{"line_number":1045,"context_line":"                temp_share \u003d copy.copy(dest_share)"},{"line_number":1046,"context_line":"                temp_uuid \u003d uuidutils.generate_uuid()"},{"line_number":1047,"context_line":"                temp_share[\u0027id\u0027] \u003d str(temp_uuid)"},{"line_number":1048,"context_line":"                self._allocate_container_from_snapshot("}],"source_content_type":"text/x-python","patch_set":18,"id":"a70dd828_839524aa","line":1045,"range":{"start_line":1045,"start_character":16,"end_line":1045,"end_character":50},"in_reply_to":"65958fda_130a99b9","updated":"2026-09-01 18:03:27.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"790babcc4cedf8b4f9bb5247b3c93d62ecf87ab8","unresolved":true,"context_lines":[{"line_number":2398,"context_line":"    def _deallocate_container(self, share_name, vserver_client, force_delete):"},{"line_number":2399,"context_line":"        \"\"\"Free share space.\"\"\""},{"line_number":2400,"context_line":"        vserver_client.unmount_volume(share_name, force\u003dTrue)"},{"line_number":2401,"context_line":"        # REST API does not require an offline_volume call before"},{"line_number":2402,"context_line":"        # delete_volume; issuing it anyway leaves the SMas NAS relationship"},{"line_number":2403,"context_line":"        # stuck in the \u0027shrinking\u0027 state forever."},{"line_number":2404,"context_line":"        if self.configuration.netapp_use_legacy_client:"},{"line_number":2405,"context_line":"            vserver_client.offline_volume(share_name)"},{"line_number":2406,"context_line":"        vserver_client.delete_volume(share_name, force_delete)"}],"source_content_type":"text/x-python","patch_set":18,"id":"0d14b792_1607f376","line":2403,"range":{"start_line":2401,"start_character":8,"end_line":2403,"end_character":49},"updated":"2026-08-26 20:24:19.000000000","message":"should we skip the offline volume call for *all* share deletion requests, not only when encryption is enabled?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"a23b91e489b0f7a2015faeabbe0ef6b26a52b61f","unresolved":false,"context_lines":[{"line_number":2398,"context_line":"    def _deallocate_container(self, share_name, vserver_client, force_delete):"},{"line_number":2399,"context_line":"        \"\"\"Free share space.\"\"\""},{"line_number":2400,"context_line":"        vserver_client.unmount_volume(share_name, force\u003dTrue)"},{"line_number":2401,"context_line":"        # REST API does not require an offline_volume call before"},{"line_number":2402,"context_line":"        # delete_volume; issuing it anyway leaves the SMas NAS relationship"},{"line_number":2403,"context_line":"        # stuck in the \u0027shrinking\u0027 state forever."},{"line_number":2404,"context_line":"        if self.configuration.netapp_use_legacy_client:"},{"line_number":2405,"context_line":"            vserver_client.offline_volume(share_name)"},{"line_number":2406,"context_line":"        vserver_client.delete_volume(share_name, force_delete)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1d4d0d28_bb61970d","line":2403,"range":{"start_line":2401,"start_character":8,"end_line":2403,"end_character":49},"in_reply_to":"0d14b792_1607f376","updated":"2026-08-27 04:44:37.000000000","message":"We are checking on client mode(ZAPI/REST) and not on encryption actually.\nVolume offline is still required for ZAPI mode by design where as REST API handles it implicitly and doing explicitly will have side effects on relationship(SMAS).\n\nMarking this comment as Resolved with above info and there are no changes required.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":2398,"context_line":"    def _deallocate_container(self, share_name, vserver_client, force_delete):"},{"line_number":2399,"context_line":"        \"\"\"Free share space.\"\"\""},{"line_number":2400,"context_line":"        vserver_client.unmount_volume(share_name, force\u003dTrue)"},{"line_number":2401,"context_line":"        # REST API does not require an offline_volume call before"},{"line_number":2402,"context_line":"        # delete_volume; issuing it anyway leaves the SMas NAS relationship"},{"line_number":2403,"context_line":"        # stuck in the \u0027shrinking\u0027 state forever."},{"line_number":2404,"context_line":"        if self.configuration.netapp_use_legacy_client:"},{"line_number":2405,"context_line":"            vserver_client.offline_volume(share_name)"},{"line_number":2406,"context_line":"        vserver_client.delete_volume(share_name, force_delete)"},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":18,"id":"8a9ecc3c_3feddfeb","line":2405,"range":{"start_line":2401,"start_character":8,"end_line":2405,"end_character":53},"updated":"2026-08-27 07:04:50.000000000","message":"can you just override \"offline_volume\" in the rest layer and make it a no-op?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7198afdfaacc386da291855754a6415268993f16","unresolved":true,"context_lines":[{"line_number":2398,"context_line":"    def _deallocate_container(self, share_name, vserver_client, force_delete):"},{"line_number":2399,"context_line":"        \"\"\"Free share space.\"\"\""},{"line_number":2400,"context_line":"        vserver_client.unmount_volume(share_name, force\u003dTrue)"},{"line_number":2401,"context_line":"        # REST API does not require an offline_volume call before"},{"line_number":2402,"context_line":"        # delete_volume; issuing it anyway leaves the SMas NAS relationship"},{"line_number":2403,"context_line":"        # stuck in the \u0027shrinking\u0027 state forever."},{"line_number":2404,"context_line":"        if self.configuration.netapp_use_legacy_client:"},{"line_number":2405,"context_line":"            vserver_client.offline_volume(share_name)"},{"line_number":2406,"context_line":"        vserver_client.delete_volume(share_name, force_delete)"},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":18,"id":"cb419817_6c94dc53","line":2405,"range":{"start_line":2401,"start_character":8,"end_line":2405,"end_character":53},"in_reply_to":"6e692ca8_326152ef","updated":"2026-09-01 05:06:41.000000000","message":"Marked as unresolved.\n\nI don\u0027t get it. \"offline_volume() is being used in other places.\"\n\nWhat do you mean?\n\nI was asking if you could just keep the method in REST and have it be a no-op\n\n\n```\n   def offline_volume(share_name):\n       # ONTAP REST APIs automatically offline volumes\n       pass\n```","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":2398,"context_line":"    def _deallocate_container(self, share_name, vserver_client, force_delete):"},{"line_number":2399,"context_line":"        \"\"\"Free share space.\"\"\""},{"line_number":2400,"context_line":"        vserver_client.unmount_volume(share_name, force\u003dTrue)"},{"line_number":2401,"context_line":"        # REST API does not require an offline_volume call before"},{"line_number":2402,"context_line":"        # delete_volume; issuing it anyway leaves the SMas NAS relationship"},{"line_number":2403,"context_line":"        # stuck in the \u0027shrinking\u0027 state forever."},{"line_number":2404,"context_line":"        if self.configuration.netapp_use_legacy_client:"},{"line_number":2405,"context_line":"            vserver_client.offline_volume(share_name)"},{"line_number":2406,"context_line":"        vserver_client.delete_volume(share_name, force_delete)"},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":18,"id":"6e692ca8_326152ef","line":2405,"range":{"start_line":2401,"start_character":8,"end_line":2405,"end_character":53},"in_reply_to":"8a9ecc3c_3feddfeb","updated":"2026-08-27 11:14:04.000000000","message":"offline_volume() is being used in other places.\nOnly in case of REST mode delete_volume it is not required.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"829c0cdccff70dad6ce6b375df8534d27d585039","unresolved":true,"context_lines":[{"line_number":2398,"context_line":"    def _deallocate_container(self, share_name, vserver_client, force_delete):"},{"line_number":2399,"context_line":"        \"\"\"Free share space.\"\"\""},{"line_number":2400,"context_line":"        vserver_client.unmount_volume(share_name, force\u003dTrue)"},{"line_number":2401,"context_line":"        # REST API does not require an offline_volume call before"},{"line_number":2402,"context_line":"        # delete_volume; issuing it anyway leaves the SMas NAS relationship"},{"line_number":2403,"context_line":"        # stuck in the \u0027shrinking\u0027 state forever."},{"line_number":2404,"context_line":"        if self.configuration.netapp_use_legacy_client:"},{"line_number":2405,"context_line":"            vserver_client.offline_volume(share_name)"},{"line_number":2406,"context_line":"        vserver_client.delete_volume(share_name, force_delete)"},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"    @na_utils.trace"}],"source_content_type":"text/x-python","patch_set":18,"id":"c6deeb26_1355dfec","line":2405,"range":{"start_line":2401,"start_character":8,"end_line":2405,"end_character":53},"in_reply_to":"cb419817_6c94dc53","updated":"2026-09-01 06:51:00.000000000","message":"I am referring to the usage below, Goutham. Given that this is not a blocker, we will address this feedback in a follow-up patch by verifying and testing other usages that fall outside of this share server replication feature.\n\nUsage:\nhttps://github.com/openstack/manila/blob/f4a7e8ba8a9119685b778b0f6c8628088a3697b2/manila/share/drivers/netapp/dataontap/client/client_cmode_rest.py#L6297\n\nWill keep this comment open for tracking purpose.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_multi_svm.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1181,"context_line":"        if has_replica:"},{"line_number":1182,"context_line":"            share_group_id \u003d share.get(\u0027share_group_id\u0027)"},{"line_number":1183,"context_line":"            if share_group_id:"},{"line_number":1184,"context_line":"                msg \u003d _(\"Cannot create share \u0027%(share)s\u0027 because it \""},{"line_number":1185,"context_line":"                        \"belongs to share group \u0027%(group)s\u0027. Share \""},{"line_number":1186,"context_line":"                        \"groups are not supported on share servers \""},{"line_number":1187,"context_line":"                        \"protected using replication.\")"},{"line_number":1188,"context_line":"                raise exception.NetAppException("},{"line_number":1189,"context_line":"                    msg % {\u0027share\u0027: share[\u0027id\u0027], \u0027group\u0027: share_group_id})"},{"line_number":1190,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"}],"source_content_type":"text/x-python","patch_set":8,"id":"47be1f9c_440e77eb","line":1187,"range":{"start_line":1184,"start_character":25,"end_line":1187,"end_character":54},"updated":"2026-07-31 05:10:35.000000000","message":"Somehow I do not understand it. We are creating a share that is already part of a share group? How is that possible?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1181,"context_line":"        if has_replica:"},{"line_number":1182,"context_line":"            share_group_id \u003d share.get(\u0027share_group_id\u0027)"},{"line_number":1183,"context_line":"            if share_group_id:"},{"line_number":1184,"context_line":"                msg \u003d _(\"Cannot create share \u0027%(share)s\u0027 because it \""},{"line_number":1185,"context_line":"                        \"belongs to share group \u0027%(group)s\u0027. Share \""},{"line_number":1186,"context_line":"                        \"groups are not supported on share servers \""},{"line_number":1187,"context_line":"                        \"protected using replication.\")"},{"line_number":1188,"context_line":"                raise exception.NetAppException("},{"line_number":1189,"context_line":"                    msg % {\u0027share\u0027: share[\u0027id\u0027], \u0027group\u0027: share_group_id})"},{"line_number":1190,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1853b53e_de7241b7","line":1187,"range":{"start_line":1184,"start_character":25,"end_line":1187,"end_character":54},"in_reply_to":"47be1f9c_440e77eb","updated":"2026-08-02 05:58:11.000000000","message":"Done\nMessage rephrased.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1199,"context_line":"        \"\"\"Returns True when the share server has more than one replica.\"\"\""},{"line_number":1200,"context_line":"        if not share_server:"},{"line_number":1201,"context_line":"            return False"},{"line_number":1202,"context_line":"        return len(share_server.get(\u0027share_server_replica_list\u0027) or []) \u003e 1"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"    @na_utils.trace"},{"line_number":1205,"context_line":"    def _get_smas_relationship_from_share_server(self, share_server,"}],"source_content_type":"text/x-python","patch_set":8,"id":"23cf416f_a79e52b0","line":1202,"range":{"start_line":1202,"start_character":15,"end_line":1202,"end_character":75},"updated":"2026-07-31 05:10:35.000000000","message":"\"\u003e\u003d 1\"?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"        \"\"\"Returns True when the share server has more than one replica.\"\"\""},{"line_number":1200,"context_line":"        if not share_server:"},{"line_number":1201,"context_line":"            return False"},{"line_number":1202,"context_line":"        return len(share_server.get(\u0027share_server_replica_list\u0027) or []) \u003e 1"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"    @na_utils.trace"},{"line_number":1205,"context_line":"    def _get_smas_relationship_from_share_server(self, share_server,"}],"source_content_type":"text/x-python","patch_set":8,"id":"c84d8747_24695f19","line":1202,"range":{"start_line":1202,"start_character":15,"end_line":1202,"end_character":75},"in_reply_to":"23cf416f_a79e52b0","updated":"2026-08-02 05:58:11.000000000","message":"We will have active replica always along with DP site replica, hence it should be greater than one.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1236,"context_line":"            fields \u003d \u0027uuid,state,policy,healthy,unhealthy_reason\u0027"},{"line_number":1237,"context_line":"        rels \u003d peer_client.get_svm_snapmirror_relationships("},{"line_number":1238,"context_line":"            src_svm + \u0027:\u0027, dp_dest_svm + \u0027:\u0027, fields\u003dfields)"},{"line_number":1239,"context_line":"        return rels[0] if rels else None"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"    @staticmethod"},{"line_number":1242,"context_line":"    def _find_peer_share_server_replica(share_server):"}],"source_content_type":"text/x-python","patch_set":8,"id":"011fd04e_affd130d","line":1239,"range":{"start_line":1239,"start_character":15,"end_line":1239,"end_character":40},"updated":"2026-07-31 05:10:35.000000000","message":"this method is named get_smas_relationship - but the logic returns the first relationship it gets (which in future can also be Async). So I think, we either need to pass the policy in query param, or filter the smas relationship after getting the relationship records from ONTAP?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"            fields \u003d \u0027uuid,state,policy,healthy,unhealthy_reason\u0027"},{"line_number":1237,"context_line":"        rels \u003d peer_client.get_svm_snapmirror_relationships("},{"line_number":1238,"context_line":"            src_svm + \u0027:\u0027, dp_dest_svm + \u0027:\u0027, fields\u003dfields)"},{"line_number":1239,"context_line":"        return rels[0] if rels else None"},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"    @staticmethod"},{"line_number":1242,"context_line":"    def _find_peer_share_server_replica(share_server):"}],"source_content_type":"text/x-python","patch_set":8,"id":"a55413b7_08a6a530","line":1239,"range":{"start_line":1239,"start_character":15,"end_line":1239,"end_character":40},"in_reply_to":"011fd04e_affd130d","updated":"2026-08-02 05:58:11.000000000","message":"Done","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1249,"context_line":"    def _reject_if_smas_not_in_sync(self, share_server):"},{"line_number":1250,"context_line":"        \"\"\"Hard-rejects share-server-level ops while SMas not in_sync."},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"        ONTAP rejects geometry-changing volume ops"},{"line_number":1253,"context_line":"        during initialize/resync/out-of-sync; the driver mirrors the gate so"},{"line_number":1254,"context_line":"        the caller gets an actionable error before any ONTAP call."},{"line_number":1255,"context_line":"        \"\"\""},{"line_number":1256,"context_line":"        relationship \u003d self._get_smas_relationship_from_share_server("}],"source_content_type":"text/x-python","patch_set":8,"id":"a74bec51_7da150fe","line":1253,"range":{"start_line":1252,"start_character":8,"end_line":1253,"end_character":45},"updated":"2026-07-31 05:10:35.000000000","message":"Also add expanding and shrinking state. Or reverse the comment to say - ONTAP rejects geometry-changinig volume ops if not in-sync state.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1249,"context_line":"    def _reject_if_smas_not_in_sync(self, share_server):"},{"line_number":1250,"context_line":"        \"\"\"Hard-rejects share-server-level ops while SMas not in_sync."},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"        ONTAP rejects geometry-changing volume ops"},{"line_number":1253,"context_line":"        during initialize/resync/out-of-sync; the driver mirrors the gate so"},{"line_number":1254,"context_line":"        the caller gets an actionable error before any ONTAP call."},{"line_number":1255,"context_line":"        \"\"\""},{"line_number":1256,"context_line":"        relationship \u003d self._get_smas_relationship_from_share_server("}],"source_content_type":"text/x-python","patch_set":8,"id":"a8cb7ecf_44febd7a","line":1253,"range":{"start_line":1252,"start_character":8,"end_line":1253,"end_character":45},"in_reply_to":"a74bec51_7da150fe","updated":"2026-08-02 05:58:11.000000000","message":"Done","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1259,"context_line":"            msg \u003d _(\"SnapMirror relationship not found for the share \""},{"line_number":1260,"context_line":"                    \"server\u0027s replica; cannot determine SMas protection.\")"},{"line_number":1261,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1262,"context_line":"        policy_type \u003d relationship.get(\u0027policy\u0027, {}).get(\u0027type\u0027)"},{"line_number":1263,"context_line":"        if policy_type !\u003d na_utils.SYNC_POLICY_TYPE_NAME:"},{"line_number":1264,"context_line":"            return"},{"line_number":1265,"context_line":"        state \u003d relationship.get(\u0027state\u0027)"},{"line_number":1266,"context_line":"        if state !\u003d na_utils.SM_IN_SYNC_STATE:"},{"line_number":1267,"context_line":"            peer_replica \u003d self._find_peer_share_server_replica("}],"source_content_type":"text/x-python","patch_set":8,"id":"2faa0132_1b985f22","line":1264,"range":{"start_line":1262,"start_character":7,"end_line":1264,"end_character":18},"updated":"2026-07-31 05:10:35.000000000","message":"shouldnt this logic to go to the method - _get_smas_relationship_from_share_server?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"            msg \u003d _(\"SnapMirror relationship not found for the share \""},{"line_number":1260,"context_line":"                    \"server\u0027s replica; cannot determine SMas protection.\")"},{"line_number":1261,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1262,"context_line":"        policy_type \u003d relationship.get(\u0027policy\u0027, {}).get(\u0027type\u0027)"},{"line_number":1263,"context_line":"        if policy_type !\u003d na_utils.SYNC_POLICY_TYPE_NAME:"},{"line_number":1264,"context_line":"            return"},{"line_number":1265,"context_line":"        state \u003d relationship.get(\u0027state\u0027)"},{"line_number":1266,"context_line":"        if state !\u003d na_utils.SM_IN_SYNC_STATE:"},{"line_number":1267,"context_line":"            peer_replica \u003d self._find_peer_share_server_replica("}],"source_content_type":"text/x-python","patch_set":8,"id":"6818e08e_e8c0254e","line":1264,"range":{"start_line":1262,"start_character":7,"end_line":1264,"end_character":18},"in_reply_to":"2faa0132_1b985f22","updated":"2026-08-02 05:58:11.000000000","message":"Done","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1285,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1286,"context_line":"        src_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1287,"context_line":"        if not src_svm:"},{"line_number":1288,"context_line":"            return"},{"line_number":1289,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1290,"context_line":"        volume \u003d self._client.get_volume_details("},{"line_number":1291,"context_line":"            src_svm, share_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf606178_83b3282a","line":1288,"updated":"2026-07-31 05:10:35.000000000","message":"Shouldnt we raise exception here?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1286,"context_line":"        src_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1287,"context_line":"        if not src_svm:"},{"line_number":1288,"context_line":"            return"},{"line_number":1289,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1290,"context_line":"        volume \u003d self._client.get_volume_details("},{"line_number":1291,"context_line":"            src_svm, share_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f0ef8aa_c7cfaa18","line":1288,"in_reply_to":"bf606178_83b3282a","updated":"2026-08-02 05:58:11.000000000","message":"Actually not required, the caller functions will have the guard is currently unreachable in practice.\nHowever, I\u0027m raising the exception to fool proof if this is used in another place.\n\nDone.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1303,"context_line":"    def _protect_smas_volume_after_break(self, share, share_server):"},{"line_number":1304,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1305,"context_line":"        dest_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1306,"context_line":"        if not dest_svm:"},{"line_number":1307,"context_line":"            return"},{"line_number":1308,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1309,"context_line":"        self._client.set_volume_smas_protection("}],"source_content_type":"text/x-python","patch_set":8,"id":"31d3cb2d_8c4b0a8e","line":1306,"updated":"2026-07-31 05:10:35.000000000","message":"Same comment as above. Should be raising.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"f73ed7bf5a5c2c13ce8002158cfef26285c2e7a7","unresolved":false,"context_lines":[{"line_number":1303,"context_line":"    def _protect_smas_volume_after_break(self, share, share_server):"},{"line_number":1304,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1305,"context_line":"        dest_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1306,"context_line":"        if not dest_svm:"},{"line_number":1307,"context_line":"            return"},{"line_number":1308,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1309,"context_line":"        self._client.set_volume_smas_protection("}],"source_content_type":"text/x-python","patch_set":8,"id":"63a9f1b5_14a211ad","line":1306,"in_reply_to":"0267c5b4_243e019e","updated":"2026-08-05 14:47:45.000000000","message":"Done","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":true,"context_lines":[{"line_number":1303,"context_line":"    def _protect_smas_volume_after_break(self, share, share_server):"},{"line_number":1304,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1305,"context_line":"        dest_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1306,"context_line":"        if not dest_svm:"},{"line_number":1307,"context_line":"            return"},{"line_number":1308,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1309,"context_line":"        self._client.set_volume_smas_protection("}],"source_content_type":"text/x-python","patch_set":8,"id":"0267c5b4_243e019e","line":1306,"in_reply_to":"31d3cb2d_8c4b0a8e","updated":"2026-08-02 05:58:11.000000000","message":"@sanketh.shetty@netapp.com Can you verify if this is required to be addressed?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1624,"context_line":"        return peer_server, peer_client, dp_dest_svm"},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"    @na_utils.trace"},{"line_number":1627,"context_line":"    def _implicit_unprotect_share(self, share, share_server):"},{"line_number":1628,"context_line":"        \"\"\"Removes the share from its SMas relationship and cleans up."},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"        :param share: share record being deleted."}],"source_content_type":"text/x-python","patch_set":8,"id":"099064f4_25128fb3","line":1627,"range":{"start_line":1627,"start_character":7,"end_line":1627,"end_character":33},"updated":"2026-07-31 05:10:35.000000000","message":"method naming - why implicit? Can we find a better name?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"        return peer_server, peer_client, dp_dest_svm"},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"    @na_utils.trace"},{"line_number":1627,"context_line":"    def _implicit_unprotect_share(self, share, share_server):"},{"line_number":1628,"context_line":"        \"\"\"Removes the share from its SMas relationship and cleans up."},{"line_number":1629,"context_line":""},{"line_number":1630,"context_line":"        :param share: share record being deleted."}],"source_content_type":"text/x-python","patch_set":8,"id":"f4bb3383_8bdfb4f7","line":1627,"range":{"start_line":1627,"start_character":7,"end_line":1627,"end_character":33},"in_reply_to":"099064f4_25128fb3","updated":"2026-08-02 05:58:11.000000000","message":"Done","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1644,"context_line":"            return"},{"line_number":1645,"context_line":"        protection \u003d volume.get(\u0027smas_protection\u0027)"},{"line_number":1646,"context_line":"        if protection !\u003d na_utils.SMAS_PROTECTION_PROTECTED:"},{"line_number":1647,"context_line":"            LOG.debug(\"Share %(share)s is already unprotected \""},{"line_number":1648,"context_line":"                      \"(smas_protection\u003d%(protection)s); skipping \""},{"line_number":1649,"context_line":"                      \"implicit unprotect.\","},{"line_number":1650,"context_line":"                      {\u0027share\u0027: share_volume_name, \u0027protection\u0027: protection})"}],"source_content_type":"text/x-python","patch_set":8,"id":"e3989ede_72920fa8","line":1647,"updated":"2026-07-31 05:10:35.000000000","message":"Shouldn\u0027t this be info?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1644,"context_line":"            return"},{"line_number":1645,"context_line":"        protection \u003d volume.get(\u0027smas_protection\u0027)"},{"line_number":1646,"context_line":"        if protection !\u003d na_utils.SMAS_PROTECTION_PROTECTED:"},{"line_number":1647,"context_line":"            LOG.debug(\"Share %(share)s is already unprotected \""},{"line_number":1648,"context_line":"                      \"(smas_protection\u003d%(protection)s); skipping \""},{"line_number":1649,"context_line":"                      \"implicit unprotect.\","},{"line_number":1650,"context_line":"                      {\u0027share\u0027: share_volume_name, \u0027protection\u0027: protection})"}],"source_content_type":"text/x-python","patch_set":8,"id":"cffc5c4b_846000eb","line":1647,"in_reply_to":"e3989ede_72920fa8","updated":"2026-08-02 05:58:11.000000000","message":"Done","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1682,"context_line":"        # Step 3 Clear destination junction + delete dest volume."},{"line_number":1683,"context_line":"        dp_dest_server, dp_dest_client, dp_dest_svm \u003d ("},{"line_number":1684,"context_line":"            self._get_peer_share_server_replica_context(share_server))"},{"line_number":1685,"context_line":"        if not dp_dest_server:"},{"line_number":1686,"context_line":"            return"},{"line_number":1687,"context_line":"        if not dp_dest_client:"},{"line_number":1688,"context_line":"            LOG.warning(\"Destination cluster unreachable during implicit \""},{"line_number":1689,"context_line":"                        \"unprotect for share %s; manual cleanup of the \""}],"source_content_type":"text/x-python","patch_set":8,"id":"8155e5a5_31beb185","line":1686,"range":{"start_line":1685,"start_character":1,"end_line":1686,"end_character":18},"updated":"2026-07-31 05:10:35.000000000","message":"Exception should be thrown?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1682,"context_line":"        # Step 3 Clear destination junction + delete dest volume."},{"line_number":1683,"context_line":"        dp_dest_server, dp_dest_client, dp_dest_svm \u003d ("},{"line_number":1684,"context_line":"            self._get_peer_share_server_replica_context(share_server))"},{"line_number":1685,"context_line":"        if not dp_dest_server:"},{"line_number":1686,"context_line":"            return"},{"line_number":1687,"context_line":"        if not dp_dest_client:"},{"line_number":1688,"context_line":"            LOG.warning(\"Destination cluster unreachable during implicit \""},{"line_number":1689,"context_line":"                        \"unprotect for share %s; manual cleanup of the \""}],"source_content_type":"text/x-python","patch_set":8,"id":"db8494c2_940208a9","line":1686,"range":{"start_line":1685,"start_character":1,"end_line":1686,"end_character":18},"in_reply_to":"8155e5a5_31beb185","updated":"2026-08-02 05:58:11.000000000","message":"No — I\u0027d leave this one as a silent return, and here\u0027s why it\u0027s meaningfully different from the earlier _verify_smas_protected case we just fixed.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"d208b4e3f70c0a08a87a9578b7794e92261e2cf1","unresolved":true,"context_lines":[{"line_number":1685,"context_line":"        if not dp_dest_server:"},{"line_number":1686,"context_line":"            return"},{"line_number":1687,"context_line":"        if not dp_dest_client:"},{"line_number":1688,"context_line":"            LOG.warning(\"Destination cluster unreachable during implicit \""},{"line_number":1689,"context_line":"                        \"unprotect for share %s; manual cleanup of the \""},{"line_number":1690,"context_line":"                        \"destination volume may be needed.\", share[\u0027id\u0027])"},{"line_number":1691,"context_line":"            return"},{"line_number":1692,"context_line":"        try:"},{"line_number":1693,"context_line":"            dp_dest_client.update_volume_raw("},{"line_number":1694,"context_line":"                dp_dest_svm, share_volume_name, {\u0027nas\u0027: {\u0027path\u0027: \u0027\u0027}})"}],"source_content_type":"text/x-python","patch_set":8,"id":"2eee45a8_bfe9a796","line":1691,"range":{"start_line":1688,"start_character":12,"end_line":1691,"end_character":18},"updated":"2026-07-31 05:10:35.000000000","message":"Exception should be thrown?","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f27f549d50fd874b4051f1ccd41683388220d202","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"        if not dp_dest_server:"},{"line_number":1686,"context_line":"            return"},{"line_number":1687,"context_line":"        if not dp_dest_client:"},{"line_number":1688,"context_line":"            LOG.warning(\"Destination cluster unreachable during implicit \""},{"line_number":1689,"context_line":"                        \"unprotect for share %s; manual cleanup of the \""},{"line_number":1690,"context_line":"                        \"destination volume may be needed.\", share[\u0027id\u0027])"},{"line_number":1691,"context_line":"            return"},{"line_number":1692,"context_line":"        try:"},{"line_number":1693,"context_line":"            dp_dest_client.update_volume_raw("},{"line_number":1694,"context_line":"                dp_dest_svm, share_volume_name, {\u0027nas\u0027: {\u0027path\u0027: \u0027\u0027}})"}],"source_content_type":"text/x-python","patch_set":8,"id":"afb465a1_31528d3a","line":1691,"range":{"start_line":1688,"start_character":12,"end_line":1691,"end_character":18},"in_reply_to":"2eee45a8_bfe9a796","updated":"2026-08-02 05:58:11.000000000","message":"No. This is best effort in case of destination site is down, we should not block the share deletion.","commit_id":"53c24b7ada30cfaa582572e4c0dee7ac3e19bfd3"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"5f07ba939510dec09ed62671620d1d010af080a3","unresolved":true,"context_lines":[{"line_number":1302,"context_line":"            src_svm, share_name,"},{"line_number":1303,"context_line":"            fields\u003d\u0027smas_protection,uuid\u0027)"},{"line_number":1304,"context_line":"        if (volume.get(\u0027smas_protection\u0027)"},{"line_number":1305,"context_line":"                \u003d\u003d na_utils.SMAS_PROTECTION_UNPROTECTED):"},{"line_number":1306,"context_line":"            msg \u003d _(\"Share was created on the SMas-enabled share server \""},{"line_number":1307,"context_line":"                    \"but failed to be protected (the share-server replica \""},{"line_number":1308,"context_line":"                    \"may be out of sync, or the SMas expand failed). The \""}],"source_content_type":"text/x-python","patch_set":17,"id":"2bc097b9_f5c43bb0","line":1305,"updated":"2026-08-25 08:24:49.000000000","message":"```suggestion\n                !\u003d na_utils.SMAS_PROTECTION_PROTECTED):\n```\n\nThis would also cover if the the value is None/absent/something else","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f94ecdf6a3359bd115dd8a683b180efdae105bcf","unresolved":false,"context_lines":[{"line_number":1302,"context_line":"            src_svm, share_name,"},{"line_number":1303,"context_line":"            fields\u003d\u0027smas_protection,uuid\u0027)"},{"line_number":1304,"context_line":"        if (volume.get(\u0027smas_protection\u0027)"},{"line_number":1305,"context_line":"                \u003d\u003d na_utils.SMAS_PROTECTION_UNPROTECTED):"},{"line_number":1306,"context_line":"            msg \u003d _(\"Share was created on the SMas-enabled share server \""},{"line_number":1307,"context_line":"                    \"but failed to be protected (the share-server replica \""},{"line_number":1308,"context_line":"                    \"may be out of sync, or the SMas expand failed). The \""}],"source_content_type":"text/x-python","patch_set":17,"id":"94a74057_d4e29905","line":1305,"in_reply_to":"2bc097b9_f5c43bb0","updated":"2026-08-26 09:08:14.000000000","message":"Done","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1181,"context_line":"    def create_share(self, context, share, share_server):"},{"line_number":1182,"context_line":"        \"\"\"Reconcile DNS, enforce SMas protection on reused share servers.\"\"\""},{"line_number":1183,"context_line":"        self._reconcile_dns_for_share_server(context, share_server)"},{"line_number":1184,"context_line":"        has_replica \u003d self._share_server_has_replica(share_server)"},{"line_number":1185,"context_line":"        if has_replica:"},{"line_number":1186,"context_line":"            share_group_id \u003d share.get(\u0027share_group_id\u0027)"},{"line_number":1187,"context_line":"            if share_group_id:"},{"line_number":1188,"context_line":"                msg \u003d _(\"Cannot create share \u0027%(share)s\u0027 in share group \""},{"line_number":1189,"context_line":"                        \"\u0027%(group)s\u0027 because share groups are not \""},{"line_number":1190,"context_line":"                        \"supported when the share server is protected \""},{"line_number":1191,"context_line":"                        \"using replication.\")"},{"line_number":1192,"context_line":"                raise exception.NetAppException("},{"line_number":1193,"context_line":"                    msg % {\u0027share\u0027: share[\u0027id\u0027], \u0027group\u0027: share_group_id})"},{"line_number":1194,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"}],"source_content_type":"text/x-python","patch_set":18,"id":"e2500a0d_6480f596","line":1191,"range":{"start_line":1184,"start_character":0,"end_line":1191,"end_character":45},"updated":"2026-08-27 07:04:50.000000000","message":"can\u0027t this check be performed in the compatible share server check?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7198afdfaacc386da291855754a6415268993f16","unresolved":true,"context_lines":[{"line_number":1181,"context_line":"    def create_share(self, context, share, share_server):"},{"line_number":1182,"context_line":"        \"\"\"Reconcile DNS, enforce SMas protection on reused share servers.\"\"\""},{"line_number":1183,"context_line":"        self._reconcile_dns_for_share_server(context, share_server)"},{"line_number":1184,"context_line":"        has_replica \u003d self._share_server_has_replica(share_server)"},{"line_number":1185,"context_line":"        if has_replica:"},{"line_number":1186,"context_line":"            share_group_id \u003d share.get(\u0027share_group_id\u0027)"},{"line_number":1187,"context_line":"            if share_group_id:"},{"line_number":1188,"context_line":"                msg \u003d _(\"Cannot create share \u0027%(share)s\u0027 in share group \""},{"line_number":1189,"context_line":"                        \"\u0027%(group)s\u0027 because share groups are not \""},{"line_number":1190,"context_line":"                        \"supported when the share server is protected \""},{"line_number":1191,"context_line":"                        \"using replication.\")"},{"line_number":1192,"context_line":"                raise exception.NetAppException("},{"line_number":1193,"context_line":"                    msg % {\u0027share\u0027: share[\u0027id\u0027], \u0027group\u0027: share_group_id})"},{"line_number":1194,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"}],"source_content_type":"text/x-python","patch_set":18,"id":"b12fdc54_b9c170bb","line":1191,"range":{"start_line":1184,"start_character":0,"end_line":1191,"end_character":45},"in_reply_to":"a887f857_8c61473c","updated":"2026-09-01 05:06:41.000000000","message":"No I am not referring to the scheduler. Look at the method: \"choose_share_server_compatible_with_share\" (and \"choose_share_server_compatible_with_share_group\") and add logic there to reject share groups from getting scheduled to a share server with SMas protection enabled. \n\nSubsequently, if a share server is already provisioned for a share group, and SMas is requested at a later time, reject it.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"829c0cdccff70dad6ce6b375df8534d27d585039","unresolved":false,"context_lines":[{"line_number":1181,"context_line":"    def create_share(self, context, share, share_server):"},{"line_number":1182,"context_line":"        \"\"\"Reconcile DNS, enforce SMas protection on reused share servers.\"\"\""},{"line_number":1183,"context_line":"        self._reconcile_dns_for_share_server(context, share_server)"},{"line_number":1184,"context_line":"        has_replica \u003d self._share_server_has_replica(share_server)"},{"line_number":1185,"context_line":"        if has_replica:"},{"line_number":1186,"context_line":"            share_group_id \u003d share.get(\u0027share_group_id\u0027)"},{"line_number":1187,"context_line":"            if share_group_id:"},{"line_number":1188,"context_line":"                msg \u003d _(\"Cannot create share \u0027%(share)s\u0027 in share group \""},{"line_number":1189,"context_line":"                        \"\u0027%(group)s\u0027 because share groups are not \""},{"line_number":1190,"context_line":"                        \"supported when the share server is protected \""},{"line_number":1191,"context_line":"                        \"using replication.\")"},{"line_number":1192,"context_line":"                raise exception.NetAppException("},{"line_number":1193,"context_line":"                    msg % {\u0027share\u0027: share[\u0027id\u0027], \u0027group\u0027: share_group_id})"},{"line_number":1194,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"}],"source_content_type":"text/x-python","patch_set":18,"id":"4a07bed2_c4c3dfdf","line":1191,"range":{"start_line":1184,"start_character":0,"end_line":1191,"end_character":45},"in_reply_to":"b12fdc54_b9c170bb","updated":"2026-09-01 06:51:00.000000000","message":"Had discussed internally, We had removed this check considering ontap is going to support in future, we will document this behavior in this release that it is not supported the failure will be on ONTAP if such a scenario occurs.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1181,"context_line":"    def create_share(self, context, share, share_server):"},{"line_number":1182,"context_line":"        \"\"\"Reconcile DNS, enforce SMas protection on reused share servers.\"\"\""},{"line_number":1183,"context_line":"        self._reconcile_dns_for_share_server(context, share_server)"},{"line_number":1184,"context_line":"        has_replica \u003d self._share_server_has_replica(share_server)"},{"line_number":1185,"context_line":"        if has_replica:"},{"line_number":1186,"context_line":"            share_group_id \u003d share.get(\u0027share_group_id\u0027)"},{"line_number":1187,"context_line":"            if share_group_id:"},{"line_number":1188,"context_line":"                msg \u003d _(\"Cannot create share \u0027%(share)s\u0027 in share group \""},{"line_number":1189,"context_line":"                        \"\u0027%(group)s\u0027 because share groups are not \""},{"line_number":1190,"context_line":"                        \"supported when the share server is protected \""},{"line_number":1191,"context_line":"                        \"using replication.\")"},{"line_number":1192,"context_line":"                raise exception.NetAppException("},{"line_number":1193,"context_line":"                    msg % {\u0027share\u0027: share[\u0027id\u0027], \u0027group\u0027: share_group_id})"},{"line_number":1194,"context_line":"            self._reject_if_smas_not_in_sync(share_server)"}],"source_content_type":"text/x-python","patch_set":18,"id":"a887f857_8c61473c","line":1191,"range":{"start_line":1184,"start_character":0,"end_line":1191,"end_character":45},"in_reply_to":"e2500a0d_6480f596","updated":"2026-08-27 11:14:04.000000000","message":"I assume you are referring to scheduler related code(core).\nIMO, this evaluation/decision should be specific to the vendors driver supportability/compatibility instead of making it as generalized restriction.\n\nIn case of ONTAP, at present SMas NAS doesn\u0027t support the Consistency group, however, it will be supported in upcoming releases of ONTAP. We need to refactor this code at that time.\n \ncc: @gawasthi2010@gmail.com, @anoop.shukla@netapp.com\n\nMarking this as resolve with the above info. Please let us know incase of any queries/suggestions.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1306,"context_line":"                !\u003d na_utils.SMAS_PROTECTION_PROTECTED):"},{"line_number":1307,"context_line":"            msg \u003d _(\"Share was created on the SMas-enabled share server \""},{"line_number":1308,"context_line":"                    \"but failed to be protected (the share-server replica \""},{"line_number":1309,"context_line":"                    \"may be out of sync, or the SMas expand failed). The \""},{"line_number":1310,"context_line":"                    \"share is in error; delete it and retry once the \""},{"line_number":1311,"context_line":"                    \"share-server replica is back in_sync.\")"},{"line_number":1312,"context_line":"            raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"02d47332_b422b8c9","line":1309,"range":{"start_line":1309,"start_character":44,"end_line":1309,"end_character":66},"updated":"2026-08-27 07:04:50.000000000","message":"what does \"expand\" and \"shrink\" in this context mean?\n\nI\u0027m finding this hard to grok. \n\nSMaS is ONTAP terminology. Why is it figuring in errors/exceptions? Can you please convert such references to manila operations. In this case, \"the share-server replica may be out of sync\" is sufficient. I have no idea what to do with \"SMas expand\" there, if I were an OpenStack administrator.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"                !\u003d na_utils.SMAS_PROTECTION_PROTECTED):"},{"line_number":1307,"context_line":"            msg \u003d _(\"Share was created on the SMas-enabled share server \""},{"line_number":1308,"context_line":"                    \"but failed to be protected (the share-server replica \""},{"line_number":1309,"context_line":"                    \"may be out of sync, or the SMas expand failed). The \""},{"line_number":1310,"context_line":"                    \"share is in error; delete it and retry once the \""},{"line_number":1311,"context_line":"                    \"share-server replica is back in_sync.\")"},{"line_number":1312,"context_line":"            raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff91e672_b43279f4","line":1309,"range":{"start_line":1309,"start_character":44,"end_line":1309,"end_character":66},"in_reply_to":"02d47332_b422b8c9","updated":"2026-08-27 11:14:04.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1316,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1317,"context_line":"        dest_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1318,"context_line":"        if not dest_svm:"},{"line_number":1319,"context_line":"            msg \u003d _(\"Cannot protect SMas volume: the share server\u0027s \""},{"line_number":1320,"context_line":"                    \"backend details are missing the destination \""},{"line_number":1321,"context_line":"                    \"vserver name.\")"},{"line_number":1322,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1323,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1324,"context_line":"        self._client.patch_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"9f0f33c7_c612427e","line":1321,"range":{"start_line":1319,"start_character":21,"end_line":1321,"end_character":34},"updated":"2026-08-27 07:04:50.000000000","message":"How can this happen?\n\nwhat is an \"SMas volume\"?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"7e99725a385007e190b7e524b4b037d68193019a","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1317,"context_line":"        dest_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1318,"context_line":"        if not dest_svm:"},{"line_number":1319,"context_line":"            msg \u003d _(\"Cannot protect SMas volume: the share server\u0027s \""},{"line_number":1320,"context_line":"                    \"backend details are missing the destination \""},{"line_number":1321,"context_line":"                    \"vserver name.\")"},{"line_number":1322,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1323,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1324,"context_line":"        self._client.patch_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"f831e9b0_8821f5d3","line":1321,"range":{"start_line":1319,"start_character":21,"end_line":1321,"end_character":34},"in_reply_to":"9f0f33c7_c612427e","updated":"2026-08-28 12:12:42.000000000","message":"removed SMas. This is a fail fast check to ensure we the vserver name required to pass it to ontap.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"7dedba5506a62a88234f915376fdb5cd1075e2dc","unresolved":false,"context_lines":[{"line_number":1316,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1317,"context_line":"        dest_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1318,"context_line":"        if not dest_svm:"},{"line_number":1319,"context_line":"            msg \u003d _(\"Cannot protect SMas volume: the share server\u0027s \""},{"line_number":1320,"context_line":"                    \"backend details are missing the destination \""},{"line_number":1321,"context_line":"                    \"vserver name.\")"},{"line_number":1322,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1323,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1324,"context_line":"        self._client.patch_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"dac687ad_d0b68f55","line":1321,"range":{"start_line":1319,"start_character":21,"end_line":1321,"end_character":34},"in_reply_to":"cfcb75b8_dda70bb5","updated":"2026-09-01 18:03:27.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7198afdfaacc386da291855754a6415268993f16","unresolved":true,"context_lines":[{"line_number":1316,"context_line":"        backend_details \u003d share_server.get(\u0027backend_details\u0027) or {}"},{"line_number":1317,"context_line":"        dest_svm \u003d backend_details.get(\u0027vserver_name\u0027)"},{"line_number":1318,"context_line":"        if not dest_svm:"},{"line_number":1319,"context_line":"            msg \u003d _(\"Cannot protect SMas volume: the share server\u0027s \""},{"line_number":1320,"context_line":"                    \"backend details are missing the destination \""},{"line_number":1321,"context_line":"                    \"vserver name.\")"},{"line_number":1322,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1323,"context_line":"        share_name \u003d self._get_backend_share_name(share[\u0027id\u0027])"},{"line_number":1324,"context_line":"        self._client.patch_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"cfcb75b8_dda70bb5","line":1321,"range":{"start_line":1319,"start_character":21,"end_line":1321,"end_character":34},"in_reply_to":"f831e9b0_8821f5d3","updated":"2026-09-01 05:06:41.000000000","message":"Marked as unresolved.\n\nyou didn\u0027t remove SMas","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1597,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":1598,"context_line":"        \"\"\"Deletes a share, implicitly unprotecting it first if needed."},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"        If the share server is replicated and the share is protected,"},{"line_number":1601,"context_line":"        unprotects it, waits for the SMas relationship to settle back"},{"line_number":1602,"context_line":"        to in_sync, and cleans up the destination before deleting."},{"line_number":1603,"context_line":"        \"\"\""},{"line_number":1604,"context_line":"        has_share_server_replica \u003d self._share_server_has_replica(share_server)"},{"line_number":1605,"context_line":"        if has_share_server_replica:"}],"source_content_type":"text/x-python","patch_set":18,"id":"76999a78_8783aa3d","line":1602,"range":{"start_line":1600,"start_character":0,"end_line":1602,"end_character":66},"updated":"2026-08-27 07:04:50.000000000","message":"gratuitous comments.. \n\nare these really helping maintainers?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1597,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":1598,"context_line":"        \"\"\"Deletes a share, implicitly unprotecting it first if needed."},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"        If the share server is replicated and the share is protected,"},{"line_number":1601,"context_line":"        unprotects it, waits for the SMas relationship to settle back"},{"line_number":1602,"context_line":"        to in_sync, and cleans up the destination before deleting."},{"line_number":1603,"context_line":"        \"\"\""},{"line_number":1604,"context_line":"        has_share_server_replica \u003d self._share_server_has_replica(share_server)"},{"line_number":1605,"context_line":"        if has_share_server_replica:"}],"source_content_type":"text/x-python","patch_set":18,"id":"e1ada65b_e2f053a4","line":1602,"range":{"start_line":1600,"start_character":0,"end_line":1602,"end_character":66},"in_reply_to":"76999a78_8783aa3d","updated":"2026-08-27 11:14:04.000000000","message":"Ack.\nOne line comment is good enough, removed it","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1664,"context_line":"            return"},{"line_number":1665,"context_line":"        protection \u003d volume.get(\u0027smas_protection\u0027)"},{"line_number":1666,"context_line":"        if protection !\u003d na_utils.SMAS_PROTECTION_PROTECTED:"},{"line_number":1667,"context_line":"            LOG.info(\"Share %(share)s is already unprotected \""},{"line_number":1668,"context_line":"                     \"(smas_protection\u003d%(protection)s); skipping \""},{"line_number":1669,"context_line":"                     \"implicit unprotect.\","},{"line_number":1670,"context_line":"                     {\u0027share\u0027: share_volume_name, \u0027protection\u0027: protection})"}],"source_content_type":"text/x-python","patch_set":18,"id":"149ba023_d4155695","line":1667,"range":{"start_line":1667,"start_character":16,"end_line":1667,"end_character":20},"updated":"2026-08-27 07:04:50.000000000","message":"info?\n\nhow is this useful to an administrator that reads the logs?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"            return"},{"line_number":1665,"context_line":"        protection \u003d volume.get(\u0027smas_protection\u0027)"},{"line_number":1666,"context_line":"        if protection !\u003d na_utils.SMAS_PROTECTION_PROTECTED:"},{"line_number":1667,"context_line":"            LOG.info(\"Share %(share)s is already unprotected \""},{"line_number":1668,"context_line":"                     \"(smas_protection\u003d%(protection)s); skipping \""},{"line_number":1669,"context_line":"                     \"implicit unprotect.\","},{"line_number":1670,"context_line":"                     {\u0027share\u0027: share_volume_name, \u0027protection\u0027: protection})"}],"source_content_type":"text/x-python","patch_set":18,"id":"875ef3e4_e4a07d1f","line":1667,"range":{"start_line":1667,"start_character":16,"end_line":1667,"end_character":20},"in_reply_to":"149ba023_d4155695","updated":"2026-08-27 11:14:04.000000000","message":"Moved to debug level.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1678,"context_line":"                    \"relationship not found for the share-server replica.\")"},{"line_number":1679,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1680,"context_line":"        state \u003d relationship.get(\u0027state\u0027)"},{"line_number":1681,"context_line":"        if state !\u003d na_utils.SM_IN_SYNC_STATE:"},{"line_number":1682,"context_line":"            msg \u003d _(\"Cannot delete a protected share while the share-\""},{"line_number":1683,"context_line":"                    \"server replica is \u0027%s\u0027. Retry once it reaches \""},{"line_number":1684,"context_line":"                    \"in_sync.\")"},{"line_number":1685,"context_line":"            raise exception.NetAppException(msg % state)"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":"        # Step 2: Unprotect the share."},{"line_number":1688,"context_line":"        self._client.patch_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"a1d755f5_b44d2b4f","line":1685,"range":{"start_line":1681,"start_character":0,"end_line":1685,"end_character":56},"updated":"2026-08-27 07:04:50.000000000","message":"Why can\u0027t the driver retry?\n\nRaising an error here would set the share\u0027s status to \"error_deleting\".","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"c6f2de02be69527f5290de524241dd0ea0f068b5","unresolved":false,"context_lines":[{"line_number":1678,"context_line":"                    \"relationship not found for the share-server replica.\")"},{"line_number":1679,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1680,"context_line":"        state \u003d relationship.get(\u0027state\u0027)"},{"line_number":1681,"context_line":"        if state !\u003d na_utils.SM_IN_SYNC_STATE:"},{"line_number":1682,"context_line":"            msg \u003d _(\"Cannot delete a protected share while the share-\""},{"line_number":1683,"context_line":"                    \"server replica is \u0027%s\u0027. Retry once it reaches \""},{"line_number":1684,"context_line":"                    \"in_sync.\")"},{"line_number":1685,"context_line":"            raise exception.NetAppException(msg % state)"},{"line_number":1686,"context_line":""},{"line_number":1687,"context_line":"        # Step 2: Unprotect the share."},{"line_number":1688,"context_line":"        self._client.patch_volume("}],"source_content_type":"text/x-python","patch_set":18,"id":"c912e31a_b56d0b78","line":1685,"range":{"start_line":1681,"start_character":0,"end_line":1685,"end_character":56},"in_reply_to":"a1d755f5_b44d2b4f","updated":"2026-08-28 16:05:00.000000000","message":"Thanks for the suggestion, fixed in both create and delete share pre-checks.\nMarking as Resolved.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1694,"context_line":"            src_svm, share_volume_name, fields\u003d\u0027smas_protection,uuid\u0027)"},{"line_number":1695,"context_line":"        if (vol_info.get(\u0027smas_protection\u0027)"},{"line_number":1696,"context_line":"                \u003d\u003d na_utils.SMAS_PROTECTION_PROTECTED):"},{"line_number":1697,"context_line":"            msg \u003d _(\"Implicit unprotect job succeeded but the volume is \""},{"line_number":1698,"context_line":"                    \"still reported as protected; aborting destination \""},{"line_number":1699,"context_line":"                    \"cleanup. Retry the delete.\")"},{"line_number":1700,"context_line":"            raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fbfd82e4_df7f21ee","line":1697,"range":{"start_line":1697,"start_character":21,"end_line":1697,"end_character":44},"updated":"2026-08-27 07:04:50.000000000","message":"What does this mean?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"            src_svm, share_volume_name, fields\u003d\u0027smas_protection,uuid\u0027)"},{"line_number":1695,"context_line":"        if (vol_info.get(\u0027smas_protection\u0027)"},{"line_number":1696,"context_line":"                \u003d\u003d na_utils.SMAS_PROTECTION_PROTECTED):"},{"line_number":1697,"context_line":"            msg \u003d _(\"Implicit unprotect job succeeded but the volume is \""},{"line_number":1698,"context_line":"                    \"still reported as protected; aborting destination \""},{"line_number":1699,"context_line":"                    \"cleanup. Retry the delete.\")"},{"line_number":1700,"context_line":"            raise exception.NetAppException(msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ed9b7da0_5fb0b565","line":1697,"range":{"start_line":1697,"start_character":21,"end_line":1697,"end_character":44},"in_reply_to":"fbfd82e4_df7f21ee","updated":"2026-08-27 11:14:04.000000000","message":"Reworded the terminology.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1695,"context_line":"        if (vol_info.get(\u0027smas_protection\u0027)"},{"line_number":1696,"context_line":"                \u003d\u003d na_utils.SMAS_PROTECTION_PROTECTED):"},{"line_number":1697,"context_line":"            msg \u003d _(\"Implicit unprotect job succeeded but the volume is \""},{"line_number":1698,"context_line":"                    \"still reported as protected; aborting destination \""},{"line_number":1699,"context_line":"                    \"cleanup. Retry the delete.\")"},{"line_number":1700,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"        # Step 3 Clear destination junction + delete dest volume."},{"line_number":1703,"context_line":"        dp_dest_server, dp_dest_client, dp_dest_svm \u003d ("}],"source_content_type":"text/x-python","patch_set":18,"id":"322ee3fe_810a7f1b","line":1700,"range":{"start_line":1698,"start_character":50,"end_line":1700,"end_character":48},"updated":"2026-08-27 07:04:50.000000000","message":"Again, who are you sending these messages to?\n\nThese aren\u0027t getting to the end user that will just see their share transitioning from \"deleting\" to \"error_deleting\" because of this exception. \n\nI see the lack of robustness here concerning - this reads a bit like a \"try once and bail\" sorta scripting rather than software that\u0027s meant to be self-service, scaleable and self-healing.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"c6f2de02be69527f5290de524241dd0ea0f068b5","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"        if (vol_info.get(\u0027smas_protection\u0027)"},{"line_number":1696,"context_line":"                \u003d\u003d na_utils.SMAS_PROTECTION_PROTECTED):"},{"line_number":1697,"context_line":"            msg \u003d _(\"Implicit unprotect job succeeded but the volume is \""},{"line_number":1698,"context_line":"                    \"still reported as protected; aborting destination \""},{"line_number":1699,"context_line":"                    \"cleanup. Retry the delete.\")"},{"line_number":1700,"context_line":"            raise exception.NetAppException(msg)"},{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"        # Step 3 Clear destination junction + delete dest volume."},{"line_number":1703,"context_line":"        dp_dest_server, dp_dest_client, dp_dest_svm \u003d ("}],"source_content_type":"text/x-python","patch_set":18,"id":"3d066a4a_8fd8fc18","line":1700,"range":{"start_line":1698,"start_character":50,"end_line":1700,"end_character":48},"in_reply_to":"322ee3fe_810a7f1b","updated":"2026-08-28 16:05:00.000000000","message":"Regarding the message, your observation is correct; the current wording only logs to manila-share. While this aligns with the existing code pattern, we have discussed this internally and aim to improve this behavior overall as a backlog.\n\nAdded wait for insync status before attempting for unprotect volume:\n(https://review.opendev.org/c/openstack/manila/+/996629/comment/a1d755f5_b44d2b4f/)\n\npatch_volume already waits for the ONTAP job using send_request(wait_on_accepted\u003dTrue). Since _wait_job_result raises an error on job failure, the extra GET just turns a rare consistency lag into a hard failure. There\u0027s no point in adding a retry for patch_volume here. Also, this workflow is idempotent.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1705,"context_line":"        if not dp_dest_server:"},{"line_number":1706,"context_line":"            return"},{"line_number":1707,"context_line":"        if not dp_dest_client:"},{"line_number":1708,"context_line":"            LOG.warning(\"Destination cluster unreachable during implicit \""},{"line_number":1709,"context_line":"                        \"unprotect for share %s; manual cleanup of the \""},{"line_number":1710,"context_line":"                        \"destination volume may be needed.\", share[\u0027id\u0027])"},{"line_number":1711,"context_line":"            return"},{"line_number":1712,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"e94d274c_af2da04e","line":1709,"range":{"start_line":1708,"start_character":64,"end_line":1709,"end_character":34},"updated":"2026-08-27 07:04:50.000000000","message":"what is an implicit unprotect? is that some manila terminology that we\u0027re introducing?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1705,"context_line":"        if not dp_dest_server:"},{"line_number":1706,"context_line":"            return"},{"line_number":1707,"context_line":"        if not dp_dest_client:"},{"line_number":1708,"context_line":"            LOG.warning(\"Destination cluster unreachable during implicit \""},{"line_number":1709,"context_line":"                        \"unprotect for share %s; manual cleanup of the \""},{"line_number":1710,"context_line":"                        \"destination volume may be needed.\", share[\u0027id\u0027])"},{"line_number":1711,"context_line":"            return"},{"line_number":1712,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"8967d934_41e815dc","line":1709,"range":{"start_line":1708,"start_character":64,"end_line":1709,"end_character":34},"in_reply_to":"e94d274c_af2da04e","updated":"2026-08-27 11:14:04.000000000","message":"Reworded the terminology.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4c78939af0ce36bdf29fac22b789997af5e8cf77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"6cd40e14_165771fe","line":3499,"updated":"2026-09-01 20:13:23.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"32adc47212ec40be5420c1f623e5713e6c572934"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4c78939af0ce36bdf29fac22b789997af5e8cf77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"1a56d52d_982fb306","line":3500,"updated":"2026-09-01 20:13:23.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"32adc47212ec40be5420c1f623e5713e6c572934"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4c78939af0ce36bdf29fac22b789997af5e8cf77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"ab1d823e_5683e4bb","line":3603,"updated":"2026-09-01 20:13:23.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"32adc47212ec40be5420c1f623e5713e6c572934"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"35f513ed7024ac0405d11be16e111be8c0d4dd53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"b6770ae8_2fcf68c0","line":3499,"updated":"2026-09-02 05:44:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"34c33b70fd5a6565c01ebdf49ce9b6ab2155e1ac"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"35f513ed7024ac0405d11be16e111be8c0d4dd53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"dd8f76c7_e22bcb30","line":3500,"updated":"2026-09-02 05:44:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"34c33b70fd5a6565c01ebdf49ce9b6ab2155e1ac"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"35f513ed7024ac0405d11be16e111be8c0d4dd53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"b0223699_33cbd7da","line":3603,"updated":"2026-09-02 05:44:32.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"34c33b70fd5a6565c01ebdf49ce9b6ab2155e1ac"}],"manila/share/drivers/netapp/options.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":417,"context_line":"               default\u003d3600,  # One Hour"},{"line_number":418,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for mounting \u0027"},{"line_number":419,"context_line":"                    \u0027a replica.\u0027),"},{"line_number":420,"context_line":"    cfg.IntOpt(\u0027netapp_smas_share_delete_wait_for_insync_timeout\u0027,"},{"line_number":421,"context_line":"               min\u003d0,"},{"line_number":422,"context_line":"               default\u003d600,  # 10 minutes"},{"line_number":423,"context_line":"               help\u003d\u0027The maximum time in seconds that delete_share waits \u0027"},{"line_number":424,"context_line":"                    \u0027for a SnapMirror active sync (SMas) relationship to \u0027"},{"line_number":425,"context_line":"                    \u0027return to the \"in_sync\" state after a share is \u0027"},{"line_number":426,"context_line":"                    \u0027unprotected, before attempting to delete the \u0027"},{"line_number":427,"context_line":"                    \u0027share\\\u0027s volume.\u0027),"},{"line_number":428,"context_line":"    cfg.BoolOpt(\u0027netapp_smas_share_delete_insync_required\u0027,"},{"line_number":429,"context_line":"                default\u003dFalse,"},{"line_number":430,"context_line":"                help\u003d\u0027If disabled (the default), delete_share only logs \u0027"},{"line_number":431,"context_line":"                     \u0027a warning and proceeds to attempt the share \u0027"},{"line_number":432,"context_line":"                     \u0027deletion anyway once \u0027"},{"line_number":433,"context_line":"                     \u0027\"netapp_smas_share_delete_wait_for_insync_timeout\" \u0027"},{"line_number":434,"context_line":"                     \u0027is reached without the SMas SnapMirror \u0027"},{"line_number":435,"context_line":"                     \u0027relationship returning to \"in_sync\" state. If \u0027"},{"line_number":436,"context_line":"                     \u0027enabled, delete_share aborts the share deletion \u0027"},{"line_number":437,"context_line":"                     \u0027instead.\u0027),"},{"line_number":438,"context_line":"]"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"netapp_backup_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":18,"id":"2289a292_99357d35","line":437,"range":{"start_line":420,"start_character":0,"end_line":437,"end_character":33},"updated":"2026-08-27 07:04:50.000000000","message":"Instead of these coarse knobs, wouldn\u0027t it be better if the driver queued up deletions and reaped them in a periodic task?","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":417,"context_line":"               default\u003d3600,  # One Hour"},{"line_number":418,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for mounting \u0027"},{"line_number":419,"context_line":"                    \u0027a replica.\u0027),"},{"line_number":420,"context_line":"    cfg.IntOpt(\u0027netapp_smas_share_delete_wait_for_insync_timeout\u0027,"},{"line_number":421,"context_line":"               min\u003d0,"},{"line_number":422,"context_line":"               default\u003d600,  # 10 minutes"},{"line_number":423,"context_line":"               help\u003d\u0027The maximum time in seconds that delete_share waits \u0027"},{"line_number":424,"context_line":"                    \u0027for a SnapMirror active sync (SMas) relationship to \u0027"},{"line_number":425,"context_line":"                    \u0027return to the \"in_sync\" state after a share is \u0027"},{"line_number":426,"context_line":"                    \u0027unprotected, before attempting to delete the \u0027"},{"line_number":427,"context_line":"                    \u0027share\\\u0027s volume.\u0027),"},{"line_number":428,"context_line":"    cfg.BoolOpt(\u0027netapp_smas_share_delete_insync_required\u0027,"},{"line_number":429,"context_line":"                default\u003dFalse,"},{"line_number":430,"context_line":"                help\u003d\u0027If disabled (the default), delete_share only logs \u0027"},{"line_number":431,"context_line":"                     \u0027a warning and proceeds to attempt the share \u0027"},{"line_number":432,"context_line":"                     \u0027deletion anyway once \u0027"},{"line_number":433,"context_line":"                     \u0027\"netapp_smas_share_delete_wait_for_insync_timeout\" \u0027"},{"line_number":434,"context_line":"                     \u0027is reached without the SMas SnapMirror \u0027"},{"line_number":435,"context_line":"                     \u0027relationship returning to \"in_sync\" state. If \u0027"},{"line_number":436,"context_line":"                     \u0027enabled, delete_share aborts the share deletion \u0027"},{"line_number":437,"context_line":"                     \u0027instead.\u0027),"},{"line_number":438,"context_line":"]"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"netapp_backup_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":18,"id":"5193e04e_211b7652","line":437,"range":{"start_line":420,"start_character":0,"end_line":437,"end_character":33},"in_reply_to":"2289a292_99357d35","updated":"2026-08-27 11:14:04.000000000","message":"The wait isn\u0027t a tuning convenience, it\u0027s a mandatory ONTAP transition. With SM-as for NAS,\nprotection is modelled at the SVM level, and unprotecting a share (the prerequisite for deleting\nits volume, since ONTAP rejects deleting a volume that is still a SnapMirror source endpoint)\ndrops the SVM-level relationship into a transient \u0027shrinking\u0027/\u0027expanding\u0027 state before ONTAP\nreturns it to \u0027in_sync\u0027 on its own schedule. Since that relationship is shared per SVM, any\nconcurrent protect/unprotect in the same SVM also holds it out of \u0027in_sync\u0027, so the settling time\ndepends on member count and cluster load -- deployment-specific, hence a per-backend option,\nfollowing the existing pattern (netapp_volume_move_cutover_timeout,\nnetapp_server_migration_state_change_timeout, netapp_mount_replica_timeout).\n\nIf the concern is\noption count, I can drop the boolean(netapp_smas_share_delete_insync_required) and always fail fast, but I\u0027d keep the configurable bound.\n\nMarking this as resolve with the above info. Please let us know incase of any queries/suggestions.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7198afdfaacc386da291855754a6415268993f16","unresolved":true,"context_lines":[{"line_number":417,"context_line":"               default\u003d3600,  # One Hour"},{"line_number":418,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for mounting \u0027"},{"line_number":419,"context_line":"                    \u0027a replica.\u0027),"},{"line_number":420,"context_line":"    cfg.IntOpt(\u0027netapp_smas_share_delete_wait_for_insync_timeout\u0027,"},{"line_number":421,"context_line":"               min\u003d0,"},{"line_number":422,"context_line":"               default\u003d600,  # 10 minutes"},{"line_number":423,"context_line":"               help\u003d\u0027The maximum time in seconds that delete_share waits \u0027"},{"line_number":424,"context_line":"                    \u0027for a SnapMirror active sync (SMas) relationship to \u0027"},{"line_number":425,"context_line":"                    \u0027return to the \"in_sync\" state after a share is \u0027"},{"line_number":426,"context_line":"                    \u0027unprotected, before attempting to delete the \u0027"},{"line_number":427,"context_line":"                    \u0027share\\\u0027s volume.\u0027),"},{"line_number":428,"context_line":"    cfg.BoolOpt(\u0027netapp_smas_share_delete_insync_required\u0027,"},{"line_number":429,"context_line":"                default\u003dFalse,"},{"line_number":430,"context_line":"                help\u003d\u0027If disabled (the default), delete_share only logs \u0027"},{"line_number":431,"context_line":"                     \u0027a warning and proceeds to attempt the share \u0027"},{"line_number":432,"context_line":"                     \u0027deletion anyway once \u0027"},{"line_number":433,"context_line":"                     \u0027\"netapp_smas_share_delete_wait_for_insync_timeout\" \u0027"},{"line_number":434,"context_line":"                     \u0027is reached without the SMas SnapMirror \u0027"},{"line_number":435,"context_line":"                     \u0027relationship returning to \"in_sync\" state. If \u0027"},{"line_number":436,"context_line":"                     \u0027enabled, delete_share aborts the share deletion \u0027"},{"line_number":437,"context_line":"                     \u0027instead.\u0027),"},{"line_number":438,"context_line":"]"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"netapp_backup_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":18,"id":"9a336354_cf7f11f3","line":437,"range":{"start_line":420,"start_character":0,"end_line":437,"end_character":33},"in_reply_to":"5193e04e_211b7652","updated":"2026-09-01 05:06:41.000000000","message":"\u003e so the settling time\ndepends on member count and cluster load\n\nI honestly don\u0027t know what this means. I don\u0027t like designing software that depends on magic numbers. The administrator in all honestly would have to make up some numbers and hope/pray that they\u0027re right, correct? Or, do you have a deterministic way to quantify \"member count\" and \"cluster load\"? Is there a mathematical formula that ONTAP asks OpenStack administrators to follow?\n\nDo check what I mean by \"the driver queued up deletions and reaped them in a periodic task\". That\u0027s a pattern used in the driver today that requires no such administrator guesswork.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"bd862d1196fd6c64d3ea9c7433f6f4a88a475cc4","unresolved":false,"context_lines":[{"line_number":417,"context_line":"               default\u003d3600,  # One Hour"},{"line_number":418,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for mounting \u0027"},{"line_number":419,"context_line":"                    \u0027a replica.\u0027),"},{"line_number":420,"context_line":"    cfg.IntOpt(\u0027netapp_smas_share_delete_wait_for_insync_timeout\u0027,"},{"line_number":421,"context_line":"               min\u003d0,"},{"line_number":422,"context_line":"               default\u003d600,  # 10 minutes"},{"line_number":423,"context_line":"               help\u003d\u0027The maximum time in seconds that delete_share waits \u0027"},{"line_number":424,"context_line":"                    \u0027for a SnapMirror active sync (SMas) relationship to \u0027"},{"line_number":425,"context_line":"                    \u0027return to the \"in_sync\" state after a share is \u0027"},{"line_number":426,"context_line":"                    \u0027unprotected, before attempting to delete the \u0027"},{"line_number":427,"context_line":"                    \u0027share\\\u0027s volume.\u0027),"},{"line_number":428,"context_line":"    cfg.BoolOpt(\u0027netapp_smas_share_delete_insync_required\u0027,"},{"line_number":429,"context_line":"                default\u003dFalse,"},{"line_number":430,"context_line":"                help\u003d\u0027If disabled (the default), delete_share only logs \u0027"},{"line_number":431,"context_line":"                     \u0027a warning and proceeds to attempt the share \u0027"},{"line_number":432,"context_line":"                     \u0027deletion anyway once \u0027"},{"line_number":433,"context_line":"                     \u0027\"netapp_smas_share_delete_wait_for_insync_timeout\" \u0027"},{"line_number":434,"context_line":"                     \u0027is reached without the SMas SnapMirror \u0027"},{"line_number":435,"context_line":"                     \u0027relationship returning to \"in_sync\" state. If \u0027"},{"line_number":436,"context_line":"                     \u0027enabled, delete_share aborts the share deletion \u0027"},{"line_number":437,"context_line":"                     \u0027instead.\u0027),"},{"line_number":438,"context_line":"]"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"netapp_backup_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":18,"id":"bdf8ddf4_d3adb665","line":437,"range":{"start_line":420,"start_character":0,"end_line":437,"end_character":33},"in_reply_to":"9a336354_cf7f11f3","updated":"2026-09-02 04:05:50.000000000","message":"1. SM-as needs this wait by design. After unprotect, the SVM relationship goes through shrinking/expanding before it comes back to \"in_sync\", and we can\u0027t delete until that settles. Your \"try once and bail\" comment was right too, so this is a retry loop around that pre-check, and the option is just where that loop stops. ONTAP doesn\u0027t push when it hits \"in_sync\", and Manila\u0027s driver calls are synchronous anyway, so we poll and polling needs a stop condition.\n\n2. We can\u0027t predict or guarantee when ONTAP will finish re-converging — there\u0027s no published model and we aren\u0027t claiming one. What we can do is bound it, and a ceiling doesn\u0027t have to be accurate to be correct, only high enough. We see the relationship settle in a few seconds with 5 volumes. Unprotect drops a member and ONTAP re-converges the rest, so it grows with member count, and SAP asked for 50 shares per SVM. Call it tens of seconds at that size. 600 is well past that on purpose, so in normal running you never get near it and there\u0027s nothing for an admin to work out.\n\n3. I can\u0027t turn that into a fixed constant though. It isn\u0027t deterministic, and SM-as spans two clusters, so the link and the hardware on both ends matter. Same reason we already have \"netapp_flexgroup_aggregate_not_busy_timeout\" and \"netapp_delete_busy_flexgroup_snapshot_timeout\" as options rather than constants.\n\nThe existing deferred-deletion queue (is_deferred_deletion_enabled) is unchanged and still works the same way as today. If we hit issues at higher scale, we can look at tightening this in a follow-up.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"}],"manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"067f23e7e0335a52a8948da33654ce0218a820e1","unresolved":true,"context_lines":[{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"    def test_create_share_from_snapshot_another_host_smas_rehost_rejected("},{"line_number":1200,"context_line":"            self):"},{"line_number":1201,"context_line":"        # SMAS NAS pre-check: same cluster, not flexgroup, cluster creds"},{"line_number":1202,"context_line":"        # available, source/destination on different SVMs and destination"},{"line_number":1203,"context_line":"        # share server is SMAS-protected -\u003e volume rehost is rejected"},{"line_number":1204,"context_line":"        # before entering the try/except block."},{"line_number":1205,"context_line":"        self.library._have_cluster_creds \u003d True"},{"line_number":1206,"context_line":"        self._setup_mocks_for_create_share_from_snapshot("},{"line_number":1207,"context_line":"            dest_cluster\u003dfake.CLUSTER_NAME, is_flexgroup\u003dFalse)"},{"line_number":1208,"context_line":"        self.mock_object("}],"source_content_type":"text/x-python","patch_set":18,"id":"75b7b9a4_83b99259","line":1205,"range":{"start_line":1201,"start_character":8,"end_line":1205,"end_character":8},"updated":"2026-08-27 07:04:50.000000000","message":"do these comments help you folks maintain the driver? \n\nTHese are unit tests. Unless the logic is painful to understand, comments aren\u0027t necessary.","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"b6a98898180cc984dc960ca36060c044fca278c8","unresolved":false,"context_lines":[{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"    def test_create_share_from_snapshot_another_host_smas_rehost_rejected("},{"line_number":1200,"context_line":"            self):"},{"line_number":1201,"context_line":"        # SMAS NAS pre-check: same cluster, not flexgroup, cluster creds"},{"line_number":1202,"context_line":"        # available, source/destination on different SVMs and destination"},{"line_number":1203,"context_line":"        # share server is SMAS-protected -\u003e volume rehost is rejected"},{"line_number":1204,"context_line":"        # before entering the try/except block."},{"line_number":1205,"context_line":"        self.library._have_cluster_creds \u003d True"},{"line_number":1206,"context_line":"        self._setup_mocks_for_create_share_from_snapshot("},{"line_number":1207,"context_line":"            dest_cluster\u003dfake.CLUSTER_NAME, is_flexgroup\u003dFalse)"},{"line_number":1208,"context_line":"        self.mock_object("}],"source_content_type":"text/x-python","patch_set":18,"id":"d05b7be0_1e688bbe","line":1205,"range":{"start_line":1201,"start_character":8,"end_line":1205,"end_character":8},"in_reply_to":"75b7b9a4_83b99259","updated":"2026-08-27 11:14:04.000000000","message":"Done","commit_id":"635492095add28c81d8d8d6392a42ed0f3c18abd"}],"releasenotes/notes/netapp-enhance-share-workflows-to-support-share-server-replication-c93426489c6c4dfe.yaml":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"5f07ba939510dec09ed62671620d1d010af080a3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"166cc10e_020a3cb6","line":11,"updated":"2026-08-25 08:24:49.000000000","message":"Please mention the two new options netapp_smas_share_delete_insync_required and netapp_smas_share_delete_wait_for_insync_timeout","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"f94ecdf6a3359bd115dd8a683b180efdae105bcf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"3c86d866_36a08e3d","line":11,"in_reply_to":"166cc10e_020a3cb6","updated":"2026-08-26 09:08:14.000000000","message":"Done","commit_id":"10f9c1469fe622fbc40e3f44bd88cc7f40f520f6"}]}
