)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"006a5b185a3d8624d6e587cb212938580fce16d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9a13a822_4c6d82a7","updated":"2026-02-12 14:48:13.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"5a6c3b3783af1328d28bb7f151913e4a246164ae"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"a1fe67c96ee6a91ddc7fdce4841ec5b01a591400","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b1a26f93_fafd9d16","updated":"2026-02-12 10:47:26.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"5a6c3b3783af1328d28bb7f151913e4a246164ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"3ea4a0ed54fa32161a5c5d531faf5efb89c0229c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ed7fa1fe_58d9701a","updated":"2026-02-12 15:09:37.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"5a6c3b3783af1328d28bb7f151913e4a246164ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"475ca1a218fa0fefbfc7820d0f78507ce2bf0b8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"93dcaf0e_c11a8f65","updated":"2026-02-12 05:22:38.000000000","message":"recheck","commit_id":"5a6c3b3783af1328d28bb7f151913e4a246164ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"bb39f937411b7f824344cae9c4dc79f44f2b186a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b622dce7_76d41fc0","updated":"2026-02-11 14:28:12.000000000","message":"recheck","commit_id":"5a6c3b3783af1328d28bb7f151913e4a246164ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"7e8dfee9a76ab7eb15e6f9018220de6ac61999ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"336f91dd_1103821a","updated":"2026-02-18 10:06:22.000000000","message":"recheck","commit_id":"8882ba747607510cf7a7f3a27403e0a2acae05f0"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"79984814d44592e200d4fd31e12ae5ee6796bd2c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6e085cf8_d432273c","updated":"2026-02-19 11:48:29.000000000","message":"recheck","commit_id":"8677c8205ace78dafd22f56acd43babc8c591796"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"3b71560b7bd0ee562193a1ef80dc3d82bffa9d96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8364cdb0_11e9cec0","updated":"2026-02-20 05:58:49.000000000","message":"recheck","commit_id":"8677c8205ace78dafd22f56acd43babc8c591796"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"5ccf1d548e275b6a59683a4310bb2b082fa2b695","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"78a3d454_98f9c177","updated":"2026-03-02 06:06:47.000000000","message":"@rosmaita.fossdev@gmail.com, @jobernar@redhat.com and @rajatdhasmana@gmail.com, could please review this patch.","commit_id":"18bc867fc4bf30542bf7bc5567808756d147c894"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"b1ea7656483c8067411647905532b67f1c064661","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a2d09766_31e59cc8","updated":"2026-02-26 14:46:15.000000000","message":"LGTM","commit_id":"18bc867fc4bf30542bf7bc5567808756d147c894"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"c864b9198dbe3c2747fcb244384f25b60becca74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"7e453a5f_24921ff6","updated":"2026-02-24 04:29:11.000000000","message":"run-NetApp CI","commit_id":"18bc867fc4bf30542bf7bc5567808756d147c894"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"35fc464760f91a208bfbfe8a2d8759b59d4d403e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1a779d7d_ba0de7d6","updated":"2026-03-09 06:22:18.000000000","message":"LGTM","commit_id":"45f172b4a1ca521979d6aceac39b151a7e70ef51"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"23d09d34e1bd5f6a9ece06631d3e71606c403cde","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"58c95280_a02a7597","updated":"2026-03-06 09:19:00.000000000","message":"Run-NetApp CI","commit_id":"45f172b4a1ca521979d6aceac39b151a7e70ef51"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ede37e9a5a05629d5861b07fc3cc077b0df08e4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"810ae356_f0b582b4","updated":"2026-03-05 14:36:25.000000000","message":"Run-NetApp CI","commit_id":"45f172b4a1ca521979d6aceac39b151a7e70ef51"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"3e2f4392633eceb83c130dce2d21635ddc0d57e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"11fbfb87_4d7297f4","updated":"2026-03-15 13:33:10.000000000","message":"recheck","commit_id":"5ecb1f0e6c4b136915fca08c69d7f517eb287757"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8e9462f0344d5737e0eb8e6ade142fe5590fa165","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"382de835_8bb1c708","updated":"2026-03-21 08:12:03.000000000","message":"run-NetApp CI","commit_id":"5ecb1f0e6c4b136915fca08c69d7f517eb287757"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d68489021dbaa319b190138420af0ff0795cd9b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"ed030cd3_460a6f81","updated":"2026-03-17 04:46:18.000000000","message":"run-NetApp CI","commit_id":"5ecb1f0e6c4b136915fca08c69d7f517eb287757"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"292337a2c85291fa6150e85b6917c41761ac9e1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"fe51e603_cb4f0610","updated":"2026-03-20 11:36:45.000000000","message":"run-NetApp CI","commit_id":"5ecb1f0e6c4b136915fca08c69d7f517eb287757"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f5bc410e6213f436a1ffcddd791874e3e3381c1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"0d82427a_e5e6e6bf","updated":"2026-03-31 06:12:57.000000000","message":"recheck","commit_id":"3dbf3f8e6a6fc68b7010993d6c6ec1a87daa73c0"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"e1283fe378b43f02b5c3adf7a2f1b6a622ee0560","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f911ea57_55e8278b","updated":"2026-03-31 09:18:29.000000000","message":"recheck","commit_id":"3dbf3f8e6a6fc68b7010993d6c6ec1a87daa73c0"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"929ad05bc837014892772882056546356a0751fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"8a7dcd2a_07e55d91","updated":"2026-03-31 14:29:33.000000000","message":"run-NetApp CI","commit_id":"3dbf3f8e6a6fc68b7010993d6c6ec1a87daa73c0"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6ccfc6802823f4a180b49fc17ea12b00e221d337","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"3d70f37d_daedbff7","updated":"2026-04-16 09:20:08.000000000","message":"recheck","commit_id":"dfd9f46bbfe37904fc8db684d22ed31d413b1dc4"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"c7efc8398931528f2abc5ddfb7071eb789dc96df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"95d850c6_c7ba02e7","updated":"2026-04-16 04:04:46.000000000","message":"recheck","commit_id":"dfd9f46bbfe37904fc8db684d22ed31d413b1dc4"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ac6649b29df015c1b7ed2f68d6962d5c5ae4bd1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"dfeb9d49_91e2fc54","updated":"2026-04-17 04:15:58.000000000","message":"recheck","commit_id":"dfd9f46bbfe37904fc8db684d22ed31d413b1dc4"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"683234382bdc5eb004057c7bb3a6f3a691f76060","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2d79948f_d7ca66ab","updated":"2026-04-28 21:35:49.000000000","message":"Please resolve the merge conflict","commit_id":"63b0ad8f636d796f0b7b907a0dbac78cd471480d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cf9af109ed719afeb9075157ed18b0e9d32cbfb7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"84c107d0_5ed2edc1","updated":"2026-04-18 12:07:20.000000000","message":"recheck","commit_id":"63b0ad8f636d796f0b7b907a0dbac78cd471480d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"a982b2bbee3288f7063d9aedbd5acbdae14992b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"a57f6780_e17850ac","updated":"2026-04-20 05:33:09.000000000","message":"recheck","commit_id":"63b0ad8f636d796f0b7b907a0dbac78cd471480d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"bad3a5cd115a41d500fe457ab5d9a4315f4f462e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"f6e5333e_7e697c0e","updated":"2026-04-20 12:02:38.000000000","message":"recheck","commit_id":"63b0ad8f636d796f0b7b907a0dbac78cd471480d"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"bbe99922787ca76f99462c568c9cbe2abd3dc729","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"6aa000e4_b5191990","updated":"2026-05-07 12:16:20.000000000","message":"LTGM","commit_id":"53a2bb52976973f0bae8f788158321723d709d96"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a4c314e7fc6b95990a267da1b5cdf7783568e8ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"df73002b_3ddd688d","updated":"2026-05-13 14:31:21.000000000","message":"Problem with the release note formatting; see comment inline.","commit_id":"53a2bb52976973f0bae8f788158321723d709d96"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"159c168ea966c6e4d5f92a3ca24d473db5b0c0b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"5a1627da_2cec6410","updated":"2026-05-11 09:33:59.000000000","message":"Run-NetApp CI","commit_id":"53a2bb52976973f0bae8f788158321723d709d96"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"36a1b924_09525cad","updated":"2026-05-15 15:57:12.000000000","message":"I have made some nitpicks and suggestions.\n\nThe -1 is for the following:\n1. I have some serious doubts about some of the code presented here, particularly in ```client_cmode_rest_asar2.py```, which looks like it may be AI.\n2. I think you need to use ```override_config``` in the unit tests to avoid issues with threading.\n3. I do wonder if the checks for split initiation can be the victim of a race condition.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"b4f7d4863c1d1b1fcae58dc16c54368269106f72","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"d51b35f4_7dcc4080","updated":"2026-05-15 16:00:57.000000000","message":"have made some nitpicks and suggestions.\n\nThe -1 is for the following:\n\n1. I have some serious doubts about some of the code presented here, particularly in ```client_cmode_rest_asar2.py```, which looks like it may be AI.\n2. I think you need to use ```override_config``` in the unit tests to avoid issues with threading.\n3. I do wonder if the checks for split initiation can be the victim of a race condition.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e8f07647682e3f5c5d35a3a0e8b19904cb00917c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"d8e398cc_2dd5073d","updated":"2026-05-15 15:59:55.000000000","message":"have made some nitpicks and suggestions.\n\nThe -1 is for the following:\n\nI have some serious doubts about some of the code presented here, particularly in client_cmode_rest_asar2.py, which looks like it may be AI.\nI think you need to use override_config in the unit tests to avoid issues with threading.\nI do wonder if the checks for split initiation can be the victim of a race condition.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e8677d7f89dab6f5dab6dc3300e1f85170023de6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"e92ea593_b605f101","in_reply_to":"3d5c2503_c4980281","updated":"2026-05-20 07:49:09.000000000","message":"Understood! \n\nThis is what made me think AI: return value.lower() in (\u0027true\u0027, \u00271\u0027, \u0027yes\u0027, \u0027on\u0027)\n\nAnd then the function after that I still don\u0027t fully understand (asked for clarification).","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"3d5c2503_c4980281","in_reply_to":"80446a19_ee14cb93","updated":"2026-05-19 12:01:07.000000000","message":"Initial code is written by me but at the end few places I have use AI to generate the code but all the code generated by AI is fully understood and tested.\nI made the require change in unit test, most of the unit test are generated by AI.\nFor split initialization, I have given the proper justification.\n\nLet me know if you have any further comment.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"dff70c65_02765cd4","in_reply_to":"d51b35f4_7dcc4080","updated":"2026-05-19 12:01:07.000000000","message":"Initial code is written by me but at the end few places I have use AI to generate the code but all the code generated by AI is fully understood and tested.\nI made the require change in unit test, most of the unit test are generated by AI.\nFor split initialization, I have given the proper justification.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"c0eca1905939509b7a682e51cef944eaab31a7e6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"80446a19_ee14cb93","in_reply_to":"d8e398cc_2dd5073d","updated":"2026-05-15 16:01:19.000000000","message":"resolving due to formatting","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8cc5229760c6a1280f3d3b1dfb81a2b2aff2b8b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"f6675365_600c1600","in_reply_to":"e92ea593_b605f101","updated":"2026-05-21 13:02:42.000000000","message":"It mean if API return one of there value as a string, this method should return True. I have change this also, i remove, I keep only (\"true\" and \"True\") in this case it will return True otherwise it will return False.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"58faa5e0344894f731e5008483aad5c3da72205c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6efa5735_5b70e43b","updated":"2026-05-20 06:32:48.000000000","message":"Hi @gawasthi2010@gmail.com,\n\nLeaving neutral for now as I\u0027m satisfied with most of your responses/changes, but I still have a question about the logic in the ```waiter``` if you can take a look.  \n\nI also think renaming the function that does the split and the wait might be useful.","commit_id":"f6da72d0db28fdcd4e4eeb7bd2fc06b72bc42069"},{"author":{"_account_id":38479,"name":"Medha Choudhary","display_name":"Medha Choudhary","email":"medhaj06@gmail.com","username":"medhac1403","status":"NetApp"},"change_message_id":"24ffdbb5fd190f6ac0b88331a2ed6487d3ac6a00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6a96121b_36a7c0cd","updated":"2026-05-20 05:30:35.000000000","message":"Run-NetApp CI","commit_id":"f6da72d0db28fdcd4e4eeb7bd2fc06b72bc42069"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"632aba92391eb246dfaf266eb84203c637452f7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"73843a7c_3a052ce3","updated":"2026-05-19 12:01:51.000000000","message":"Run-NetApp CI","commit_id":"f6da72d0db28fdcd4e4eeb7bd2fc06b72bc42069"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"8e266518_f5f51452","updated":"2026-05-19 12:01:07.000000000","message":"Thanks @anthony.galica@hitachivantara.com for your review comments, I provided my response and incorporated the review comments. Please take a look and feel free to reopen the comment if you disagree with my response.","commit_id":"f6da72d0db28fdcd4e4eeb7bd2fc06b72bc42069"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8cc5229760c6a1280f3d3b1dfb81a2b2aff2b8b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fb3a90b7_d4a954c2","in_reply_to":"6efa5735_5b70e43b","updated":"2026-05-21 13:02:42.000000000","message":"I have added my response, please take a look and let me know if you have any further comments.","commit_id":"f6da72d0db28fdcd4e4eeb7bd2fc06b72bc42069"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"86f32f5d6e0306fe2ed00fff702462011b92adf6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"cf67808c_6662d623","updated":"2026-05-22 05:18:14.000000000","message":"+1 as Gireesh has satisfied answering or changing the items I thought needed changing, or gave explanations otherwise (as well as putting up with my questioning!).","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"de3ec800fe9e167b4a8cdb9c2ea2e2c28226cc7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"432e1591_2c07284a","updated":"2026-06-02 06:25:10.000000000","message":"As I am a new core, I am trying to tread a little lightly on XL patches with my +2 initially.\n\nFor now it\u0027s a +1 from me as questions were answered and changes were made as requested (including some that I left as optional).\n\nOnce there are a couple more non-core reviews or a core +2 I am willing to go over the current state of the patch and +2 it.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"1b366889d37a7512d859887938292a54f4efd4b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"e0e84bd9_397703b5","updated":"2026-06-02 13:14:19.000000000","message":"Please explain the NetApp CI situation.  Is the ASAr2 covered by the existing jobs, or does it require a new job (and how can we as reviewers tell?).  Thank you.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"199caf3d50dedeb0b83c3d06acd865998069a6e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"14a8863e_06380908","updated":"2026-05-22 03:52:21.000000000","message":"Run-NetApp CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"6baf683b86059b6c800721202500f8f7cba609b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"09559c00_6333c4f6","updated":"2026-06-10 10:49:10.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"4a24fe5aad750c04917d58e37c1f66900e7bbfa1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"34205268_32765a85","updated":"2026-06-09 15:30:11.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"452d6e92b96030ee60dbd5526d471b48803572a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"52d0d891_3f6d7592","updated":"2026-06-11 05:41:41.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"aae59782440a29d66513d23e00693e8efd7e010f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7e2db042_570156bb","updated":"2026-06-11 16:31:20.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"1622f6af9c7482918da75ec420be46ef3e17f4f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"b49ad434_4d477e56","updated":"2026-06-10 12:58:40.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"13608a96b1e39eaf40da78d5a902f5040853e187","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"c600f7e2_f909c928","updated":"2026-06-10 15:45:54.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"60664bbf0d0be3c0cfcce8344d1e0ec7e8114a33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"e5416731_5d38cc3b","updated":"2026-06-10 17:14:58.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8cc5229760c6a1280f3d3b1dfb81a2b2aff2b8b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"770cbede_8d59fa38","updated":"2026-05-21 13:02:42.000000000","message":"Thanks @anthony.galica@hitachivantara.com for your review comments, I have incorporated all, let me know if you have any further comments.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"09f0f8c7936ca8909e159ca9b80ef3d64176a4b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"a5b111e8_9d42fa89","in_reply_to":"e0e84bd9_397703b5","updated":"2026-06-21 08:56:56.000000000","message":"We are working on this ..! Will run ASAr2 pipeline for this patch.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"b1fe18a99312ca1200176bfa289729c5b097d7ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"4830adf2_52bb1eec","updated":"2026-06-14 14:07:29.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"2a12e37e618ce675190961537a20b98c2a1d77e5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"5fc68eff_4e73fadb","updated":"2026-06-14 10:41:15.000000000","message":"Thanks @jobernar@redhat.com, for your review comment. Please take a look and reopen the comment if you are not agree on my response.","commit_id":"2a12e37e618ce675190961537a20b98c2a1d77e5"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2a7da8569cd2532ad3ab3a4ac500bfcdac61a462","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"58f1dd9d_e0a4b7a9","updated":"2026-06-24 15:47:31.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"d987d48e09a4238de880b3b822a073ef5b31e90d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"dc582c3baaafe05a83454b271328715391ef1e2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"ad6ba128_10f2031e","updated":"2026-06-22 06:55:12.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"d987d48e09a4238de880b3b822a073ef5b31e90d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"9d008fb7a9648b09d79eb832a21093033dbd8a23","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"e1d28c83_1b1f138c","updated":"2026-06-21 15:50:30.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"d987d48e09a4238de880b3b822a073ef5b31e90d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ab56fb345cd2485476b83dce05547ee581fb19de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"aa047549_beda9e1b","updated":"2026-06-25 14:08:26.000000000","message":"https://netappopenstacklogserver.s3-us-west-1.amazonaws.com/logs/74/971174/22/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/2186c9e/controller/logs/screen-c-vol.txt\n\nand\n\nhttps://netappopenstacklogserver.s3-us-west-1.amazonaws.com/logs/74/971174/22/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/2186c9e/testr_results.html\n\n\n seems to show errors related to snapshots?","commit_id":"d987d48e09a4238de880b3b822a073ef5b31e90d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6fbc6fd78d859dfff016a1798574864fe0dc0ee1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":22,"id":"3f3fae77_c96c438b","in_reply_to":"aa047549_beda9e1b","updated":"2026-06-30 09:30:25.000000000","message":"eharney@redhat.com, There is only one test is failing and that is during the teardown. \nCould you please approve the patch now.\n\nhttps://netappopenstacklogserver.s3-us-west-1.amazonaws.com/logs/74/971174/23/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/0827222/testr_results.html","commit_id":"d987d48e09a4238de880b3b822a073ef5b31e90d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"55d4850490251628abf868958b67c1851f962874","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"c0b01361_017b3c22","updated":"2026-06-30 13:35:47.000000000","message":"Need to re-evaluate tempest results","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"c3149f67bdb0b74fba10af86744aa67ac4131ec7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"23f70dc0_6210f4b0","updated":"2026-06-29 04:26:08.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"80d7605c49617de52eef046292a5684840cd5ab0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"30980683_8f9d8139","updated":"2026-06-29 07:11:53.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"2aef24ce2387752334467ba9fd273bfc319cc15a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"34f3d5b6_4163f63f","updated":"2026-06-30 05:49:15.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":39161,"name":"Medha Choudhary netapp","display_name":"Medha Choudhary (netapp)","email":"medhac@netapp.com","username":"medhac","status":"Netapp"},"change_message_id":"a210a153a47943a428b84463a54d71d09811e7ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"c1186b80_fb1fe266","updated":"2026-06-30 05:21:43.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"7eed68d59256afdcdaa9d7afe5a08b5592d23b42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"d8eca66c_dda2c073","updated":"2026-06-30 06:42:37.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"fb1a630d7e0dd383c7c3bc6613a49559c3714537","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"dd4257d6_e9b2fe2b","updated":"2026-06-29 15:47:00.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cbb75cd1c72c2befff7305e708a6ef3c04649d89","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"aca626cc_2641a004","in_reply_to":"607c9065_686b0d27","updated":"2026-07-03 14:30:18.000000000","message":"@jobernar@redhat.com and @rosmaita.fossdev@gmail.com, could you please take a look. This is pending for long time.","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8f9a2cf65a62600a823fd3765c4d6536e76b2db9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"4ad20726_1a26b752","in_reply_to":"aca626cc_2641a004","updated":"2026-07-10 13:39:53.000000000","message":"eharney@redhat.com, I have evaluated the tempest from my end end only one test is failing and that is failing during the teardown. Hope that will not be blocker for merging this patch. And let me know if anything need to be done from my side.\nhttps://netappopenstacklogserver.s3-us-west-1.amazonaws.com/logs/74/971174/23/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/0827222/testr_results.html","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d80c27b749d2ab74a8e63b9e119bd736f450e32","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"607c9065_686b0d27","in_reply_to":"c0b01361_017b3c22","updated":"2026-07-01 14:55:56.000000000","message":"@eharney@redhat.com, this patch is pending since long time, let me know if anything need to done from my side. This raised last release and still not merged. Could you please speedup the process.","commit_id":"e4703d0326d6eed78097ec99915dcd9c1463cf4e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"2765da0d83681db3b21d364e1997da2d475857b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"18d8c221_482bc508","updated":"2026-07-16 06:10:46.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"ee3c8ccfc39c25e8e8a98981045ca49161b0a20c"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f9d480f5398bf731ca9fb9d590b91e1d86fabbb3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"1dbff100_e76254a0","updated":"2026-07-17 14:16:52.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"ee3c8ccfc39c25e8e8a98981045ca49161b0a20c"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"a7cd7a0775f1fc585e4f588d01cc457a3d829488","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"2b29e77b_b3888d96","updated":"2026-07-16 05:16:13.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"ee3c8ccfc39c25e8e8a98981045ca49161b0a20c"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"f88c856b10a9531d88cb41fac5a5a1bb0ec8fd4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"59dac3a2_f05c08cc","updated":"2026-07-16 15:26:46.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"ee3c8ccfc39c25e8e8a98981045ca49161b0a20c"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"378f5d326940aa93916eea86e4728f77db55b0e3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"b0c3e908_8ea4dae7","updated":"2026-07-17 11:54:02.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"ee3c8ccfc39c25e8e8a98981045ca49161b0a20c"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"dbf97eb37f44397f57587b8a6198ef7911b85353","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"fe4ec945_04cf2f52","updated":"2026-07-17 09:47:01.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"ee3c8ccfc39c25e8e8a98981045ca49161b0a20c"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"fccd27c022fcc89766823f82d0bf43159d126c11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"ff6745c7_323c79a3","updated":"2026-07-16 09:08:37.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"ee3c8ccfc39c25e8e8a98981045ca49161b0a20c"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"01b0b003757bcf426adee956658f74ac70ff4cf1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"53293ce5_f9df7667","updated":"2026-07-19 09:14:25.000000000","message":"Run-NetApp-ASAr2","commit_id":"1f015b4858595c343687ee3a2a8a0510c9592f0d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"77eb6ff44892e02fdcdec91965337e4afbdd8097","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"56b07145_ad06de4a","updated":"2026-08-03 10:24:37.000000000","message":"Run-NetApp-ASAr2","commit_id":"1f015b4858595c343687ee3a2a8a0510c9592f0d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"05c4f1dc02021662595802a96b1898ff38f59d1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"675a9816_7d0dd794","updated":"2026-07-19 13:56:30.000000000","message":"Run-NetApp-ASAr2","commit_id":"1f015b4858595c343687ee3a2a8a0510c9592f0d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6f317da432cce87994a67cde7c4ed05079a6e327","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"a5594b61_f74735cf","updated":"2026-08-03 07:00:19.000000000","message":"Run-NetApp-ASAr2","commit_id":"1f015b4858595c343687ee3a2a8a0510c9592f0d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"cbf464c8d64d4851645834a248f6a752e60a09c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"e2d91274_7dbe6f68","updated":"2026-07-18 17:16:03.000000000","message":"Run-NetApp-ASAr2","commit_id":"1f015b4858595c343687ee3a2a8a0510c9592f0d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6460ee176e3203b622c447dab6e755169e430c97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"d28d0485_c158a6ce","updated":"2026-07-18 13:02:16.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"1f015b4858595c343687ee3a2a8a0510c9592f0d"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f075ebd56f5f643fbf2601372b215c64b7f7df13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"91b055ad_fc61f8d6","updated":"2026-08-03 06:08:08.000000000","message":"Run-NetApp-ASAr2","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f010cb251fce19a95551d0b464f6caa2c0be8907","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"bbed1a3e_758abc37","updated":"2026-08-19 09:31:54.000000000","message":"Thanks @auniyal@redhat.com for your review comments, I have incorporated all, please take a look.","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"02ef0d5fbf1111b7a4339ac3f9293aaebf2255e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"ff398ea9_27bd3d2f","updated":"2026-08-10 14:41:44.000000000","message":"few comments on tests\nI could not do full review,  need to get back to it again,","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d5af7f79d3952666426df72b6764d3623c60fdba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"75557221_07a33594","updated":"2026-08-23 17:47:49.000000000","message":"Thanks auniyal@redhat.com for you review comments, please take a look, I have not resolve the comments, please resolved the comment if your are ok with fix.","commit_id":"b065e082eb188ed328e8c911bea6132a7b36a6ff"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"aac71a9d534268fa5e006b25b83e544025fe2532","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"ba19aac4_8ecdb26c","updated":"2026-08-21 15:45:42.000000000","message":"please just address the comments, and don\u0027t resolve, they help with long patches and in general.\nreviewers will resolve also even if they are not resolved but addressed other reviewers will notice. but if you resolve thy will be missed and we have to load full context again.","commit_id":"b065e082eb188ed328e8c911bea6132a7b36a6ff"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"5be182e82314f36d86ba59192858e2c31b608864","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":27,"id":"43f98480_b533064d","in_reply_to":"ba19aac4_8ecdb26c","updated":"2026-08-21 15:47:19.000000000","message":".","commit_id":"b065e082eb188ed328e8c911bea6132a7b36a6ff"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"88a6d2a25af1a9932b2cdacd72149b14a623a25d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"2da5f512_99dae04b","updated":"2026-08-25 08:45:51.000000000","message":"a comment on masking raised exception, \n\nrest I think its better now, also it seems to me Eric\u0027s comment are addressed, so overall looks fine to me.\n\nthanks for not resolving latest comments","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"5d6c98f7e8bdd3abe5b4cd6af57aa95ac866cb27","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"061b9561_041947db","updated":"2026-08-24 07:43:43.000000000","message":"recheck","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"5fd8bbdaa2532c9c511d6d409b467610c8ba0e9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"4e011fdb_aa932ce6","updated":"2026-08-26 16:41:39.000000000","message":"LGTM","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"ebf41a2912587765c7663a15fdf18cd91ea9668d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"9e5eb120_39718463","updated":"2026-09-01 12:52:20.000000000","message":"Run-NetApp-ASAr2","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"214ba0c737d9f560b3b3b17b6c5fedad52bd2797","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"0d54f788_ca2d6aa4","updated":"2026-09-02 14:00:54.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"9b077e6366c141554dd355d886b0a39316896539","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"6d95ed8e_b9e446ef","updated":"2026-09-09 06:08:59.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"e492193f96fd275a4df1e56bcc91c271a2c1a9f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"ad1a2e20_9f6de73d","updated":"2026-09-09 07:18:18.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"dfa722231573e32ea0cee8bdeb20fb7f021c0a23","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":29,"id":"c24462d0_a7add122","updated":"2026-09-04 12:20:37.000000000","message":"https://netappopenstacklogserver.s3-us-west-1.amazonaws.com/logs/74/971174/29/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/214eed7/job-output.txt\n\nhttps://netappopenstacklogserver.s3-us-west-1.amazonaws.com/logs/74/971174/29/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/214eed7/controller/logs/screen-c-vol.txt\n\nCI job fails at cleanup deleted it, while cinder service was still running, so both seems infra issue and not tests specific to me.\n\ncould you try:\n1- increase the SVM delete timeout, the delete hit a 60s timout, but the SVM was actually deleted - a false negative, bigger timeout or on timeout re-check ashould treat \"does not exists\" as success \n```\n2026-09-02 14:45:32.263077 | controller | [ERROR]: Task failed: Module failed: Error in delete: calling: svm/svms/1ef4cebe-a6a5-11f1-8631-d039eacbe8fa: got HTTPSConnectionPool(host\u003d\u0027***.***.***.***\u0027, port\u003d443): Read timed out. (read timeout\u003d60).\n```\n\n2- stop to cinder service before starting cleanup, SVM is deleted while/before cinder  periodic polling (get_vserver_aggregates), stoping cinder in advance should fix it.\n\n\n\n\n```\nSep 02 14:46:51.849111 ubuntu cinder-volume[90656]: DEBUG cinder.volume.drivers.netapp.dataontap.block_cmode [-] \u003c\u003d\u003d _handle_housekeeping_tasks: exception (11ms) NaApiError(\u002713434920\u0027, \u0027SVM \"svm_asar2_iscsi_CI_2\" does not exist.\u0027) {{(pid\u003d90656) trace_logging_wrapper /opt/stack/cinder/cinder/volume/volume_utils.py:1507}}\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall [-] Fixed interval looping call \u0027cinder.volume.drivers.netapp.dataontap.block_cmode.NetAppBlockStorageCmodeLibrary._handle_housekeeping_tasks\u0027 failed: cinder.volume.drivers.netapp.dataontap.client.api.NaApiError: NetApp API failed. Reason - 13434920:SVM \"svm_asar2_iscsi_CI_2\" does not exist.\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall Traceback (most recent call last):\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/data/venv/lib/python3.12/site-packages/oslo_service/backend/_common/loopingcall.py\", line 175, in _run_loop\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     result \u003d func(*self.args, **self.kw)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall              ^^^^^^^^^^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/volume_utils.py\", line 1561, in trace_method_logging_wrapper\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     return trace(f)(*args, **kwargs)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall            ^^^^^^^^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/volume_utils.py\", line 1504, in trace_logging_wrapper\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     result \u003d f(*args, **kwargs)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall              ^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/drivers/netapp/dataontap/block_cmode.py\", line 205, in _handle_housekeeping_tasks\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     self.zapi_client.remove_unused_qos_policy_groups()\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/volume_utils.py\", line 1561, in trace_method_logging_wrapper\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     return trace(f)(*args, **kwargs)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall            ^^^^^^^^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/volume_utils.py\", line 1504, in trace_logging_wrapper\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     result \u003d f(*args, **kwargs)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall              ^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.py\", line 1623, in remove_unused_qos_policy_groups\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     self.send_request(\u0027/storage/qos/policies\u0027, \u0027delete\u0027, query\u003dquery)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/volume_utils.py\", line 1561, in trace_method_logging_wrapper\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     return trace(f)(*args, **kwargs)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall            ^^^^^^^^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/volume_utils.py\", line 1504, in trace_logging_wrapper\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     result \u003d f(*args, **kwargs)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall              ^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.py\", line 304, in send_request\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     code, response \u003d self.connection.invoke_successfully(\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall   File \"/opt/stack/cinder/cinder/volume/drivers/netapp/dataontap/client/api.py\", line 933, in invoke_successfully\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall     raise NaApiError(code, msg)\nSep 02 14:46:51.850122 ubuntu cinder-volume[90656]: ERROR oslo.service.backend._common.loopingcall cinder.volume.drivers.netapp.dataontap.client.api.NaApiError: NetApp API failed. Reason - 13434920:SVM \"svm_asar2_iscsi_CI_2\" does not exist.\n```","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"383b2fed6c8001fd7fb91add83311ec7dd6bde7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"36b70287_c75e8bb8","updated":"2026-08-27 04:47:45.000000000","message":"lgtm,","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"42131cb69715430dc22c2352c735b8126330f559","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":29,"id":"bfc90e7c_db259933","updated":"2026-09-01 13:07:06.000000000","message":"so I have re-run the job, but it seems this driver specific is failing from long time, and not looked at.\n\nI am -1 now, because it should be working.","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8025eca51576551a157f3042cfd8a2fe26758bd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"361be06f_281cfcf5","in_reply_to":"57211b9d_ab82241b","updated":"2026-09-10 06:33:33.000000000","message":"Done","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"624b26c12e6bd2c7bc058f7c5da402b582100d5a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":29,"id":"57211b9d_ab82241b","in_reply_to":"7b20bb8d_26335fa4","updated":"2026-09-08 06:59:51.000000000","message":"the last comment from NetApp-CI for job `cinder-tempest-plugin-ontap-iscsi-asar2` I see is for PS29:\n\n```\nNetApp-CI\nBuild failed.\n\ncinder-tempest-plugin-ontap-iscsi-asar2 https://netappopenstacklogserver.s3.us-west-1.amazonaws.com/index.html#logs/74/971174/29/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/214eed7/ : POST_FAILURE in 52m 27s\nComment \"Run-NetApp-ASAr2\" to rerun these tests. https://wiki.openstack.org/wiki/ThirdPartySystems/NetApp_CI\n\n29\n```\n\nthe tests passing was never the concern, I said the same on last comment, the job itself is failing - post-run teardown\nI have also suggested 2 fixes on CI side (SVM delete timout and stop cinder-vol before cleanup). job is still failing.","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8025eca51576551a157f3042cfd8a2fe26758bd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"5aef3bce_e058461d","in_reply_to":"bfc90e7c_db259933","updated":"2026-09-10 06:33:33.000000000","message":"Done","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"508c8f95f4d05d1e5d2a51fa84b47800f9c48a80","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":29,"id":"7b20bb8d_26335fa4","in_reply_to":"c24462d0_a7add122","updated":"2026-09-08 06:13:57.000000000","message":"@auniyal@redhat.com, with latest run all the test are passing \nhttps://netappopenstacklogserver.s3-us-west-1.amazonaws.com/logs/74/971174/29/upstream-check-cinder-ASAr2/cinder-tempest-plugin-ontap-iscsi-asar2/214eed7/testr_results.html\n\nCould you please vote +1 for this patch.","commit_id":"f9abd406dce96ed25279ec3ae2821483d7bc0fd3"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"20243a27_2a1bc044","updated":"2026-09-19 08:27:56.000000000","message":"I\u0027ve strong concerns about the split condition and the handling around that.\nIt doesn\u0027t give me confidence about using snapshots for all operations in ASAR2 world. Any mass delete operation could trigger multiple threads trying/waiting for the split solution which could have large impact on the running c-vol service and could also affect other operations in the OpenStack cluster.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":39225,"name":"Prudhvi","display_name":"Prudhvi","email":"prudhvi.openstack@gmail.com","username":"Prudhvi"},"change_message_id":"0961cd5370c34bd5910af704e29f45fdeb5bdb3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"73888791_0896c58f","updated":"2026-09-09 10:12:50.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"3a937744d252d18f19a66735ca447f4f4c0ab613","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"89f22a77_68cb5be3","updated":"2026-09-09 13:42:20.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"64a6a0e5_4ccfe27b","updated":"2026-09-23 19:29:52.000000000","message":"Thanks @rajatdhasmana@gmail.com for your review comments, I have incorporated few of them and few places I have provide my justification. Please take a look.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8025eca51576551a157f3042cfd8a2fe26758bd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"71fa013e_227b7eea","updated":"2026-09-10 06:33:33.000000000","message":"lgtm","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"48d5ccb5c358544abbb1910e7f1574cd81fcea54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"b8ffac57_37ae0a4c","in_reply_to":"20243a27_2a1bc044","updated":"2026-09-21 17:18:01.000000000","message":"Thanks @rajatdhasmana@gmail.com for your valuable review comments. Before starting to incorporate the changes into the code, I have responded to some of your queries. Feel free to close the comments or keep the comment open with your justification.\n\nI would like to clarify that splitting occurs only in the following scenarios:\n\nWhen the snapshot of the parent volume, from which new volumes were created, is deleted.\n\nNow, let’s consider the following example:\n\n1. Create a Cinder volume.\n2. Create a snapshot of this Cinder volume.\n3. Create 100 volumes from the snapshot.\n\nBelow are 4 possibility:\n\n1. User deletes all the 100 volumes, they will be deleted without triggering the split operation. Therefore, all 100 volumes can be deleted within a few seconds.\n\n2. User wants to delete all the volumes, including the parent volume. In this case, Cinder will delete all 100 volumes, but the parent volume deletion will fail because it still has an associated snapshot. And all 100 volumes will be deleted in secs.\n\n3. User delete the snapshot, in this case snapshot deletion take more time as it trigger the spit operation.\n\n4. User delete the snapshot (clone spit job is going on), and then try to delete the all volume. In this case ONTAP doesn\u0027t allow to delete the volume created from snapshot. User can delete the those volume once spit job is completed. Only in this case bulk volume deletion take more time. But this is corner case, and we can document this. Additionally, we can work on multi threading solution to improve the over all performance.\n\nPlease let us know your thoughts. If required, we can connect and discuss this further to arrive at the best solution.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"055e7324_ed9d56bb","in_reply_to":"b8ffac57_37ae0a4c","updated":"2026-09-22 09:47:36.000000000","message":"Thanks for the clarification. One thing I still have doubt about is if what we are calling \"split\" here is a flattening operation that flattens the dependent volume and enables deletion of the parent snapshot?\n\nThe case I\u0027m referring to here involves image-volume cache where each clone operation will trigger the following resource creation\n\n    image-volume-cache -\u003e new_snap -\u003e new volume\n\nI\u0027m assuming it doesn\u0027t re-use the existing snap since that snap could be outdated.\nNow after 100 volume creation, there will be 100 snapshots and 100 new volumes.\nNow the operator wants to clear out all resources in this project so they delete all the resources which start by triggering 100 snapshot deletion and then 100 clone volume deletion, this might put too much load on the c-vol service since we will spawn multiple threads waiting for each split to complete.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"fddbe08e_8fc7a94b","updated":"2026-09-24 19:01:40.000000000","message":"Hi @rajatdhasmana@gmail.com, I have close few comments which I have fix, feel free to reopen the comment if require.","commit_id":"4961dc38f0d3bc958655adb6f8ded9a6f7201556"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ee9e2d0bacf1788fc9d910e698ec90fde59486c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"ddf4255e_f2962dc3","updated":"2026-10-02 17:06:40.000000000","message":"@rajatdhasmana@gmail.com, I made the new changes as suggested by you, please take a look.","commit_id":"d0b0e004a459105fb7863e917a19c97dce546c53"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_cmode_rest_asar2.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":666,"context_line":"            return_value\u003dfake.NAMESPACE_NAME"},{"line_number":667,"context_line":"        )"},{"line_number":668,"context_line":"        self.client.get_all_clones_volume_uuid \u003d mock.Mock("},{"line_number":669,"context_line":"            return_value\u003d[{\u0027uuid\u0027: \u0027clone-uuid\u0027}]"},{"line_number":670,"context_line":"        )"},{"line_number":671,"context_line":"        self.client.volume_clone_split_start \u003d mock.Mock(return_value\u003d{"},{"line_number":672,"context_line":"            \u0027job\u0027: {"}],"source_content_type":"text/x-python","patch_set":17,"id":"bc8c8a3e_ac454853","line":669,"updated":"2026-05-15 15:57:12.000000000","message":"Would it make sense to have a second test (perhaps with ddt) that has more than one clone to make sure they all get cleaned up?","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":666,"context_line":"            return_value\u003dfake.NAMESPACE_NAME"},{"line_number":667,"context_line":"        )"},{"line_number":668,"context_line":"        self.client.get_all_clones_volume_uuid \u003d mock.Mock("},{"line_number":669,"context_line":"            return_value\u003d[{\u0027uuid\u0027: \u0027clone-uuid\u0027}]"},{"line_number":670,"context_line":"        )"},{"line_number":671,"context_line":"        self.client.volume_clone_split_start \u003d mock.Mock(return_value\u003d{"},{"line_number":672,"context_line":"            \u0027job\u0027: {"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f243b88_40423eb0","line":669,"in_reply_to":"bc8c8a3e_ac454853","updated":"2026-05-19 12:01:07.000000000","message":"Done","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":1499,"context_line":"            self,"},{"line_number":1500,"context_line":"            mock_get_su_uuid,"},{"line_number":1501,"context_line":"    ):"},{"line_number":1502,"context_line":"        # mock_get_backend.return_value \u003d self.su_name"},{"line_number":1503,"context_line":"        mock_get_su_uuid.side_effect \u003d netapp_utils.NetAppDriverException("},{"line_number":1504,"context_line":"            \u0027Not found\u0027)"},{"line_number":1505,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"4520ef7a_a13e97ec","line":1502,"updated":"2026-05-15 15:57:12.000000000","message":"I wonder if these comments in this test should be cleaned up if they are not forward looking to avoid confusion (or maybe they need to be uncommented?)","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":1499,"context_line":"            self,"},{"line_number":1500,"context_line":"            mock_get_su_uuid,"},{"line_number":1501,"context_line":"    ):"},{"line_number":1502,"context_line":"        # mock_get_backend.return_value \u003d self.su_name"},{"line_number":1503,"context_line":"        mock_get_su_uuid.side_effect \u003d netapp_utils.NetAppDriverException("},{"line_number":1504,"context_line":"            \u0027Not found\u0027)"},{"line_number":1505,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"44c3fd81_c75abdb0","line":1502,"in_reply_to":"4520ef7a_a13e97ec","updated":"2026-05-19 12:01:07.000000000","message":"Got catch. Not require, removed.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":1821,"context_line":"        self.client.send_request \u003d mock.Mock("},{"line_number":1822,"context_line":"            return_value\u003d{\u0027clone\u0027: {\u0027split_initiated\u0027: False}}"},{"line_number":1823,"context_line":"        )"},{"line_number":1824,"context_line":"        self.assertRaises(netapp_utils.NetAppDriverException,"},{"line_number":1825,"context_line":"                          self.client.wait_for_split_to_complete,"},{"line_number":1826,"context_line":"                          su_uuid, wait_interval\u003d5,"},{"line_number":1827,"context_line":"                          require_split_start\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"e695f9e9_dee54aeb","line":1824,"updated":"2026-05-15 15:57:12.000000000","message":"In the actual code, is it possible for a split to complete before it is checked, thus raising an exception despite actually working?","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":1821,"context_line":"        self.client.send_request \u003d mock.Mock("},{"line_number":1822,"context_line":"            return_value\u003d{\u0027clone\u0027: {\u0027split_initiated\u0027: False}}"},{"line_number":1823,"context_line":"        )"},{"line_number":1824,"context_line":"        self.assertRaises(netapp_utils.NetAppDriverException,"},{"line_number":1825,"context_line":"                          self.client.wait_for_split_to_complete,"},{"line_number":1826,"context_line":"                          su_uuid, wait_interval\u003d5,"},{"line_number":1827,"context_line":"                          require_split_start\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7287c3bf_822edc0e","line":1824,"in_reply_to":"e695f9e9_dee54aeb","updated":"2026-05-19 12:01:07.000000000","message":"I have provided justification and explained the scenarios where this issue can occur in the main code.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_base.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":1631,"context_line":"            is_snapshot\u003dTrue)"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"    def test__create_snapshot_asar2(self):"},{"line_number":1634,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d True"},{"line_number":1635,"context_line":""},{"line_number":1636,"context_line":"        self.library._create_snapshot(fake.SNAPSHOT)"},{"line_number":1637,"context_line":"        self.library.zapi_client.create_snapshot.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":17,"id":"35ed7acc_b09968fa","line":1634,"updated":"2026-05-15 15:57:12.000000000","message":"Are we sure this won\u0027t cause race conditions during threaded runs?\n\nIf this is a conf, you may want to use ```override_config()```\n\nI see multiple other tests doing this as well, so I think it may be necessary.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":1631,"context_line":"            is_snapshot\u003dTrue)"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"    def test__create_snapshot_asar2(self):"},{"line_number":1634,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d True"},{"line_number":1635,"context_line":""},{"line_number":1636,"context_line":"        self.library._create_snapshot(fake.SNAPSHOT)"},{"line_number":1637,"context_line":"        self.library.zapi_client.create_snapshot.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":17,"id":"824a400f_7aa34c6d","line":1634,"in_reply_to":"35ed7acc_b09968fa","updated":"2026-05-19 12:01:07.000000000","message":"Make the require changes","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":1688,"context_line":"         zapi_client.create_volume_from_snapshot.assert_called_once()"},{"line_number":1689,"context_line":"         )"},{"line_number":1690,"context_line":"        self.library._get_volume_model_update.assert_called_once_with(volume)"},{"line_number":1691,"context_line":"        assert result \u003d\u003d {\u0027foo\u0027: \u0027bar\u0027}"},{"line_number":1692,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d False"},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"    def test_extend_volume(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"cd1cfdfe_18a358de","line":1691,"updated":"2026-05-15 15:57:12.000000000","message":"```self.assertEqual()```","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":1688,"context_line":"         zapi_client.create_volume_from_snapshot.assert_called_once()"},{"line_number":1689,"context_line":"         )"},{"line_number":1690,"context_line":"        self.library._get_volume_model_update.assert_called_once_with(volume)"},{"line_number":1691,"context_line":"        assert result \u003d\u003d {\u0027foo\u0027: \u0027bar\u0027}"},{"line_number":1692,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d False"},{"line_number":1693,"context_line":""},{"line_number":1694,"context_line":"    def test_extend_volume(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"66aedde8_e2cd8c94","line":1691,"in_reply_to":"cd1cfdfe_18a358de","updated":"2026-05-19 12:01:07.000000000","message":"Done","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"02ef0d5fbf1111b7a4339ac3f9293aaebf2255e4","unresolved":true,"context_lines":[{"line_number":1543,"context_line":"        self.library.configuration.set_override("},{"line_number":1544,"context_line":"            \u0027netapp_disaggregated_platform\u0027, True)"},{"line_number":1545,"context_line":"        self.library.delete_snapshot(fake.SNAPSHOT)"},{"line_number":1546,"context_line":"        self.library.zapi_client.delete_snapshot.assert_called_once()"},{"line_number":1547,"context_line":""},{"line_number":1548,"context_line":"    def test_clone_source_to_destination(self):"},{"line_number":1549,"context_line":"        self.mock_object(na_utils, \u0027get_volume_extra_specs\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"a2442538_f6e77b58","line":1546,"range":{"start_line":1546,"start_character":0,"end_line":1546,"end_character":69},"updated":"2026-08-10 14:41:44.000000000","message":"```\ndelete_snapshot(snapshot[\u0027volume_name\u0027], snapshot[\u0027name\u0027])\n```\ncan you assert with both passed arguments,","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f010cb251fce19a95551d0b464f6caa2c0be8907","unresolved":false,"context_lines":[{"line_number":1543,"context_line":"        self.library.configuration.set_override("},{"line_number":1544,"context_line":"            \u0027netapp_disaggregated_platform\u0027, True)"},{"line_number":1545,"context_line":"        self.library.delete_snapshot(fake.SNAPSHOT)"},{"line_number":1546,"context_line":"        self.library.zapi_client.delete_snapshot.assert_called_once()"},{"line_number":1547,"context_line":""},{"line_number":1548,"context_line":"    def test_clone_source_to_destination(self):"},{"line_number":1549,"context_line":"        self.mock_object(na_utils, \u0027get_volume_extra_specs\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"d03c2885_a66fdc0c","line":1546,"range":{"start_line":1546,"start_character":0,"end_line":1546,"end_character":69},"in_reply_to":"a2442538_f6e77b58","updated":"2026-08-19 09:31:54.000000000","message":"Done","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"02ef0d5fbf1111b7a4339ac3f9293aaebf2255e4","unresolved":true,"context_lines":[{"line_number":1637,"context_line":"            \u0027netapp_disaggregated_platform\u0027, True)"},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        self.library._create_snapshot(fake.SNAPSHOT)"},{"line_number":1640,"context_line":"        self.library.zapi_client.create_snapshot.assert_called_once()"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"    def test_create_volume_from_snapshot(self):"},{"line_number":1643,"context_line":"        mock_do_clone \u003d self.mock_object(self.library,"}],"source_content_type":"text/x-python","patch_set":26,"id":"a34a7558_fd21d97b","line":1640,"updated":"2026-08-10 14:41:44.000000000","message":"same create too takes both args","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f010cb251fce19a95551d0b464f6caa2c0be8907","unresolved":false,"context_lines":[{"line_number":1637,"context_line":"            \u0027netapp_disaggregated_platform\u0027, True)"},{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        self.library._create_snapshot(fake.SNAPSHOT)"},{"line_number":1640,"context_line":"        self.library.zapi_client.create_snapshot.assert_called_once()"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"    def test_create_volume_from_snapshot(self):"},{"line_number":1643,"context_line":"        mock_do_clone \u003d self.mock_object(self.library,"}],"source_content_type":"text/x-python","patch_set":26,"id":"90533409_b00235e5","line":1640,"in_reply_to":"a34a7558_fd21d97b","updated":"2026-08-19 09:31:54.000000000","message":"Done","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"02ef0d5fbf1111b7a4339ac3f9293aaebf2255e4","unresolved":true,"context_lines":[{"line_number":1639,"context_line":"        self.library._create_snapshot(fake.SNAPSHOT)"},{"line_number":1640,"context_line":"        self.library.zapi_client.create_snapshot.assert_called_once()"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"    def test_create_volume_from_snapshot(self):"},{"line_number":1643,"context_line":"        mock_do_clone \u003d self.mock_object(self.library,"},{"line_number":1644,"context_line":"                                         \u0027_clone_source_to_destination\u0027)"},{"line_number":1645,"context_line":"        source \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"dae4a597_e9a7c09f","line":1642,"range":{"start_line":1642,"start_character":8,"end_line":1642,"end_character":40},"updated":"2026-08-10 14:41:44.000000000","message":"this need to be updated too or add new for disaggregated_platform \u003d True and verify create_volume_from_snapshot(source, volume) - asser called with correct args","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f010cb251fce19a95551d0b464f6caa2c0be8907","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"        self.library._create_snapshot(fake.SNAPSHOT)"},{"line_number":1640,"context_line":"        self.library.zapi_client.create_snapshot.assert_called_once()"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"    def test_create_volume_from_snapshot(self):"},{"line_number":1643,"context_line":"        mock_do_clone \u003d self.mock_object(self.library,"},{"line_number":1644,"context_line":"                                         \u0027_clone_source_to_destination\u0027)"},{"line_number":1645,"context_line":"        source \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"f50c17d9_8d49353b","line":1642,"range":{"start_line":1642,"start_character":8,"end_line":1642,"end_character":40},"in_reply_to":"dae4a597_e9a7c09f","updated":"2026-08-19 09:31:54.000000000","message":"Added missing test for create volume from snapshot for asar2","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"02ef0d5fbf1111b7a4339ac3f9293aaebf2255e4","unresolved":true,"context_lines":[{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        mock_do_clone.assert_has_calls(["},{"line_number":1654,"context_line":"            mock.call(source, fake.VOLUME)])"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    def test_create_cloned_volume(self):"},{"line_number":1657,"context_line":"        fake_lun \u003d block_base.NetAppLun(fake.LUN_HANDLE, fake.LUN_ID,"},{"line_number":1658,"context_line":"                                        fake.LUN_SIZE, fake.LUN_METADATA)"}],"source_content_type":"text/x-python","patch_set":26,"id":"684de4a8_7440086d","line":1655,"updated":"2026-08-10 14:41:44.000000000","message":"create_volume_from_snapshot also do `self.zapi_client.do_direct_resize(volume.name, size_bytes)` so need to test that as well.","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f010cb251fce19a95551d0b464f6caa2c0be8907","unresolved":false,"context_lines":[{"line_number":1652,"context_line":""},{"line_number":1653,"context_line":"        mock_do_clone.assert_has_calls(["},{"line_number":1654,"context_line":"            mock.call(source, fake.VOLUME)])"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    def test_create_cloned_volume(self):"},{"line_number":1657,"context_line":"        fake_lun \u003d block_base.NetAppLun(fake.LUN_HANDLE, fake.LUN_ID,"},{"line_number":1658,"context_line":"                                        fake.LUN_SIZE, fake.LUN_METADATA)"}],"source_content_type":"text/x-python","patch_set":26,"id":"17245502_9a818558","line":1655,"in_reply_to":"684de4a8_7440086d","updated":"2026-08-19 09:31:54.000000000","message":"Added","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_nvme_library.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"02ef0d5fbf1111b7a4339ac3f9293aaebf2255e4","unresolved":true,"context_lines":[{"line_number":523,"context_line":"    def test_delete_snapshot_asar2(self):"},{"line_number":524,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d True"},{"line_number":525,"context_line":"        self.library.delete_snapshot(fake.SNAPSHOT)"},{"line_number":526,"context_line":"        self.library.client.delete_snapshot.assert_called_once()"},{"line_number":527,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d False"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def test_create_volume_from_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1de170fd_ff7700cd","line":526,"range":{"start_line":526,"start_character":28,"end_line":526,"end_character":43},"updated":"2026-08-10 14:41:44.000000000","message":"same as test_block_base, assert with whats passed, here and other places in this test","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f010cb251fce19a95551d0b464f6caa2c0be8907","unresolved":false,"context_lines":[{"line_number":523,"context_line":"    def test_delete_snapshot_asar2(self):"},{"line_number":524,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d True"},{"line_number":525,"context_line":"        self.library.delete_snapshot(fake.SNAPSHOT)"},{"line_number":526,"context_line":"        self.library.client.delete_snapshot.assert_called_once()"},{"line_number":527,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d False"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def test_create_volume_from_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"fee36439_c932d259","line":526,"range":{"start_line":526,"start_character":28,"end_line":526,"end_character":43},"in_reply_to":"1de170fd_ff7700cd","updated":"2026-08-19 09:31:54.000000000","message":"Done","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"02ef0d5fbf1111b7a4339ac3f9293aaebf2255e4","unresolved":true,"context_lines":[{"line_number":1456,"context_line":"                                                                     \u0027snap1\u0027)"},{"line_number":1457,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d False"},{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":"    def test_revert_to_snapshot_not_supported(self):"},{"line_number":1460,"context_line":"        volume \u003d {\u0027name\u0027: \u0027vol1\u0027}"},{"line_number":1461,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: \u0027vol1\u0027, \u0027name\u0027: \u0027snap1\u0027}"},{"line_number":1462,"context_line":"        self.assertRaises("},{"line_number":1463,"context_line":"            exception.VolumeBackendAPIException,"},{"line_number":1464,"context_line":"            self.library.revert_to_snapshot,"},{"line_number":1465,"context_line":"            volume, snapshot"},{"line_number":1466,"context_line":"        )"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    def test_revert_to_snapshot_restore_fails(self):"},{"line_number":1469,"context_line":"        volume \u003d {\u0027name\u0027: \u0027vol1\u0027}"},{"line_number":1470,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: \u0027vol1\u0027, \u0027name\u0027: \u0027snap1\u0027}"},{"line_number":1471,"context_line":"        self.library.client.restore_snapshot.side_effect \u003d Exception(\"fail\")"},{"line_number":1472,"context_line":"        self.assertRaises("},{"line_number":1473,"context_line":"            exception.VolumeBackendAPIException,"},{"line_number":1474,"context_line":"            self.library.revert_to_snapshot,"},{"line_number":1475,"context_line":"            volume, snapshot"},{"line_number":1476,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"36cbbba1_147465ad","line":1476,"range":{"start_line":1459,"start_character":0,"end_line":1476,"end_character":9},"updated":"2026-08-10 14:41:44.000000000","message":"it alsways gose via else block, before restore_snapshot is ever called, side_effect \u003d Exception(\"fail\") is dead code. both tests seems same.\n\nalso tests dont test - `netapp_disaggregated_platform \u003d True`\n\n\ncan you add test for ASAr2 mode + restore_snapshot fails","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f010cb251fce19a95551d0b464f6caa2c0be8907","unresolved":false,"context_lines":[{"line_number":1456,"context_line":"                                                                     \u0027snap1\u0027)"},{"line_number":1457,"context_line":"        self.library.configuration.netapp_disaggregated_platform \u003d False"},{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":"    def test_revert_to_snapshot_not_supported(self):"},{"line_number":1460,"context_line":"        volume \u003d {\u0027name\u0027: \u0027vol1\u0027}"},{"line_number":1461,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: \u0027vol1\u0027, \u0027name\u0027: \u0027snap1\u0027}"},{"line_number":1462,"context_line":"        self.assertRaises("},{"line_number":1463,"context_line":"            exception.VolumeBackendAPIException,"},{"line_number":1464,"context_line":"            self.library.revert_to_snapshot,"},{"line_number":1465,"context_line":"            volume, snapshot"},{"line_number":1466,"context_line":"        )"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    def test_revert_to_snapshot_restore_fails(self):"},{"line_number":1469,"context_line":"        volume \u003d {\u0027name\u0027: \u0027vol1\u0027}"},{"line_number":1470,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: \u0027vol1\u0027, \u0027name\u0027: \u0027snap1\u0027}"},{"line_number":1471,"context_line":"        self.library.client.restore_snapshot.side_effect \u003d Exception(\"fail\")"},{"line_number":1472,"context_line":"        self.assertRaises("},{"line_number":1473,"context_line":"            exception.VolumeBackendAPIException,"},{"line_number":1474,"context_line":"            self.library.revert_to_snapshot,"},{"line_number":1475,"context_line":"            volume, snapshot"},{"line_number":1476,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"a8b25473_71812296","line":1476,"range":{"start_line":1459,"start_character":0,"end_line":1476,"end_character":9},"in_reply_to":"36cbbba1_147465ad","updated":"2026-08-19 09:31:54.000000000","message":"This patch is related to ASAR2, so I removed both existing tests and added a new ASAR2 test to cover restore failures.","commit_id":"0e6d7148c7952aeb2e00f4a2e75e5edd076c4577"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"aac71a9d534268fa5e006b25b83e544025fe2532","unresolved":true,"context_lines":[{"line_number":538,"context_line":"             \u0027size\u0027: fake.SIZE"},{"line_number":539,"context_line":"             },"},{"line_number":540,"context_line":"            fake.NAMESPACE_VOLUME)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_create_cloned_volume(self):"},{"line_number":543,"context_line":"        self.mock_object(self.library, \u0027_get_namespace_from_table\u0027,"},{"line_number":544,"context_line":"                         return_value\u003dself.fake_namespace)"}],"source_content_type":"text/x-python","patch_set":27,"id":"61101b24_40638925","line":541,"updated":"2026-08-21 15:45:42.000000000","message":"this covers only the else branch (asserts _clone_source_to_destination) — it doesn\u0027t set netapp_disaggregated_platform\u003dTrue, so the ASAr2 branch `if self.configuration.netapp_disaggregated_platform:` is uncovered.\n\nI guess add another `test_create_volume_from_snapshot_asar2` too.","commit_id":"b065e082eb188ed328e8c911bea6132a7b36a6ff"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d5af7f79d3952666426df72b6764d3623c60fdba","unresolved":true,"context_lines":[{"line_number":538,"context_line":"             \u0027size\u0027: fake.SIZE"},{"line_number":539,"context_line":"             },"},{"line_number":540,"context_line":"            fake.NAMESPACE_VOLUME)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_create_cloned_volume(self):"},{"line_number":543,"context_line":"        self.mock_object(self.library, \u0027_get_namespace_from_table\u0027,"},{"line_number":544,"context_line":"                         return_value\u003dself.fake_namespace)"}],"source_content_type":"text/x-python","patch_set":27,"id":"f6040a6d_661e47b4","line":541,"in_reply_to":"61101b24_40638925","updated":"2026-08-23 17:47:49.000000000","message":"Done","commit_id":"b065e082eb188ed328e8c911bea6132a7b36a6ff"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"88a6d2a25af1a9932b2cdacd72149b14a623a25d","unresolved":false,"context_lines":[{"line_number":538,"context_line":"             \u0027size\u0027: fake.SIZE"},{"line_number":539,"context_line":"             },"},{"line_number":540,"context_line":"            fake.NAMESPACE_VOLUME)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_create_cloned_volume(self):"},{"line_number":543,"context_line":"        self.mock_object(self.library, \u0027_get_namespace_from_table\u0027,"},{"line_number":544,"context_line":"                         return_value\u003dself.fake_namespace)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bfbff828_f6907509","line":541,"in_reply_to":"f6040a6d_661e47b4","updated":"2026-08-25 08:45:51.000000000","message":"Done","commit_id":"b065e082eb188ed328e8c911bea6132a7b36a6ff"}],"cinder/volume/drivers/netapp/dataontap/block_base.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":387,"context_line":"                                             snapshot[\u0027name\u0027])"},{"line_number":388,"context_line":"        else:"},{"line_number":389,"context_line":"            self._delete_lun(snapshot[\u0027name\u0027])"},{"line_number":390,"context_line":"            LOG.debug(\"Snapshot %s deletion successful\", snapshot[\u0027name\u0027])"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":393,"context_line":"        source \u003d {\u0027name\u0027: snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"ef85c4ca_cc90fec7","line":390,"updated":"2026-05-15 15:57:12.000000000","message":"Should the comment be outside of the else?","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                             snapshot[\u0027name\u0027])"},{"line_number":388,"context_line":"        else:"},{"line_number":389,"context_line":"            self._delete_lun(snapshot[\u0027name\u0027])"},{"line_number":390,"context_line":"            LOG.debug(\"Snapshot %s deletion successful\", snapshot[\u0027name\u0027])"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":393,"context_line":"        source \u003d {\u0027name\u0027: snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"4b51b92a_1c0e336f","line":390,"in_reply_to":"ef85c4ca_cc90fec7","updated":"2026-05-19 12:01:07.000000000","message":"Thanks to pointing this, done.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"a9cab68fb30e80784ad78eb3fe03a11cb91d5d72","unresolved":true,"context_lines":[{"line_number":383,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":384,"context_line":"        \"\"\"Driver entry point for deleting a snapshot.\"\"\""},{"line_number":385,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":386,"context_line":"            self.zapi_client.delete_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":387,"context_line":"                                             snapshot[\u0027name\u0027])"},{"line_number":388,"context_line":"        else:"},{"line_number":389,"context_line":"            self._delete_lun(snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"7c09bf5f_928fe9f7","line":386,"updated":"2026-06-03 17:19:00.000000000","message":"Both volumes and snapshots should be treated as objects instead of dicts.  So volume.size over volume[\u0027size\u0027] for example.  There are a few instances in this patch that need to be updated.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":383,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":384,"context_line":"        \"\"\"Driver entry point for deleting a snapshot.\"\"\""},{"line_number":385,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":386,"context_line":"            self.zapi_client.delete_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":387,"context_line":"                                             snapshot[\u0027name\u0027])"},{"line_number":388,"context_line":"        else:"},{"line_number":389,"context_line":"            self._delete_lun(snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"de07a7c5_b74af69a","line":386,"in_reply_to":"7c09bf5f_928fe9f7","updated":"2026-06-14 10:41:15.000000000","message":"Since dict-style paths are already common in NetApp driver code, I am seeing same with code, changing only a few lines could reduce consistency unless you perform a broader, deliberate cleanup.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":187,"context_line":"        lun_list \u003d self.zapi_client.get_lun_list()"},{"line_number":188,"context_line":"        self._extract_and_populate_luns(lun_list)"},{"line_number":189,"context_line":"        LOG.debug(\"Success getting list of LUNs from server.\")"},{"line_number":190,"context_line":"        # Pass the config object to ONTAP lib"},{"line_number":191,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":192,"context_line":"            self.zapi_client.set_config(self.configuration)"},{"line_number":193,"context_line":"        self.loopingcalls.start_tasks()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _add_looping_tasks(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"db920491_0d60b5b9","line":192,"range":{"start_line":190,"start_character":8,"end_line":192,"end_character":59},"updated":"2026-09-19 08:27:56.000000000","message":"is there any issue in setting this for non ASAR2 case?\nSeems like a harmless change but this is fine as well","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        lun_list \u003d self.zapi_client.get_lun_list()"},{"line_number":188,"context_line":"        self._extract_and_populate_luns(lun_list)"},{"line_number":189,"context_line":"        LOG.debug(\"Success getting list of LUNs from server.\")"},{"line_number":190,"context_line":"        # Pass the config object to ONTAP lib"},{"line_number":191,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":192,"context_line":"            self.zapi_client.set_config(self.configuration)"},{"line_number":193,"context_line":"        self.loopingcalls.start_tasks()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _add_looping_tasks(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"e519986f_b54435a6","line":192,"range":{"start_line":190,"start_character":8,"end_line":192,"end_character":59},"in_reply_to":"3b33db25_f991b891","updated":"2026-09-22 09:47:36.000000000","message":"Acknowledged","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8e394c9a02e502f727ad352218afd926ea93ae22","unresolved":true,"context_lines":[{"line_number":187,"context_line":"        lun_list \u003d self.zapi_client.get_lun_list()"},{"line_number":188,"context_line":"        self._extract_and_populate_luns(lun_list)"},{"line_number":189,"context_line":"        LOG.debug(\"Success getting list of LUNs from server.\")"},{"line_number":190,"context_line":"        # Pass the config object to ONTAP lib"},{"line_number":191,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":192,"context_line":"            self.zapi_client.set_config(self.configuration)"},{"line_number":193,"context_line":"        self.loopingcalls.start_tasks()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _add_looping_tasks(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3b33db25_f991b891","line":192,"range":{"start_line":190,"start_character":8,"end_line":192,"end_character":59},"in_reply_to":"db920491_0d60b5b9","updated":"2026-09-21 15:06:38.000000000","message":"During the ASAr2 implementation, we found that a few files require a config object to retrieve values specific to ASAr2. Therefore, I made these changes for ASAr2.\n\nYes, I don’t think there would be any harm in enabling this for non-ASAr2 cases. However, since it is specific to ASAr2, I added it under the ASAr2 flag.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        vol_name \u003d snapshot[\u0027volume_name\u0027]"},{"line_number":377,"context_line":"        snapshot_name \u003d snapshot[\u0027name\u0027]"},{"line_number":378,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":379,"context_line":"            self.zapi_client.create_snapshot(vol_name, snapshot_name)"},{"line_number":380,"context_line":"        else:"},{"line_number":381,"context_line":"            lun \u003d self._get_lun_from_table(vol_name)"},{"line_number":382,"context_line":"            self._clone_lun(lun.name, snapshot_name, space_reserved\u003d\u0027false\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3c078537_3aa929e6","line":379,"range":{"start_line":379,"start_character":17,"end_line":379,"end_character":28},"updated":"2026-09-19 08:27:56.000000000","message":"this looks very ambiguous, we are calling the method for ASAR2 which uses REST but referencing ZAPI here?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8e394c9a02e502f727ad352218afd926ea93ae22","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        vol_name \u003d snapshot[\u0027volume_name\u0027]"},{"line_number":377,"context_line":"        snapshot_name \u003d snapshot[\u0027name\u0027]"},{"line_number":378,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":379,"context_line":"            self.zapi_client.create_snapshot(vol_name, snapshot_name)"},{"line_number":380,"context_line":"        else:"},{"line_number":381,"context_line":"            lun \u003d self._get_lun_from_table(vol_name)"},{"line_number":382,"context_line":"            self._clone_lun(lun.name, snapshot_name, space_reserved\u003d\u0027false\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"4861e0c8_4f34a61e","line":379,"range":{"start_line":379,"start_character":17,"end_line":379,"end_character":28},"in_reply_to":"3c078537_3aa929e6","updated":"2026-09-21 15:06:38.000000000","message":"This is legacy code and is used everywhere. It was not added specifically for ASAr2. But your concern is valid.\n\nInitially, we supported only ZAPI and get this object by calling the get_client_for_backend() method. Later, when we added REST support, we implemented the same ONTAP library for REST. Instead of changing the variable name, we updated get_client_for_backend() to return a REST object based on the Cinder configuration.\n\nTherefore, the zapi_client variable can contain either a ZAPI or a REST object, depending on the Cinder configuration.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        vol_name \u003d snapshot[\u0027volume_name\u0027]"},{"line_number":377,"context_line":"        snapshot_name \u003d snapshot[\u0027name\u0027]"},{"line_number":378,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":379,"context_line":"            self.zapi_client.create_snapshot(vol_name, snapshot_name)"},{"line_number":380,"context_line":"        else:"},{"line_number":381,"context_line":"            lun \u003d self._get_lun_from_table(vol_name)"},{"line_number":382,"context_line":"            self._clone_lun(lun.name, snapshot_name, space_reserved\u003d\u0027false\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"e6a14959_5dc78958","line":379,"range":{"start_line":379,"start_character":17,"end_line":379,"end_character":28},"in_reply_to":"4861e0c8_4f34a61e","updated":"2026-09-22 09:47:36.000000000","message":"Acknowledged","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":385,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":386,"context_line":"        \"\"\"Driver entry point for deleting a snapshot.\"\"\""},{"line_number":387,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":388,"context_line":"            self.zapi_client.delete_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":389,"context_line":"                                             snapshot[\u0027name\u0027])"},{"line_number":390,"context_line":"        else:"},{"line_number":391,"context_line":"            self._delete_lun(snapshot[\u0027name\u0027])"},{"line_number":392,"context_line":"        LOG.debug(\"Snapshot %s deletion successful\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"0a22d4f0_eb456e8c","line":389,"range":{"start_line":388,"start_character":45,"end_line":389,"end_character":61},"updated":"2026-09-19 08:27:56.000000000","message":"always avoid using dict style access, we are dealing with OVOs here so object type access is preferred\n\n    snapshot.volume_name\n    snapshot.name\n    \ncould be a followup since this is the same pattern across all methods","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":385,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":386,"context_line":"        \"\"\"Driver entry point for deleting a snapshot.\"\"\""},{"line_number":387,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":388,"context_line":"            self.zapi_client.delete_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":389,"context_line":"                                             snapshot[\u0027name\u0027])"},{"line_number":390,"context_line":"        else:"},{"line_number":391,"context_line":"            self._delete_lun(snapshot[\u0027name\u0027])"},{"line_number":392,"context_line":"        LOG.debug(\"Snapshot %s deletion successful\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"1e397536_c6fef939","line":389,"range":{"start_line":388,"start_character":45,"end_line":389,"end_character":61},"in_reply_to":"0a22d4f0_eb456e8c","updated":"2026-09-23 19:29:52.000000000","message":"Done","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":386,"context_line":"        \"\"\"Driver entry point for deleting a snapshot.\"\"\""},{"line_number":387,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":388,"context_line":"            self.zapi_client.delete_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":389,"context_line":"                                             snapshot[\u0027name\u0027])"},{"line_number":390,"context_line":"        else:"},{"line_number":391,"context_line":"            self._delete_lun(snapshot[\u0027name\u0027])"},{"line_number":392,"context_line":"        LOG.debug(\"Snapshot %s deletion successful\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"b3cdae8e_91c69acc","line":389,"range":{"start_line":388,"start_character":45,"end_line":389,"end_character":61},"in_reply_to":"1e397536_c6fef939","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":409,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":410,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"80d9005c_5111730a","line":412,"range":{"start_line":412,"start_character":0,"end_line":412,"end_character":56},"updated":"2026-09-19 08:27:56.000000000","message":"So we are creating a snapshot and leveraging that to create the destination volume?\nI\u0027m not really happy with the static naming of this i.e. \u0027openstack-cache-snapshot\u0027\nIf something goes wrong during the operation and we have a stale snapshot on netapp array. Since Cinder has no knowledge about this snap, multiple failed operations could take up disk space significantly and it will be confusing to know which ones to delete from storage array.\nI would suggest using the name \u0027openstack-cache-snapshot-\u003cvolume-id\u003e\u0027","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b88a822f0c2ab9a398028978842e7dcaab5ea67b","unresolved":true,"context_lines":[{"line_number":409,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":410,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"b1ff306b_13d033c5","line":412,"range":{"start_line":412,"start_character":0,"end_line":412,"end_character":56},"in_reply_to":"0f9dd41a_4360fdca","updated":"2026-09-24 06:38:25.000000000","message":"\u003e You cannot create a duplicate snapshot, so create_snapshot() ignores the “snapshot already exists” error. As a result, all clones from the same source reuse a single snapshot instead of creating a new one each time.\n\nSo If i create a clone of a volume A, the first time it creates a snapshot named openstack-cache-snapshot and create a new volume B from it.\nWhat happens if i write new data into the volume A and then try to create the clone again? doesn\u0027t the clone operation create a new snapshot since the data in the old snapshot is outdated to be used for the clone operation now?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":409,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":410,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"0f9dd41a_4360fdca","line":412,"range":{"start_line":412,"start_character":0,"end_line":412,"end_character":56},"in_reply_to":"80d9005c_5111730a","updated":"2026-09-23 19:29:52.000000000","message":"You cannot create a duplicate snapshot, so create_snapshot() ignores the “snapshot already exists” error. As a result, all clones from the same source reuse a single snapshot instead of creating a new one each time.\n\nSnapshot names are scoped to the storage unit on which they reside. Therefore, openstack-cache-snapshot on volume A and openstack-cache-snapshot on volume B are different objects and cannot conflict. Consequently, ten failed clone attempts on the same source leave only one snapshot, rather than ten.\n\nSnapshots are metadata associated with a volume or storage unit and do not consume significant space. Because they are scoped to the volume or storage unit, users can easily identify which volume or storage unit each snapshot belongs to. Additionally, when a LUN is deleted, ONTAP deletes all snapshots associated with that storage unit.\n\n\nIf we use openstack-cache-snapshot-\u003cvolume-id\u003e, I don’t see much of a difference. Although it adds an extra call to ONTAP to retrieve the volume UUID, I’m also using this naming convention in the ASAR2 C-mode library, where I need to build the snapshot name from the volume UUID.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":true,"context_lines":[{"line_number":409,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":410,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"b0fec2fa_9dda995c","line":412,"range":{"start_line":412,"start_character":0,"end_line":412,"end_character":56},"in_reply_to":"b1ff306b_13d033c5","updated":"2026-09-24 19:01:40.000000000","message":"na_utils.CACHE_SNAPSHOT_NAME is used only when creating a bootable volume for NOVA VM. Where we first upload the image that create the cinder volume and then image is downloaded to cinder volume. \n\nIf the caching-related parameters are configured in cinder.conf, we create a snapshot named openstack-cache-snapshot for the volume created above. Then create a new cloned volume—a bootable Cinder volume that Nova uses to boot the operating system—from this snapshot.\n\nRegarding the use case you mentioned—creating a new snapshot after writing data to the volume—we already support this. Whenever a user creates a new snapshot through OpenStack, we create a new snapshot. And from these snapshots we create the new clone volumes.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            # Create the volume from snapshot"},{"line_number":417,"context_line":"            source \u003d {\u0027name\u0027: snapshot_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"c039cd66_7ca1dc6c","line":414,"range":{"start_line":414,"start_character":12,"end_line":414,"end_character":72},"updated":"2026-09-19 08:27:56.000000000","message":"we are not deleting the snapshot in this workflow so for every clone there will be a vol1 -\u003e snap1 -\u003e vol2 dependency chain.\nWhat would happen if we delete vol1 in this scenario? will that flatten the dependency chain?\n\nI would much rather preferred \n\n    vol1 -\u003e temp_snap1 -\u003e vol2\n\nand later delete the temp_snap1 and flatten vol2 so it\u0027s an independent copy.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ee9e2d0bacf1788fc9d910e698ec90fde59486c7","unresolved":true,"context_lines":[{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            # Create the volume from snapshot"},{"line_number":417,"context_line":"            source \u003d {\u0027name\u0027: snapshot_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"129134b6_61cee188","line":414,"range":{"start_line":414,"start_character":12,"end_line":414,"end_character":72},"in_reply_to":"1eb9a0f6_ef176371","updated":"2026-10-02 17:06:40.000000000","message":"Added the new logic for volume and snapshot deletion as suggested by you.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":true,"context_lines":[{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            # Create the volume from snapshot"},{"line_number":417,"context_line":"            source \u003d {\u0027name\u0027: snapshot_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1eb9a0f6_ef176371","line":414,"range":{"start_line":414,"start_character":12,"end_line":414,"end_character":72},"in_reply_to":"6d12751c_0d5af17b","updated":"2026-09-22 09:47:36.000000000","message":"Ack, I understand we are optimizing the \"create\" operation and delaying the flattening operation (called split here) when deleting which makes sense.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8e394c9a02e502f727ad352218afd926ea93ae22","unresolved":true,"context_lines":[{"line_number":411,"context_line":"            # Create the snapshot"},{"line_number":412,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":413,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":414,"context_line":"            self.zapi_client.create_snapshot(volume_name, snapshot_name)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            # Create the volume from snapshot"},{"line_number":417,"context_line":"            source \u003d {\u0027name\u0027: snapshot_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"6d12751c_0d5af17b","line":414,"range":{"start_line":414,"start_character":12,"end_line":414,"end_character":72},"in_reply_to":"c039cd66_7ca1dc6c","updated":"2026-09-21 15:06:38.000000000","message":"If the user deletes vol1, the clone will be split. This process may take some time, after which the user can delete the volume.\n\nvol1 → temp_snap1 → vol2: In this case, creating a volume from a snapshot will take longer. In other words, creating a volume from the cache will take significantly more time.\n\nThere is only one scenario in which volume deletion takes longer: when the user deletes the parent volume. Otherwise, deleting a volume created from a snapshot is very fast.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":419,"context_line":"                      }"},{"line_number":420,"context_line":"            self.zapi_client.create_volume_from_snapshot(source, volume)"},{"line_number":421,"context_line":"            if volume[\u0027size\u0027] !\u003d src_vref[\u0027size\u0027]:"},{"line_number":422,"context_line":"                size_bytes \u003d str(int(src_vref[\u0027size\u0027]) * units.Gi)"},{"line_number":423,"context_line":"                self.zapi_client.do_direct_resize(volume[\u0027name\u0027], size_bytes)"},{"line_number":424,"context_line":"            return self._get_volume_model_update(volume)"},{"line_number":425,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"61c1bce3_2b5e25f1","line":422,"range":{"start_line":422,"start_character":29,"end_line":422,"end_character":66},"updated":"2026-09-19 08:27:56.000000000","message":"don\u0027t we already have some method in utils to do this conversion to avoid any error in casting here?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                      }"},{"line_number":420,"context_line":"            self.zapi_client.create_volume_from_snapshot(source, volume)"},{"line_number":421,"context_line":"            if volume[\u0027size\u0027] !\u003d src_vref[\u0027size\u0027]:"},{"line_number":422,"context_line":"                size_bytes \u003d str(int(src_vref[\u0027size\u0027]) * units.Gi)"},{"line_number":423,"context_line":"                self.zapi_client.do_direct_resize(volume[\u0027name\u0027], size_bytes)"},{"line_number":424,"context_line":"            return self._get_volume_model_update(volume)"},{"line_number":425,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"20fef269_8f1b85a2","line":422,"range":{"start_line":422,"start_character":29,"end_line":422,"end_character":66},"in_reply_to":"227eb77e_a9968d20","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":419,"context_line":"                      }"},{"line_number":420,"context_line":"            self.zapi_client.create_volume_from_snapshot(source, volume)"},{"line_number":421,"context_line":"            if volume[\u0027size\u0027] !\u003d src_vref[\u0027size\u0027]:"},{"line_number":422,"context_line":"                size_bytes \u003d str(int(src_vref[\u0027size\u0027]) * units.Gi)"},{"line_number":423,"context_line":"                self.zapi_client.do_direct_resize(volume[\u0027name\u0027], size_bytes)"},{"line_number":424,"context_line":"            return self._get_volume_model_update(volume)"},{"line_number":425,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"227eb77e_a9968d20","line":422,"range":{"start_line":422,"start_character":29,"end_line":422,"end_character":66},"in_reply_to":"61c1bce3_2b5e25f1","updated":"2026-09-23 19:29:52.000000000","message":"I have added new method in util for conversion.\ndef get_volume_size_gb(volume):\n    return int(volume.size) * units.Gi","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":1084,"context_line":"                                                              ports)"},{"line_number":1085,"context_line":"        # Space allocation is always enabled for ASAr2 LUNs"},{"line_number":1086,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1087,"context_line":"            properties[\u0027discard\u0027] \u003d True"},{"line_number":1088,"context_line":"        else:"},{"line_number":1089,"context_line":"            lun_path \u003d volume[\u0027provider_location\u0027].split(\u0027:\u0027)[1]"},{"line_number":1090,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"}],"source_content_type":"text/x-python","patch_set":30,"id":"a99ad9e2_f0c92737","line":1087,"range":{"start_line":1087,"start_character":12,"end_line":1087,"end_character":40},"updated":"2026-09-19 08:27:56.000000000","message":"so trim/unmap/discard is supported by default in ASAR2?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"                                                              ports)"},{"line_number":1085,"context_line":"        # Space allocation is always enabled for ASAr2 LUNs"},{"line_number":1086,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1087,"context_line":"            properties[\u0027discard\u0027] \u003d True"},{"line_number":1088,"context_line":"        else:"},{"line_number":1089,"context_line":"            lun_path \u003d volume[\u0027provider_location\u0027].split(\u0027:\u0027)[1]"},{"line_number":1090,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"}],"source_content_type":"text/x-python","patch_set":30,"id":"f6f63751_a488c2ee","line":1087,"range":{"start_line":1087,"start_character":12,"end_line":1087,"end_character":40},"in_reply_to":"2e57362a_2b4d3c0b","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"                                                              ports)"},{"line_number":1085,"context_line":"        # Space allocation is always enabled for ASAr2 LUNs"},{"line_number":1086,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1087,"context_line":"            properties[\u0027discard\u0027] \u003d True"},{"line_number":1088,"context_line":"        else:"},{"line_number":1089,"context_line":"            lun_path \u003d volume[\u0027provider_location\u0027].split(\u0027:\u0027)[1]"},{"line_number":1090,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"}],"source_content_type":"text/x-python","patch_set":30,"id":"1066e7cb_1d2cdeb2","line":1087,"range":{"start_line":1087,"start_character":12,"end_line":1087,"end_character":40},"in_reply_to":"66aa42bd_073def69","updated":"2026-09-22 09:47:36.000000000","message":"Acknowledged","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8e394c9a02e502f727ad352218afd926ea93ae22","unresolved":true,"context_lines":[{"line_number":1084,"context_line":"                                                              ports)"},{"line_number":1085,"context_line":"        # Space allocation is always enabled for ASAr2 LUNs"},{"line_number":1086,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1087,"context_line":"            properties[\u0027discard\u0027] \u003d True"},{"line_number":1088,"context_line":"        else:"},{"line_number":1089,"context_line":"            lun_path \u003d volume[\u0027provider_location\u0027].split(\u0027:\u0027)[1]"},{"line_number":1090,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"}],"source_content_type":"text/x-python","patch_set":30,"id":"66aa42bd_073def69","line":1087,"range":{"start_line":1087,"start_character":12,"end_line":1087,"end_character":40},"in_reply_to":"a99ad9e2_f0c92737","updated":"2026-09-21 15:06:38.000000000","message":"For the ASAr2 platform, space allocation is enabled by default for newly created LUNs, and only space_allocation\u003dTrue is supported. Therefore, the code reports discard\u003dTrue to Nova.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"5657b64609b5d03eff0c93c26663d9585c4389a7","unresolved":true,"context_lines":[{"line_number":1084,"context_line":"                                                              ports)"},{"line_number":1085,"context_line":"        # Space allocation is always enabled for ASAr2 LUNs"},{"line_number":1086,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1087,"context_line":"            properties[\u0027discard\u0027] \u003d True"},{"line_number":1088,"context_line":"        else:"},{"line_number":1089,"context_line":"            lun_path \u003d volume[\u0027provider_location\u0027].split(\u0027:\u0027)[1]"},{"line_number":1090,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"}],"source_content_type":"text/x-python","patch_set":30,"id":"2e57362a_2b4d3c0b","line":1087,"range":{"start_line":1087,"start_character":12,"end_line":1087,"end_character":40},"in_reply_to":"a99ad9e2_f0c92737","updated":"2026-09-24 04:51:56.000000000","message":"Yes — ASAr2 LUNs always have space allocation and it cannot be changed. setting discard\u003dTrue matches that. We can add a short comment pointing at that platform behavior.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"}],"cinder/volume/drivers/netapp/dataontap/block_cmode.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":1394,"context_line":""},{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"}],"source_content_type":"text/x-python","patch_set":17,"id":"e898be43_a386276b","line":1397,"updated":"2026-05-15 15:57:12.000000000","message":"Migration not supported, I assume?  What happened previously if netapp_disaggregated_platform was True?  An exception?","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":1394,"context_line":""},{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3d90088f_1ba27f27","line":1397,"in_reply_to":"e898be43_a386276b","updated":"2026-05-19 12:01:07.000000000","message":"We are introducing ASAr2\u0027s F-release with added basic functionality, including the Cinder volume creation workflow. We are implementing ASAr2 support feature by feature. Previously, when netapp_disaggregated_platform was set to true, migrations would fail, but customers would understand this limitation since it was not supported in the previous release. Additionally, ASAr2 supports only host-based migration, not storage-based migration, because ASAr2 does not support volume move operations.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"},{"line_number":1401,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"63ce8f10_6a148152","line":1398,"range":{"start_line":1398,"start_character":12,"end_line":1398,"end_character":28},"updated":"2026-09-19 08:27:56.000000000","message":"looks like ASAR2 has certain optimizations (like storage assisted migration) that are unsupported vs the ONTAP platform.\nMaybe we need support matrix entries to highlight this?\n@rosmaita.fossdev@gmail.com what do you think?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b88a822f0c2ab9a398028978842e7dcaab5ea67b","unresolved":false,"context_lines":[{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"},{"line_number":1401,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"af85e703_14f8d9c4","line":1398,"range":{"start_line":1398,"start_character":12,"end_line":1398,"end_character":28},"in_reply_to":"01ce9180_d157f97e","updated":"2026-09-24 06:38:25.000000000","message":"Acknowledged","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"5657b64609b5d03eff0c93c26663d9585c4389a7","unresolved":true,"context_lines":[{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"},{"line_number":1401,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"3e1146b5_e542da06","line":1398,"range":{"start_line":1398,"start_character":12,"end_line":1398,"end_character":28},"in_reply_to":"01ce9180_d157f97e","updated":"2026-09-24 04:51:56.000000000","message":"Apart from that, dynamic loadbalancing on ASAr2 ensures that a inbalance in placing the volumes post provisioning is also taken care of internally: https://docs.netapp.com/us-en/asa-r2/administer/space-balancing.html","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"},{"line_number":1401,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"01ce9180_d157f97e","line":1398,"range":{"start_line":1398,"start_character":12,"end_line":1398,"end_character":28},"in_reply_to":"414cf0f5_833d28c6","updated":"2026-09-23 19:29:52.000000000","message":"Yes, ASAr2 does not support driver-based migration (migrate_volume_ontap_assisted) for the reason provided by Anoop. Since the platform handles this internally, there is no way to trigger the migration manually. To support OpenStack migration, we simply return False, allowing it to fall back to host-based migration. Therefore, ASAr2 supports only host-based migration, not driver-assisted migration, as migration internally handled by ONTAP.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"7319223270f033f8be8432a243acec05885ea052","unresolved":true,"context_lines":[{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"},{"line_number":1401,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7f80e42c_272fe87e","line":1398,"range":{"start_line":1398,"start_character":12,"end_line":1398,"end_character":28},"in_reply_to":"63ce8f10_6a148152","updated":"2026-09-21 14:13:15.000000000","message":"@rajatdhasmana@gmail.com - the storage assisted migration within the cluster are not required for ASAr2 as ASAr2 balance places the volumes and also moves the LUNs/namespaces internally in case of imbalance. Are we talking about across cluster?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":true,"context_lines":[{"line_number":1395,"context_line":"    def migrate_volume(self, context, volume, host):"},{"line_number":1396,"context_line":"        \"\"\"Migrate Cinder volume to the specified pool or vserver.\"\"\""},{"line_number":1397,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":1398,"context_line":"            return False, {}"},{"line_number":1399,"context_line":"        return self.migrate_volume_ontap_assisted("},{"line_number":1400,"context_line":"            volume, host, self.backend_name, self.configuration.netapp_vserver)"},{"line_number":1401,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"414cf0f5_833d28c6","line":1398,"range":{"start_line":1398,"start_character":12,"end_line":1398,"end_character":28},"in_reply_to":"7f80e42c_272fe87e","updated":"2026-09-22 09:47:36.000000000","message":"No, I\u0027m referring to same cluster cross SVM migration.\nIf I\u0027ve configured two netapp backends pointing to two different SVMs in the same cluster, previously requesting a migration would call migrate_volume_ontap_assisted which would do a cross SVM storage assisted migration but in ASAR2 platform, it will return False that will trigger a generic host assisted migration meaning storage assisted migration across SVM is not supported in case of ASAR2. Is this understanding correct or things work differently in ASAR2?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":1403,"context_line":"        \"\"\"Driver entry point for reverting volume to snapshot.\"\"\""},{"line_number":1404,"context_line":"        try:"},{"line_number":1405,"context_line":"            if self.configuration.netapp_disaggregated_platform:"},{"line_number":1406,"context_line":"                self.zapi_client.restore_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":1407,"context_line":"                                                  snapshot[\u0027name\u0027])"},{"line_number":1408,"context_line":"            else:"},{"line_number":1409,"context_line":"                self._revert_to_snapshot(volume, snapshot)"}],"source_content_type":"text/x-python","patch_set":30,"id":"2c5e2db2_80c2194d","line":1406,"range":{"start_line":1406,"start_character":33,"end_line":1406,"end_character":49},"updated":"2026-09-19 08:27:56.000000000","message":"nit: the naming could have been consistent (revert_to_snapshot) but this is a driver specific detail so not a big deal","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":1403,"context_line":"        \"\"\"Driver entry point for reverting volume to snapshot.\"\"\""},{"line_number":1404,"context_line":"        try:"},{"line_number":1405,"context_line":"            if self.configuration.netapp_disaggregated_platform:"},{"line_number":1406,"context_line":"                self.zapi_client.restore_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":1407,"context_line":"                                                  snapshot[\u0027name\u0027])"},{"line_number":1408,"context_line":"            else:"},{"line_number":1409,"context_line":"                self._revert_to_snapshot(volume, snapshot)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fe43e06e_26f28bae","line":1406,"range":{"start_line":1406,"start_character":33,"end_line":1406,"end_character":49},"in_reply_to":"2c5e2db2_80c2194d","updated":"2026-09-23 19:29:52.000000000","message":"yes, this is ONTAP client method and method name is based on ONTAP related operation that is easy to map the ONTAP functionality. Let me know if you wanted me to change this method name.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b88a822f0c2ab9a398028978842e7dcaab5ea67b","unresolved":false,"context_lines":[{"line_number":1403,"context_line":"        \"\"\"Driver entry point for reverting volume to snapshot.\"\"\""},{"line_number":1404,"context_line":"        try:"},{"line_number":1405,"context_line":"            if self.configuration.netapp_disaggregated_platform:"},{"line_number":1406,"context_line":"                self.zapi_client.restore_snapshot(snapshot[\u0027volume_name\u0027],"},{"line_number":1407,"context_line":"                                                  snapshot[\u0027name\u0027])"},{"line_number":1408,"context_line":"            else:"},{"line_number":1409,"context_line":"                self._revert_to_snapshot(volume, snapshot)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f518d58_881f4a38","line":1406,"range":{"start_line":1406,"start_character":33,"end_line":1406,"end_character":49},"in_reply_to":"fe43e06e_26f28bae","updated":"2026-09-24 06:38:25.000000000","message":"No, this is fine.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":829,"context_line":"            lun_info[\u0027Qtree\u0027] \u003d \\"},{"line_number":830,"context_line":"                lun[\u0027location\u0027].get(\u0027qtree\u0027, {}).get(\u0027name\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"            lun_info[\u0027Path\u0027] \u003d lun[\u0027name\u0027]"},{"line_number":832,"context_line":"            lun_info[\u0027OsType\u0027] \u003d lun.get(\u0027os_type\u0027, \u0027default\u0027)"},{"line_number":833,"context_line":"            lun_info[\u0027SpaceReserved\u0027] \u003d lun[\u0027space\u0027][\u0027guarantee\u0027][\u0027requested\u0027]"},{"line_number":834,"context_line":"            lun_info[\u0027SpaceAllocated\u0027] \u003d \\"},{"line_number":835,"context_line":"                lun[\u0027space\u0027][\u0027scsi_thin_provisioning_support_enabled\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"21db4ea5_b0d14152","line":832,"range":{"start_line":832,"start_character":33,"end_line":832,"end_character":62},"updated":"2026-09-19 08:27:56.000000000","message":"this is not a mandatory property returned in case of ASAR2?\nWhat I\u0027m interested in is where this was used and will this have any user facing impact?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8e394c9a02e502f727ad352218afd926ea93ae22","unresolved":true,"context_lines":[{"line_number":829,"context_line":"            lun_info[\u0027Qtree\u0027] \u003d \\"},{"line_number":830,"context_line":"                lun[\u0027location\u0027].get(\u0027qtree\u0027, {}).get(\u0027name\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"            lun_info[\u0027Path\u0027] \u003d lun[\u0027name\u0027]"},{"line_number":832,"context_line":"            lun_info[\u0027OsType\u0027] \u003d lun.get(\u0027os_type\u0027, \u0027default\u0027)"},{"line_number":833,"context_line":"            lun_info[\u0027SpaceReserved\u0027] \u003d lun[\u0027space\u0027][\u0027guarantee\u0027][\u0027requested\u0027]"},{"line_number":834,"context_line":"            lun_info[\u0027SpaceAllocated\u0027] \u003d \\"},{"line_number":835,"context_line":"                lun[\u0027space\u0027][\u0027scsi_thin_provisioning_support_enabled\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"b3ecd196_d45e8484","line":832,"range":{"start_line":832,"start_character":33,"end_line":832,"end_character":62},"in_reply_to":"21db4ea5_b0d14152","updated":"2026-09-21 15:06:38.000000000","message":"During the automation run, while initializing the pool, we fetch the LUN details. If some volumes are offline, the automation may fail to retrieve the OSType for the ASAr2 system. Therefore, I changed the code from lun[\u0027os_type\u0027] to lun.get(\u0027os_type\u0027).","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b88a822f0c2ab9a398028978842e7dcaab5ea67b","unresolved":true,"context_lines":[{"line_number":829,"context_line":"            lun_info[\u0027Qtree\u0027] \u003d \\"},{"line_number":830,"context_line":"                lun[\u0027location\u0027].get(\u0027qtree\u0027, {}).get(\u0027name\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"            lun_info[\u0027Path\u0027] \u003d lun[\u0027name\u0027]"},{"line_number":832,"context_line":"            lun_info[\u0027OsType\u0027] \u003d lun.get(\u0027os_type\u0027, \u0027default\u0027)"},{"line_number":833,"context_line":"            lun_info[\u0027SpaceReserved\u0027] \u003d lun[\u0027space\u0027][\u0027guarantee\u0027][\u0027requested\u0027]"},{"line_number":834,"context_line":"            lun_info[\u0027SpaceAllocated\u0027] \u003d \\"},{"line_number":835,"context_line":"                lun[\u0027space\u0027][\u0027scsi_thin_provisioning_support_enabled\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"a310570e_a54e1408","line":832,"range":{"start_line":832,"start_character":33,"end_line":832,"end_character":62},"in_reply_to":"860a8c08_7a6a557a","updated":"2026-09-24 06:38:25.000000000","message":"Ack, any user impact should be mentioned in the releasenote.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ee9e2d0bacf1788fc9d910e698ec90fde59486c7","unresolved":true,"context_lines":[{"line_number":829,"context_line":"            lun_info[\u0027Qtree\u0027] \u003d \\"},{"line_number":830,"context_line":"                lun[\u0027location\u0027].get(\u0027qtree\u0027, {}).get(\u0027name\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"            lun_info[\u0027Path\u0027] \u003d lun[\u0027name\u0027]"},{"line_number":832,"context_line":"            lun_info[\u0027OsType\u0027] \u003d lun.get(\u0027os_type\u0027, \u0027default\u0027)"},{"line_number":833,"context_line":"            lun_info[\u0027SpaceReserved\u0027] \u003d lun[\u0027space\u0027][\u0027guarantee\u0027][\u0027requested\u0027]"},{"line_number":834,"context_line":"            lun_info[\u0027SpaceAllocated\u0027] \u003d \\"},{"line_number":835,"context_line":"                lun[\u0027space\u0027][\u0027scsi_thin_provisioning_support_enabled\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"42a1a875_dd2c5793","line":832,"range":{"start_line":832,"start_character":33,"end_line":832,"end_character":62},"in_reply_to":"a310570e_a54e1408","updated":"2026-10-02 17:06:40.000000000","message":"NO, there is no impact to end user.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":829,"context_line":"            lun_info[\u0027Qtree\u0027] \u003d \\"},{"line_number":830,"context_line":"                lun[\u0027location\u0027].get(\u0027qtree\u0027, {}).get(\u0027name\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"            lun_info[\u0027Path\u0027] \u003d lun[\u0027name\u0027]"},{"line_number":832,"context_line":"            lun_info[\u0027OsType\u0027] \u003d lun.get(\u0027os_type\u0027, \u0027default\u0027)"},{"line_number":833,"context_line":"            lun_info[\u0027SpaceReserved\u0027] \u003d lun[\u0027space\u0027][\u0027guarantee\u0027][\u0027requested\u0027]"},{"line_number":834,"context_line":"            lun_info[\u0027SpaceAllocated\u0027] \u003d \\"},{"line_number":835,"context_line":"                lun[\u0027space\u0027][\u0027scsi_thin_provisioning_support_enabled\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"860a8c08_7a6a557a","line":832,"range":{"start_line":832,"start_character":33,"end_line":832,"end_character":62},"in_reply_to":"a5a55bc1_bb7dad42","updated":"2026-09-23 19:29:52.000000000","message":"t will not affect any user-facing management operations. However, the Cinder volume must be online to perform any management operation.\n\nI am referring to situations where an end user creates a volume using the ONTAP CLI or System Manager. If any of these volumes is offline in ONTAP, it can cause an issue during initialization.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":true,"context_lines":[{"line_number":829,"context_line":"            lun_info[\u0027Qtree\u0027] \u003d \\"},{"line_number":830,"context_line":"                lun[\u0027location\u0027].get(\u0027qtree\u0027, {}).get(\u0027name\u0027, \u0027\u0027)"},{"line_number":831,"context_line":"            lun_info[\u0027Path\u0027] \u003d lun[\u0027name\u0027]"},{"line_number":832,"context_line":"            lun_info[\u0027OsType\u0027] \u003d lun.get(\u0027os_type\u0027, \u0027default\u0027)"},{"line_number":833,"context_line":"            lun_info[\u0027SpaceReserved\u0027] \u003d lun[\u0027space\u0027][\u0027guarantee\u0027][\u0027requested\u0027]"},{"line_number":834,"context_line":"            lun_info[\u0027SpaceAllocated\u0027] \u003d \\"},{"line_number":835,"context_line":"                lun[\u0027space\u0027][\u0027scsi_thin_provisioning_support_enabled\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"a5a55bc1_bb7dad42","line":832,"range":{"start_line":832,"start_character":33,"end_line":832,"end_character":62},"in_reply_to":"b3ecd196_d45e8484","updated":"2026-09-22 09:47:36.000000000","message":"Ack but that still doesn\u0027t answer my question, does this change will have any user facing impact like not being able to perform management operations on volume until they are offline etc?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest_asar2.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":19,"context_line":"the base REST client and overrides methods to implement ASA r2 specific"},{"line_number":20,"context_line":"workflows when needed."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":"from oslo_log import log as logging"},{"line_number":23,"context_line":"from oslo_utils import excutils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":17,"id":"3d273acb_76df614d","line":22,"updated":"2026-05-15 15:57:12.000000000","message":"I wonder if you should keep that newline to avoid potential merge issues.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":19,"context_line":"the base REST client and overrides methods to implement ASA r2 specific"},{"line_number":20,"context_line":"workflows when needed."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":"from oslo_log import log as logging"},{"line_number":23,"context_line":"from oslo_utils import excutils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":17,"id":"d63d7e55_9e3cf3ef","line":22,"in_reply_to":"3d273acb_76df614d","updated":"2026-05-19 12:01:07.000000000","message":"Done","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":217,"context_line":"                if e.code \u003d\u003d netapp_api.EDELETE_SPLIT_CLONE:"},{"line_number":218,"context_line":"                    # Split all the child clone from parent volume"},{"line_number":219,"context_line":"                    self.wait_for_all_clone_split_to_complete("},{"line_number":220,"context_line":"                        lun_name,"},{"line_number":221,"context_line":"                        netapp_utils.CACHE_SNAPSHOT_NAME,"},{"line_number":222,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":17,"id":"3e2f7856_e3041ed6","line":219,"updated":"2026-05-15 15:57:12.000000000","message":"Does this ```wait``` call also perform the split?","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":217,"context_line":"                if e.code \u003d\u003d netapp_api.EDELETE_SPLIT_CLONE:"},{"line_number":218,"context_line":"                    # Split all the child clone from parent volume"},{"line_number":219,"context_line":"                    self.wait_for_all_clone_split_to_complete("},{"line_number":220,"context_line":"                        lun_name,"},{"line_number":221,"context_line":"                        netapp_utils.CACHE_SNAPSHOT_NAME,"},{"line_number":222,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":17,"id":"ee2225f0_0b53d8b6","line":219,"in_reply_to":"3e2f7856_e3041ed6","updated":"2026-05-19 12:01:07.000000000","message":"Yes, it will split and wait for split to complete, line no #476, has the ONTAP call to split the clone.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8cc5229760c6a1280f3d3b1dfb81a2b2aff2b8b5","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":217,"context_line":"                if e.code \u003d\u003d netapp_api.EDELETE_SPLIT_CLONE:"},{"line_number":218,"context_line":"                    # Split all the child clone from parent volume"},{"line_number":219,"context_line":"                    self.wait_for_all_clone_split_to_complete("},{"line_number":220,"context_line":"                        lun_name,"},{"line_number":221,"context_line":"                        netapp_utils.CACHE_SNAPSHOT_NAME,"},{"line_number":222,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":17,"id":"020d0eba_e08a71ad","line":219,"in_reply_to":"52990948_e62a0441","updated":"2026-05-21 13:02:42.000000000","message":"Make sense, updated the method.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"58faa5e0344894f731e5008483aad5c3da72205c","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":217,"context_line":"                if e.code \u003d\u003d netapp_api.EDELETE_SPLIT_CLONE:"},{"line_number":218,"context_line":"                    # Split all the child clone from parent volume"},{"line_number":219,"context_line":"                    self.wait_for_all_clone_split_to_complete("},{"line_number":220,"context_line":"                        lun_name,"},{"line_number":221,"context_line":"                        netapp_utils.CACHE_SNAPSHOT_NAME,"},{"line_number":222,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":17,"id":"52990948_e62a0441","line":219,"in_reply_to":"ee2225f0_0b53d8b6","updated":"2026-05-20 06:32:48.000000000","message":"If it also does the split itself, I suggest naming it as such to avoid confusion.  From an outside perspective, the name implies that the function call only performs a wait and nothing else.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":254,"context_line":"        }"},{"line_number":255,"context_line":"        if force:"},{"line_number":256,"context_line":"            query[\u0027allow_delete_while_mapped\u0027] \u003d \u0027true\u0027"},{"line_number":257,"context_line":"        # If namespace id not found on ONTAP, except the exception and return"},{"line_number":258,"context_line":"        try:"},{"line_number":259,"context_line":"            namespace_uuid \u003d self._get_storage_unit_uuid(namespace_name)"},{"line_number":260,"context_line":"        except netapp_utils.NetAppDriverException:"}],"source_content_type":"text/x-python","patch_set":17,"id":"f27920c6_ee4f077a","line":257,"updated":"2026-05-15 15:57:12.000000000","message":"I wonder if you can create shared functionality here with ```delete_lun```, similar to ```create_snapshot``` and ```delete_snapshot``` below that take ```lun_or_namespace```.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        }"},{"line_number":255,"context_line":"        if force:"},{"line_number":256,"context_line":"            query[\u0027allow_delete_while_mapped\u0027] \u003d \u0027true\u0027"},{"line_number":257,"context_line":"        # If namespace id not found on ONTAP, except the exception and return"},{"line_number":258,"context_line":"        try:"},{"line_number":259,"context_line":"            namespace_uuid \u003d self._get_storage_unit_uuid(namespace_name)"},{"line_number":260,"context_line":"        except netapp_utils.NetAppDriverException:"}],"source_content_type":"text/x-python","patch_set":17,"id":"c817487f_0886002d","line":257,"in_reply_to":"f27920c6_ee4f077a","updated":"2026-05-19 12:01:07.000000000","message":"The RestClientASAr2 class in this file inherits from the RestClient class. Since the parent class (RestClient) contains a destroy_namespace method, we maintain the same method name in the child class to ensure consistency and proper override functionality.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":425,"context_line":"        try:"},{"line_number":426,"context_line":"            self.send_request(del_api, \u0027delete\u0027)"},{"line_number":427,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":428,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":429,"context_line":"                if ("},{"line_number":430,"context_line":"                        e.code \u003d\u003d netapp_api.ESNAPSHOT_EXPIRED_OR_LOCK"},{"line_number":431,"context_line":"                ) or (e.code \u003d\u003d netapp_api.ERROR_VOLUME_BUSY):"}],"source_content_type":"text/x-python","patch_set":17,"id":"aed07410_67449681","line":428,"updated":"2026-05-15 15:57:12.000000000","message":"This might be prime for shared code as well with the others (though not as straightforward).","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        try:"},{"line_number":426,"context_line":"            self.send_request(del_api, \u0027delete\u0027)"},{"line_number":427,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":428,"context_line":"            with excutils.save_and_reraise_exception() as exc_context:"},{"line_number":429,"context_line":"                if ("},{"line_number":430,"context_line":"                        e.code \u003d\u003d netapp_api.ESNAPSHOT_EXPIRED_OR_LOCK"},{"line_number":431,"context_line":"                ) or (e.code \u003d\u003d netapp_api.ERROR_VOLUME_BUSY):"}],"source_content_type":"text/x-python","patch_set":17,"id":"140c85f1_e2fe7e78","line":428,"in_reply_to":"aed07410_67449681","updated":"2026-05-19 12:01:07.000000000","message":"Wherever possible, I have moved code into separate methods—such as wait_for_all_clone_split_to_complete, from a reusability perspective. However, in this case, we need to catch exceptions specific to the API call. \nIn a future release, we will evaluate whether this logic can be moved to a separate method to make it reusable across other parts of the codebase.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":475,"context_line":"            self.volume_clone_split_start(clone[\u0027uuid\u0027])"},{"line_number":476,"context_line":"            split_wait_interval \u003d self.config.safe_get("},{"line_number":477,"context_line":"                \u0027netapp_clone_split_timeout\u0027)"},{"line_number":478,"context_line":"            self.wait_for_split_to_complete(clone[\u0027uuid\u0027],"},{"line_number":479,"context_line":"                                            wait_interval\u003dsplit_wait_interval,"},{"line_number":480,"context_line":"                                            require_split_start\u003dTrue)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"d44eddbf_f7ee3b4d","line":478,"updated":"2026-05-15 15:57:12.000000000","message":"Suggestion: use threading to enhance performance (split multiple clones simultaneously).","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            self.volume_clone_split_start(clone[\u0027uuid\u0027])"},{"line_number":476,"context_line":"            split_wait_interval \u003d self.config.safe_get("},{"line_number":477,"context_line":"                \u0027netapp_clone_split_timeout\u0027)"},{"line_number":478,"context_line":"            self.wait_for_split_to_complete(clone[\u0027uuid\u0027],"},{"line_number":479,"context_line":"                                            wait_interval\u003dsplit_wait_interval,"},{"line_number":480,"context_line":"                                            require_split_start\u003dTrue)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"98cccbc1_bd028045","line":478,"in_reply_to":"d44eddbf_f7ee3b4d","updated":"2026-05-19 12:01:07.000000000","message":"Make sense. Done.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        :param su_uuid: Storage unit UUID."},{"line_number":526,"context_line":"        :param wait_interval: Max wait time in seconds."},{"line_number":527,"context_line":"        :param require_split_start: If True, require state transition to"},{"line_number":528,"context_line":"                                    split_initiated\u003dTrue before considering"},{"line_number":529,"context_line":"                                    the split complete. Use this when the"},{"line_number":530,"context_line":"                                    caller has just started a split job."}],"source_content_type":"text/x-python","patch_set":17,"id":"9471a7b9_b4f1b864","line":527,"updated":"2026-05-15 15:57:12.000000000","message":"I mentioned this in the UT, but I wonder if this is dangerous here in that the split might fully complete before the check for ```split_initiated\u003dTrue``` is found.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        :param su_uuid: Storage unit UUID."},{"line_number":526,"context_line":"        :param wait_interval: Max wait time in seconds."},{"line_number":527,"context_line":"        :param require_split_start: If True, require state transition to"},{"line_number":528,"context_line":"                                    split_initiated\u003dTrue before considering"},{"line_number":529,"context_line":"                                    the split complete. Use this when the"},{"line_number":530,"context_line":"                                    caller has just started a split job."}],"source_content_type":"text/x-python","patch_set":17,"id":"4f92509a_8475597b","line":527,"in_reply_to":"9471a7b9_b4f1b864","updated":"2026-05-19 12:01:07.000000000","message":"The logic works as follows: \n1. when a split job is initiated, the split operation may not start immediately. During this time, the clone.split_initiated value remains false.\n2. Once the split starts, this value becomes true. \n3. When the split completes, the value again returns to false.\n\nWhat happens when the split completes fully before the check for split_initiated\u003dTrue is found?\n\nWe first check the condition if not split_started[\u0027value\u0027]. If this condition is true (api return split_started false), we set split_initiated\u003dTrue when below method return true.\n\nsplit_initiated \u003d _is_split_initiated(\n    clone.get(\u0027split_initiated\u0027, False))\nIf split_initiated is false, we throw an exception. On the next loop iteration, the code will check again to see if the split job has been initiated. \nThis condition can only occur when a split job is triggered and the split_initiated flag takes some time to change from false to true. This is the scenario when a split job just started , and I have handled this scenario in my code to make sure clone split operation starts properly.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":535,"context_line":"        retries \u003d max(1, int(wait_interval / interval) + 1)"},{"line_number":536,"context_line":"        split_started \u003d {\u0027value\u0027: False}"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        def _is_split_initiated(value):"},{"line_number":539,"context_line":"            if isinstance(value, bool):"},{"line_number":540,"context_line":"                return value"},{"line_number":541,"context_line":"            if isinstance(value, str):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bd35895c_5a56a629","line":538,"updated":"2026-05-15 15:57:12.000000000","message":"Can all of these possibilities really occur?","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":535,"context_line":"        retries \u003d max(1, int(wait_interval / interval) + 1)"},{"line_number":536,"context_line":"        split_started \u003d {\u0027value\u0027: False}"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        def _is_split_initiated(value):"},{"line_number":539,"context_line":"            if isinstance(value, bool):"},{"line_number":540,"context_line":"                return value"},{"line_number":541,"context_line":"            if isinstance(value, str):"}],"source_content_type":"text/x-python","patch_set":17,"id":"5c52eb69_38206588","line":538,"in_reply_to":"bd35895c_5a56a629","updated":"2026-05-19 12:01:07.000000000","message":"yes. We were hitting this only one setup and 2-3 after trying so many time so added this logic.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":561,"context_line":"                       \u0027started\u0027: split_started[\u0027value\u0027],"},{"line_number":562,"context_line":"                       \u0027split_initiated\u0027: split_initiated})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            if not split_started[\u0027value\u0027]:"},{"line_number":565,"context_line":"                if split_initiated:"},{"line_number":566,"context_line":"                    split_started[\u0027value\u0027] \u003d True"},{"line_number":567,"context_line":"                    raise netapp_api.NaRetryableError("}],"source_content_type":"text/x-python","patch_set":17,"id":"18ab5ca6_c87c3520","line":564,"updated":"2026-05-15 15:57:12.000000000","message":"I\u0027m very confused by the logic here.  The code below that invokes ```_waiter()``` will take this exception and rethrow a ```NetAppDriverException``` with a message that indicates the exact opposite of the messages in this code here.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                       \u0027started\u0027: split_started[\u0027value\u0027],"},{"line_number":562,"context_line":"                       \u0027split_initiated\u0027: split_initiated})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            if not split_started[\u0027value\u0027]:"},{"line_number":565,"context_line":"                if split_initiated:"},{"line_number":566,"context_line":"                    split_started[\u0027value\u0027] \u003d True"},{"line_number":567,"context_line":"                    raise netapp_api.NaRetryableError("}],"source_content_type":"text/x-python","patch_set":17,"id":"217113cd_f9277b3b","line":564,"in_reply_to":"18ab5ca6_c87c3520","updated":"2026-05-19 12:01:07.000000000","message":"Inside the waiter, I throw an exception if the clone split has not completed on each retry. At the end, in the code below, I wanted to mark it as failed with a NetApp driver exception since this operation failed due to the NetApp driver API. To me, this logic appears very clear.\n\n  return _waiter()\n        except netapp_api.NaRetryableError:\n            msg \u003d _(\"Split job for storage unit %s did not reach the expected\"\n                    \" state. Retries exhausted. Aborting.\") % su_uuid\n            raise netapp_utils.NetAppDriverException(msg)","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"58faa5e0344894f731e5008483aad5c3da72205c","unresolved":true,"context_lines":[{"line_number":561,"context_line":"                       \u0027started\u0027: split_started[\u0027value\u0027],"},{"line_number":562,"context_line":"                       \u0027split_initiated\u0027: split_initiated})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            if not split_started[\u0027value\u0027]:"},{"line_number":565,"context_line":"                if split_initiated:"},{"line_number":566,"context_line":"                    split_started[\u0027value\u0027] \u003d True"},{"line_number":567,"context_line":"                    raise netapp_api.NaRetryableError("}],"source_content_type":"text/x-python","patch_set":17,"id":"ab52a722_6372fb0b","line":564,"in_reply_to":"217113cd_f9277b3b","updated":"2026-05-20 06:32:48.000000000","message":"Hi @gawasthi2010@gmail.com,\n\nWhat I mean is that you\u0027ve found ```split_initiated``` to be True, and you\u0027re setting ```split_started[\u0027value\u0027]``` to ```True``` with a message that the split job has started and is running in the exception, which is then rethrown.\n\nI don\u0027t see anywhere else that ```split_started[\u0027value\u0027]``` is set to ```True```, so ```if not split_started[\u0027value\u0027]``` will always be false.\n\nIt\u0027s possible I don\u0027t fully understand what\u0027s going on here, even with your explanation.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8cc5229760c6a1280f3d3b1dfb81a2b2aff2b8b5","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                       \u0027started\u0027: split_started[\u0027value\u0027],"},{"line_number":562,"context_line":"                       \u0027split_initiated\u0027: split_initiated})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            if not split_started[\u0027value\u0027]:"},{"line_number":565,"context_line":"                if split_initiated:"},{"line_number":566,"context_line":"                    split_started[\u0027value\u0027] \u003d True"},{"line_number":567,"context_line":"                    raise netapp_api.NaRetryableError("}],"source_content_type":"text/x-python","patch_set":17,"id":"b92cb9c9_d877c1d2","line":564,"in_reply_to":"ab52a722_6372fb0b","updated":"2026-05-21 13:02:42.000000000","message":"@anthony.galica@hitachivantara.com\n\nSetting split_started[\u0027value\u0027] to true is one time job to make sure split is started. In below code \n            if not split_started[\u0027value\u0027]:\n                if split_initiated:\n                    split_started[\u0027value\u0027] \u003d True\n                    raise netapp_api.NaRetryableError(\n                        message\u003d\u0027Split job started and is running.\u0027)\n\n1.The default value for split_started[\u0027value\u0027] is false at line #536.\n2.On the first retry, if condition \"not split_started[\u0027value\u0027]\" is true and split_initiated is true, then split_started[\u0027value\u0027] will be set to True. This happens only once.\n3.On subsequent retries, only the code below will execute since the other conditions will fail, and it will continue throwing exceptions until the split is completed.\n                        \nif split_initiated:\n                raise netapp_api.NaRetryableError(\n                    message\u003d\u0027Split job is running.\u0027)\n  \n4.Once the split is completed, the method will return, indicating that the split operation finished successfully. If a retry fails after multiple attempts (which is configurable), the snapshot deletion and other operations that depend on the split clone may fail.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"86f32f5d6e0306fe2ed00fff702462011b92adf6","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                       \u0027started\u0027: split_started[\u0027value\u0027],"},{"line_number":562,"context_line":"                       \u0027split_initiated\u0027: split_initiated})"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"            if not split_started[\u0027value\u0027]:"},{"line_number":565,"context_line":"                if split_initiated:"},{"line_number":566,"context_line":"                    split_started[\u0027value\u0027] \u003d True"},{"line_number":567,"context_line":"                    raise netapp_api.NaRetryableError("}],"source_content_type":"text/x-python","patch_set":17,"id":"3ebcf6e2_f0f17c45","line":564,"in_reply_to":"b92cb9c9_d877c1d2","updated":"2026-05-22 05:18:14.000000000","message":"Ok, I see it now and understand.  In the second analysis after your initial reply, I crucially failed to note that the initialization on line #536 was outside of ```_waiter``` and thought it was initializing every time ```_waiter``` was called (maybe due to the collapsed lines and inline comments in the diff stretching everything out).  Thanks for putting up with the questioning 🙂\n\nJust fyi, you can use three backticks for code blocks -- I find this very useful\n\ni.e.\nthis:\n\\`\\`\\`\nif split_initiated:\n    raise netapp_api.NaRetryableError(\n        message\u003d\u0027Split job is running.\u0027)\n\\`\\`\\`\n\nturns into this:\n```\nif split_initiated:\n    raise netapp_api.NaRetryableError(\n        message\u003d\u0027Split job is running.\u0027)\n```","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"f13583dca4662b381d68e8686d0a222d8c0f0875","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            lun_uuid \u003d self._get_storage_unit_uuid(lun_name)"},{"line_number":196,"context_line":"        except netapp_utils.NetAppDriverException:"},{"line_number":197,"context_line":"            LOG.error(\u0027Cound not find storage unit %(name)s\u0027,"},{"line_number":198,"context_line":"                      {\u0027name\u0027: lun_name})"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"00876b0c_7a41690b","line":197,"updated":"2026-06-03 02:14:12.000000000","message":"s/Cound/Could","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            lun_uuid \u003d self._get_storage_unit_uuid(lun_name)"},{"line_number":196,"context_line":"        except netapp_utils.NetAppDriverException:"},{"line_number":197,"context_line":"            LOG.error(\u0027Cound not find storage unit %(name)s\u0027,"},{"line_number":198,"context_line":"                      {\u0027name\u0027: lun_name})"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"2885b723_bfce099e","line":197,"in_reply_to":"00876b0c_7a41690b","updated":"2026-06-14 10:41:15.000000000","message":"Done","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"f13583dca4662b381d68e8686d0a222d8c0f0875","unresolved":true,"context_lines":[{"line_number":207,"context_line":"            # This is a known ONTAP issue, tracked under bug #CONTAP-639582."},{"line_number":208,"context_line":"            # Once the bug is fixed by ONTAP, will remove code for wait for"},{"line_number":209,"context_line":"            # split."},{"line_number":210,"context_line":"            split_wait_interval \u003d int(self.config.safe_get("},{"line_number":211,"context_line":"                \u0027netapp_clone_split_timeout\u0027))"},{"line_number":212,"context_line":"            self.wait_for_split_to_complete("},{"line_number":213,"context_line":"                lun_uuid,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fefe8545_eedc786e","line":210,"updated":"2026-06-03 02:14:12.000000000","message":"self.config is set to None in __init__(), but there are several places where self.config.safe_get() is called without a guard - which would result in an attribute exception if set_config() hasn\u0027t yet been called.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            # This is a known ONTAP issue, tracked under bug #CONTAP-639582."},{"line_number":208,"context_line":"            # Once the bug is fixed by ONTAP, will remove code for wait for"},{"line_number":209,"context_line":"            # split."},{"line_number":210,"context_line":"            split_wait_interval \u003d int(self.config.safe_get("},{"line_number":211,"context_line":"                \u0027netapp_clone_split_timeout\u0027))"},{"line_number":212,"context_line":"            self.wait_for_split_to_complete("},{"line_number":213,"context_line":"                lun_uuid,"}],"source_content_type":"text/x-python","patch_set":20,"id":"270a2652_5f37a127","line":210,"in_reply_to":"fefe8545_eedc786e","updated":"2026-06-14 10:41:15.000000000","message":"This can happen when \"split_wait_interval \u003d int(self.config.safe_get(\" like will get call before running the setup. This will likely not hit in standard lifecycle unless those client methods are called before setup completes or from a different code path. I am setting the config in parent class block_base.py file\n        if self.configuration.netapp_disaggregated_platform:\n            self.zapi_client.set_config(self.configuration) \n            \nAnyway, I have modify the code to make sure it it will handle the none also.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"f13583dca4662b381d68e8686d0a222d8c0f0875","unresolved":true,"context_lines":[{"line_number":261,"context_line":"        try:"},{"line_number":262,"context_line":"            namespace_uuid \u003d self._get_storage_unit_uuid(namespace_name)"},{"line_number":263,"context_line":"        except netapp_utils.NetAppDriverException:"},{"line_number":264,"context_line":"            LOG.error(\u0027Cound not find storage unit %(name)s\u0027,"},{"line_number":265,"context_line":"                      {\u0027name\u0027: namespace_name})"},{"line_number":266,"context_line":"            return"},{"line_number":267,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1fb26080_7dd8285a","line":264,"updated":"2026-06-03 02:14:12.000000000","message":"s/Cound/Could","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        try:"},{"line_number":262,"context_line":"            namespace_uuid \u003d self._get_storage_unit_uuid(namespace_name)"},{"line_number":263,"context_line":"        except netapp_utils.NetAppDriverException:"},{"line_number":264,"context_line":"            LOG.error(\u0027Cound not find storage unit %(name)s\u0027,"},{"line_number":265,"context_line":"                      {\u0027name\u0027: namespace_name})"},{"line_number":266,"context_line":"            return"},{"line_number":267,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"4c17fb5f_7e6e2d7e","line":264,"in_reply_to":"1fb26080_7dd8285a","updated":"2026-06-14 10:41:15.000000000","message":"Done","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"f13583dca4662b381d68e8686d0a222d8c0f0875","unresolved":true,"context_lines":[{"line_number":274,"context_line":"            # This is a known ONTAP issue, tracked under bug #CONTAP-639582."},{"line_number":275,"context_line":"            # Once the bug is fixed by ONTAP, will remove code for wait for"},{"line_number":276,"context_line":"            # split."},{"line_number":277,"context_line":"            split_wait_interval \u003d int(self.config.safe_get("},{"line_number":278,"context_line":"                \u0027netapp_clone_split_timeout\u0027))"},{"line_number":279,"context_line":"            self.wait_for_split_to_complete("},{"line_number":280,"context_line":"                namespace_uuid,"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f89cd81_49f90ad0","line":277,"updated":"2026-06-03 02:14:12.000000000","message":"Same as line 210","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            # This is a known ONTAP issue, tracked under bug #CONTAP-639582."},{"line_number":275,"context_line":"            # Once the bug is fixed by ONTAP, will remove code for wait for"},{"line_number":276,"context_line":"            # split."},{"line_number":277,"context_line":"            split_wait_interval \u003d int(self.config.safe_get("},{"line_number":278,"context_line":"                \u0027netapp_clone_split_timeout\u0027))"},{"line_number":279,"context_line":"            self.wait_for_split_to_complete("},{"line_number":280,"context_line":"                namespace_uuid,"}],"source_content_type":"text/x-python","patch_set":20,"id":"0cae2f0d_dab0dd46","line":277,"in_reply_to":"7f89cd81_49f90ad0","updated":"2026-06-14 10:41:15.000000000","message":"Done","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"f13583dca4662b381d68e8686d0a222d8c0f0875","unresolved":true,"context_lines":[{"line_number":419,"context_line":"        try:"},{"line_number":420,"context_line":"            su_uuid \u003d self._get_storage_unit_uuid(su_name)"},{"line_number":421,"context_line":"        except netapp_utils.NetAppDriverException:"},{"line_number":422,"context_line":"            LOG.error(\u0027Cound not find storage unit %(name)s\u0027,"},{"line_number":423,"context_line":"                      {\u0027name\u0027: lun_or_namespace})"},{"line_number":424,"context_line":"            return"},{"line_number":425,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7ff82d80_d7c205b1","line":422,"updated":"2026-06-03 02:14:12.000000000","message":"s/Cound/Could","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        try:"},{"line_number":420,"context_line":"            su_uuid \u003d self._get_storage_unit_uuid(su_name)"},{"line_number":421,"context_line":"        except netapp_utils.NetAppDriverException:"},{"line_number":422,"context_line":"            LOG.error(\u0027Cound not find storage unit %(name)s\u0027,"},{"line_number":423,"context_line":"                      {\u0027name\u0027: lun_or_namespace})"},{"line_number":424,"context_line":"            return"},{"line_number":425,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"c79838db_2976ff91","line":422,"in_reply_to":"7ff82d80_d7c205b1","updated":"2026-06-14 10:41:15.000000000","message":"Done","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"f13583dca4662b381d68e8686d0a222d8c0f0875","unresolved":true,"context_lines":[{"line_number":477,"context_line":"            su_name, snapshot_name)"},{"line_number":478,"context_line":"        if not su_clones:"},{"line_number":479,"context_line":"            return"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        split_wait_interval \u003d int(self.config.safe_get("},{"line_number":482,"context_line":"            \u0027netapp_clone_split_timeout\u0027))"},{"line_number":483,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da924cee_fc807103","line":480,"updated":"2026-06-03 02:14:12.000000000","message":"Same as line 210.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            su_name, snapshot_name)"},{"line_number":478,"context_line":"        if not su_clones:"},{"line_number":479,"context_line":"            return"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        split_wait_interval \u003d int(self.config.safe_get("},{"line_number":482,"context_line":"            \u0027netapp_clone_split_timeout\u0027))"},{"line_number":483,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"e1e027dd_486758dd","line":480,"in_reply_to":"da924cee_fc807103","updated":"2026-06-14 10:41:15.000000000","message":"Done","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"f13583dca4662b381d68e8686d0a222d8c0f0875","unresolved":true,"context_lines":[{"line_number":571,"context_line":"            if isinstance(value, bool):"},{"line_number":572,"context_line":"                return value"},{"line_number":573,"context_line":"            if isinstance(value, str):"},{"line_number":574,"context_line":"                return value.lower() in (\u0027true\u0027, \u0027True\u0027)"},{"line_number":575,"context_line":"            return bool(value)"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        @utils.retry(netapp_api.NaRetryableError, interval\u003dinterval,"}],"source_content_type":"text/x-python","patch_set":20,"id":"55e5bce7_c5f35e1b","line":574,"updated":"2026-06-03 02:14:12.000000000","message":"after lower(), value cannot be \u0027True\u0027, just \u003d\u003d \u0027true\u0027 should be sufficient.","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"b74a52c7060011187e1e0f13aa319a743f192968","unresolved":false,"context_lines":[{"line_number":571,"context_line":"            if isinstance(value, bool):"},{"line_number":572,"context_line":"                return value"},{"line_number":573,"context_line":"            if isinstance(value, str):"},{"line_number":574,"context_line":"                return value.lower() in (\u0027true\u0027, \u0027True\u0027)"},{"line_number":575,"context_line":"            return bool(value)"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        @utils.retry(netapp_api.NaRetryableError, interval\u003dinterval,"}],"source_content_type":"text/x-python","patch_set":20,"id":"c4870159_97d8859c","line":574,"in_reply_to":"55e5bce7_c5f35e1b","updated":"2026-06-14 10:41:15.000000000","message":"I have changed it to value in (\u0027true\u0027, \u0027True\u0027)","commit_id":"fe89cc49a7cf1f1303dee3b45131ceddc88e0977"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        }"},{"line_number":271,"context_line":"        if force:"},{"line_number":272,"context_line":"            query[\u0027allow_delete_while_mapped\u0027] \u003d \u0027true\u0027"},{"line_number":273,"context_line":"        # If namespace id not found on ONTAP, except the exception and return"},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            namespace_uuid \u003d self._get_storage_unit_uuid(namespace_name)"},{"line_number":276,"context_line":"        except netapp_utils.NetAppDriverException:"}],"source_content_type":"text/x-python","patch_set":30,"id":"5ad0fd0b_77dddcae","line":273,"range":{"start_line":273,"start_character":46,"end_line":273,"end_character":52},"updated":"2026-09-19 08:27:56.000000000","message":"nit: catch","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        }"},{"line_number":271,"context_line":"        if force:"},{"line_number":272,"context_line":"            query[\u0027allow_delete_while_mapped\u0027] \u003d \u0027true\u0027"},{"line_number":273,"context_line":"        # If namespace id not found on ONTAP, except the exception and return"},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            namespace_uuid \u003d self._get_storage_unit_uuid(namespace_name)"},{"line_number":276,"context_line":"        except netapp_utils.NetAppDriverException:"}],"source_content_type":"text/x-python","patch_set":30,"id":"05fe6aa5_1254bb0f","line":273,"range":{"start_line":273,"start_character":46,"end_line":273,"end_character":52},"in_reply_to":"4ceeb70a_ddb166aa","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        }"},{"line_number":271,"context_line":"        if force:"},{"line_number":272,"context_line":"            query[\u0027allow_delete_while_mapped\u0027] \u003d \u0027true\u0027"},{"line_number":273,"context_line":"        # If namespace id not found on ONTAP, except the exception and return"},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            namespace_uuid \u003d self._get_storage_unit_uuid(namespace_name)"},{"line_number":276,"context_line":"        except netapp_utils.NetAppDriverException:"}],"source_content_type":"text/x-python","patch_set":30,"id":"4ceeb70a_ddb166aa","line":273,"range":{"start_line":273,"start_character":46,"end_line":273,"end_character":52},"in_reply_to":"5ad0fd0b_77dddcae","updated":"2026-09-23 19:29:52.000000000","message":"Done","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":458,"context_line":"                    exc_context.reraise \u003d False"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def get_all_clones_volume_uuid(self, storage_unit_name, snapshot_name):"},{"line_number":461,"context_line":"        \"\"\"Get all clones volume uuids for specified LUN or Namespace.\"\"\""},{"line_number":462,"context_line":"        query \u003d {"},{"line_number":463,"context_line":"            \u0027clone.source.snapshot.name\u0027: snapshot_name,"},{"line_number":464,"context_line":"            \u0027clone.source.storage_unit.name\u0027: storage_unit_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"43f82a3d_b9b00250","line":461,"range":{"start_line":461,"start_character":39,"end_line":461,"end_character":69},"updated":"2026-09-19 08:27:56.000000000","message":"the description here says fetching all clones for volume but we are passing snapshot_name in the request, seems ambiguous?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ee9e2d0bacf1788fc9d910e698ec90fde59486c7","unresolved":true,"context_lines":[{"line_number":458,"context_line":"                    exc_context.reraise \u003d False"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def get_all_clones_volume_uuid(self, storage_unit_name, snapshot_name):"},{"line_number":461,"context_line":"        \"\"\"Get all clones volume uuids for specified LUN or Namespace.\"\"\""},{"line_number":462,"context_line":"        query \u003d {"},{"line_number":463,"context_line":"            \u0027clone.source.snapshot.name\u0027: snapshot_name,"},{"line_number":464,"context_line":"            \u0027clone.source.storage_unit.name\u0027: storage_unit_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"410fc93e_a1a869d5","line":461,"range":{"start_line":461,"start_character":39,"end_line":461,"end_character":69},"in_reply_to":"1ded1df5_dff77cec","updated":"2026-10-02 17:06:40.000000000","message":"This method has been removed after new implementation of defer delete.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":458,"context_line":"                    exc_context.reraise \u003d False"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def get_all_clones_volume_uuid(self, storage_unit_name, snapshot_name):"},{"line_number":461,"context_line":"        \"\"\"Get all clones volume uuids for specified LUN or Namespace.\"\"\""},{"line_number":462,"context_line":"        query \u003d {"},{"line_number":463,"context_line":"            \u0027clone.source.snapshot.name\u0027: snapshot_name,"},{"line_number":464,"context_line":"            \u0027clone.source.storage_unit.name\u0027: storage_unit_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1ded1df5_dff77cec","line":461,"range":{"start_line":461,"start_character":39,"end_line":461,"end_character":69},"in_reply_to":"43f82a3d_b9b00250","updated":"2026-09-23 19:29:52.000000000","message":"Clones are created from snapshots. Therefore, to retrieve the list of clones for a specific storage unit, we also need to pass the snapshot. Here, we are passing both the storage unit and the snapshot.\n\nThe description looks fine to me. However, if you think it is ambiguous, please suggest a revised description.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":477,"context_line":"                \"split_initiated\": True"},{"line_number":478,"context_line":"            }"},{"line_number":479,"context_line":"        }"},{"line_number":480,"context_line":"        return self.send_request("},{"line_number":481,"context_line":"            f\u0027/storage/storage-units/{clone_volume_uuid}\u0027,"},{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"}],"source_content_type":"text/x-python","patch_set":30,"id":"252ed52d_0a98f206","line":483,"range":{"start_line":480,"start_character":15,"end_line":483,"end_character":9},"updated":"2026-09-19 08:27:56.000000000","message":"how do we know the split request succeeded? if this operation fails and raises exception, we are not doing any handling here like we do for other operations using send_request?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8e394c9a02e502f727ad352218afd926ea93ae22","unresolved":true,"context_lines":[{"line_number":477,"context_line":"                \"split_initiated\": True"},{"line_number":478,"context_line":"            }"},{"line_number":479,"context_line":"        }"},{"line_number":480,"context_line":"        return self.send_request("},{"line_number":481,"context_line":"            f\u0027/storage/storage-units/{clone_volume_uuid}\u0027,"},{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"}],"source_content_type":"text/x-python","patch_set":30,"id":"b70dc3c2_74a6d6f0","line":483,"range":{"start_line":480,"start_character":15,"end_line":483,"end_character":9},"in_reply_to":"252ed52d_0a98f206","updated":"2026-09-21 15:06:38.000000000","message":"We call the wait_for_split_to_complete() method, which continuously checks the clone.split_initiated value returned by the REST API. When the split starts, its value is True; once it changes to False, the split is considered complete.\n\nIn short, wait_for_split_to_complete() is called after the split job starts. It returns if the split completes successfully; otherwise, it raises an exception.\n\nIn the event of a REST failure, send_request() already raises a NaApiError if the PATCH request fails, and the split job will fail there itself.\n\nThere are a few places where we catch this exception—for example, when a split operation is in progress and we need to prevent deletion of the parent volume. Exception handling is required in those places, but I don’t think it is require here.\n\n\nThis is PATCH call and doesn\u0027t tell us the split succeeded; it only initiates the split.The method which called volume_clone_split_start() method after this method we  call wait_for_split_to_complete() method, where we are keep checking clone.split_initiated REST value, so when spit started, it\u0027s value is True and once it value change to False, that mean spit is completed. In, sort, wait_for_split_to_complete() method get called after split job started and return if spit successully otherwise raise the exception. \n\nIn case of REST failure, send_request() already raises NaApiError if the PATCH failed and spit job will failed. \n\nThere are few places we are cathing the exception like when spit operation is going on we are not allow to delete the parent volume etc, those places it require, but I don\u0027t think it require here.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ee9e2d0bacf1788fc9d910e698ec90fde59486c7","unresolved":true,"context_lines":[{"line_number":477,"context_line":"                \"split_initiated\": True"},{"line_number":478,"context_line":"            }"},{"line_number":479,"context_line":"        }"},{"line_number":480,"context_line":"        return self.send_request("},{"line_number":481,"context_line":"            f\u0027/storage/storage-units/{clone_volume_uuid}\u0027,"},{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"}],"source_content_type":"text/x-python","patch_set":30,"id":"c8b3dfa9_5a5bdd8f","line":483,"range":{"start_line":480,"start_character":15,"end_line":483,"end_character":9},"in_reply_to":"939540c6_28363baa","updated":"2026-10-02 17:06:40.000000000","message":"This is a common method called by both snapshot deletion and volume deletion. It is difficult to determine whether the split operation failed because of a snapshot deletion or a volume deletion. However, by looking into the complete log, the user can identify which operation caused the split job to fail.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b88a822f0c2ab9a398028978842e7dcaab5ea67b","unresolved":true,"context_lines":[{"line_number":477,"context_line":"                \"split_initiated\": True"},{"line_number":478,"context_line":"            }"},{"line_number":479,"context_line":"        }"},{"line_number":480,"context_line":"        return self.send_request("},{"line_number":481,"context_line":"            f\u0027/storage/storage-units/{clone_volume_uuid}\u0027,"},{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"}],"source_content_type":"text/x-python","patch_set":30,"id":"939540c6_28363baa","line":483,"range":{"start_line":480,"start_character":15,"end_line":483,"end_character":9},"in_reply_to":"aaab142a_ee7ee27a","updated":"2026-09-24 06:38:25.000000000","message":"Any message indicating a destroy operation for volume/snapshot occurred is useful, right now with a failure, we won\u0027t even know what operation caused the exception but anyways I don\u0027t have strong opinions on this one.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":477,"context_line":"                \"split_initiated\": True"},{"line_number":478,"context_line":"            }"},{"line_number":479,"context_line":"        }"},{"line_number":480,"context_line":"        return self.send_request("},{"line_number":481,"context_line":"            f\u0027/storage/storage-units/{clone_volume_uuid}\u0027,"},{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"}],"source_content_type":"text/x-python","patch_set":30,"id":"aaab142a_ee7ee27a","line":483,"range":{"start_line":480,"start_character":15,"end_line":483,"end_character":9},"in_reply_to":"b61ccfd0_62fc78b0","updated":"2026-09-23 19:29:52.000000000","message":"We have below operation where we use the ONTAP snapshot \n1. Creating the cinder snapshot\n2. Creating the new volume from cache image.\n3. Creating the bootable volume from cache volume, here we use the snapshot to create the boot volume and it is called cache acceleration.\n2 and 3 are quite similar.\nSo, we perform the split operation when \n1. User delete the snapshot \n2. User delete the cache volume or parent volume of all the boot volume.\n \n So, there is a possibility that LUN destroy also invoke _split_and_wait ..() method but _split_and_wait...() is a common method, so it is difficult to add a message indicating which operation—volume deletion or snapshot deletion—caused the split job to fail.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"48d5ccb5c358544abbb1910e7f1574cd81fcea54","unresolved":true,"context_lines":[{"line_number":477,"context_line":"                \"split_initiated\": True"},{"line_number":478,"context_line":"            }"},{"line_number":479,"context_line":"        }"},{"line_number":480,"context_line":"        return self.send_request("},{"line_number":481,"context_line":"            f\u0027/storage/storage-units/{clone_volume_uuid}\u0027,"},{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"}],"source_content_type":"text/x-python","patch_set":30,"id":"c1c0e860_ee77319a","line":483,"range":{"start_line":480,"start_character":15,"end_line":483,"end_character":9},"in_reply_to":"b70dc3c2_74a6d6f0","updated":"2026-09-21 17:18:01.000000000","message":"Just ignore the previous response, just consider the below response -\n\nWe call the wait_for_split_to_complete() method, which continuously checks the clone.split_initiated value returned by the REST API. When the split starts, its value is True; once it changes to False, the split is considered complete.\n\nIn short, wait_for_split_to_complete() is called after the split job starts. It returns if the split completes successfully; otherwise, it raises an exception.\n\nIn the event of a REST failure, send_request() already raises a NaApiError if the PATCH request fails, and the split job will fail there itself.\n\nThere are a few places where we catch this exception—for example, when a split operation is in progress and we need to prevent deletion of the parent volume. Exception handling is required in those places, but I don’t think it is require here.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":true,"context_lines":[{"line_number":477,"context_line":"                \"split_initiated\": True"},{"line_number":478,"context_line":"            }"},{"line_number":479,"context_line":"        }"},{"line_number":480,"context_line":"        return self.send_request("},{"line_number":481,"context_line":"            f\u0027/storage/storage-units/{clone_volume_uuid}\u0027,"},{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"}],"source_content_type":"text/x-python","patch_set":30,"id":"b61ccfd0_62fc78b0","line":483,"range":{"start_line":480,"start_character":15,"end_line":483,"end_character":9},"in_reply_to":"c1c0e860_ee77319a","updated":"2026-09-22 09:47:36.000000000","message":"Ack, so from your respose, what i gather is, raising an exception is reasonable if the request fails here?\n\n    destroy_lun -\u003e split_and_wait_for_all_clone_split_to_complete -\u003e _split_and_wait -\u003e volume_clone_split_start\n    \nthis is the workflow where we call this method so basically whatever exception that happens here will be visible for the delete volume (destroy_lun) operation so I feel we should at least provide a proper message for the operator to debug if the request fails here. If you feel there is a low probablity of this failing (which is never 0), we can probably skip this one.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"},{"line_number":487,"context_line":"        \"\"\"Wait for all the clones split to complete\"\"\""},{"line_number":488,"context_line":"        su_clones \u003d self.get_all_clones_volume_uuid("}],"source_content_type":"text/x-python","patch_set":30,"id":"947ac318_5858fd97","line":485,"range":{"start_line":485,"start_character":61,"end_line":485,"end_character":68},"updated":"2026-09-19 08:27:56.000000000","message":"what is su_name? storage_unit_name? it\u0027s good to use better identifiers or provide description in docstring","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"},{"line_number":487,"context_line":"        \"\"\"Wait for all the clones split to complete\"\"\""},{"line_number":488,"context_line":"        su_clones \u003d self.get_all_clones_volume_uuid("}],"source_content_type":"text/x-python","patch_set":30,"id":"f99ea2e2_0806663f","line":485,"range":{"start_line":485,"start_character":61,"end_line":485,"end_character":68},"in_reply_to":"947ac318_5858fd97","updated":"2026-09-23 19:29:52.000000000","message":"Done, changed all the places.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            \u0027patch\u0027, body\u003dbody, wait_on_accepted\u003dFalse"},{"line_number":483,"context_line":"        )"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def split_and_wait_for_all_clone_split_to_complete(self, su_name,"},{"line_number":486,"context_line":"                                                       snapshot_name):"},{"line_number":487,"context_line":"        \"\"\"Wait for all the clones split to complete\"\"\""},{"line_number":488,"context_line":"        su_clones \u003d self.get_all_clones_volume_uuid("}],"source_content_type":"text/x-python","patch_set":30,"id":"c18ab57f_82aa5fe1","line":485,"range":{"start_line":485,"start_character":61,"end_line":485,"end_character":68},"in_reply_to":"f99ea2e2_0806663f","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":true,"context_lines":[{"line_number":493,"context_line":"        split_wait_interval \u003d self._get_clone_split_timeout()"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        def _split_and_wait(clone_uuid):"},{"line_number":496,"context_line":"            self.volume_clone_split_start(clone_uuid)"},{"line_number":497,"context_line":"            self.wait_for_split_to_complete("},{"line_number":498,"context_line":"                clone_uuid,"},{"line_number":499,"context_line":"                wait_interval\u003dsplit_wait_interval,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1f45a5ab_c3c4cce7","line":496,"range":{"start_line":496,"start_character":17,"end_line":496,"end_character":41},"updated":"2026-09-22 09:47:36.000000000","message":"this method returns the response for send_request but we don\u0027t store/use it anywhere?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":493,"context_line":"        split_wait_interval \u003d self._get_clone_split_timeout()"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        def _split_and_wait(clone_uuid):"},{"line_number":496,"context_line":"            self.volume_clone_split_start(clone_uuid)"},{"line_number":497,"context_line":"            self.wait_for_split_to_complete("},{"line_number":498,"context_line":"                clone_uuid,"},{"line_number":499,"context_line":"                wait_interval\u003dsplit_wait_interval,"}],"source_content_type":"text/x-python","patch_set":30,"id":"dc9942c4_0cc62c1e","line":496,"range":{"start_line":496,"start_character":17,"end_line":496,"end_character":41},"in_reply_to":"1f45a5ab_c3c4cce7","updated":"2026-09-23 19:29:52.000000000","message":"Remove the return statement.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        split_wait_interval \u003d self._get_clone_split_timeout()"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        def _split_and_wait(clone_uuid):"},{"line_number":496,"context_line":"            self.volume_clone_split_start(clone_uuid)"},{"line_number":497,"context_line":"            self.wait_for_split_to_complete("},{"line_number":498,"context_line":"                clone_uuid,"},{"line_number":499,"context_line":"                wait_interval\u003dsplit_wait_interval,"}],"source_content_type":"text/x-python","patch_set":30,"id":"838d8164_201d56c0","line":496,"range":{"start_line":496,"start_character":17,"end_line":496,"end_character":41},"in_reply_to":"dc9942c4_0cc62c1e","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"0fa80b08_ad7a6f4e","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"updated":"2026-09-19 08:27:56.000000000","message":"I\u0027m skeptical about using a threadpool here, if too many operations go into this wait, we could easily eat up a lot of resources on that node","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ee9e2d0bacf1788fc9d910e698ec90fde59486c7","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"84e951e8_7dcd236a","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"in_reply_to":"03ee17eb_5a351d8f","updated":"2026-10-02 17:06:40.000000000","message":"As suggested change the complete logic, please take the look into new code.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"48d5ccb5c358544abbb1910e7f1574cd81fcea54","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"84e4496c_4d988b6d","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"in_reply_to":"0fa80b08_ad7a6f4e","updated":"2026-09-21 17:18:01.000000000","message":"What do you suggest here, shall we use some other lib for concurrency ..? Need your suggestion here.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"863b4471_2cd21a71","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"in_reply_to":"41e24d78_cced0b4f","updated":"2026-09-23 19:29:52.000000000","message":"In my previous comment I have mentioned that we do the split in case user delete the cache volume so we do the split in 2 workflows \n\n- Snapshot workflow\n- Cache acceleration workflow\nSo, do you wanted me to apply the same logic when user delete the cached volume..?, same as you mentioned in case-3, not need wait for spit to complete.\n\nInitially we were also thinking to delete the snapshot from OpenStak and let the split job to continue running on ONTAP. However, we realized that if the split job fails, the snapshot may not be deleted from ONTAP. Therefore, we decided to ensure that the split job completes successfully before deleting the snapshot.\n\nWill discuss this approach with the team and then decided to proceed with it.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"c410a112381e74884182e79c991756ec2972677d","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"03ee17eb_5a351d8f","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"in_reply_to":"7566b0e4_abb77a95","updated":"2026-09-25 12:20:13.000000000","message":"I think the approach of soft deleting the snapshot before the split job, and then later deleting the snapshot on ONTAP using a looped call is a good approach we can take. This exact workflow is also present in Manila for share snapshots. So I think we can go ahead with the above approach. Thanks for bringing this out. We did discuss this approach for ASAr2 in the initial phases of designs but somehow we diverted to a different approach assuming its corner case. But given that cleaning up tenant Volumes in bulk can be a common use case, I think this should partially solve the limitations there are with Storage Unit Snapshots today on ASAr2. Gireesh please go ahead with this change.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"7566b0e4_abb77a95","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"in_reply_to":"7cac38b1_28fe91b8","updated":"2026-09-24 19:01:40.000000000","message":"No, this cinder volume and it is visible to OpenStack.\n\nBelow is the workflow:\n1. Configure caching related details in cinder.conf\n2. Upload the image, that will create the cinder volume with image.\n2. Create the NOVA VM with bootable volume, here we create the snapshot and using that snapshot we clone the new cinder volume give that to NOVA VM. Subsequently, if more NOVA VM are created with bootable volume, we use same snapshot to create the new bootable volume using clone the snapshot.\n\nYes, this is correct.\n\"So, from openstack perspective, I created volA -\u003e cache-snap -\u003e volB\nIf i delete volA that triggers deletion of cache-snap which causes split for volB (flattening), even if the split fails, we will be putting the volA in error state?\"\n\nYes, this is good idea to have one period job or looping call to clean the stale object. Will discuss this with Anoop and will start working on this approach.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"41e24d78_cced0b4f","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"in_reply_to":"84e4496c_4d988b6d","updated":"2026-09-22 09:47:36.000000000","message":"I need some high level understanding of the goal we are trying to achieve here.\nThere are 3 places from where the split_and_wait_for_all_clone_split_to_complete method is called:\n1. destroy lun (iSCSI/FC)\n2. destroy namespace (nvme)\n3. delete snapshot\n\nIn all 3 cases, we will reach here if the snapshot (parent snap in case of 1 and 2) is deleting and all of it\u0027s children are waiting for split\n\nIn case of 1 and 2, I feel we should only wait for the split to happen for that particular lun/namespace and not for all of the children of the snapshot since we are only interested in deleting that one volume and we really don\u0027t care if split completes for other children or not so doesn\u0027t require multithreading. we can just wait with an exponential backoff if the deletion succeeds otherwise fail the operation saying the LUN is offline and try again later. This is a simple retry pattern we follow in RBD driver that can be used[1]\n\nIn case of 3, I assume we are trying to split the volumes once we trigger the snapshot delete in which case we don\u0027t really need to wait since the split can happen async and we can mark the snapshot as deleted. If a subsequent LUN/namespace deletion request arrives, we can wait for that particular LUN to split and then delete it otherwise timeout (which is case 1 and 2) so again doesn\u0027t require neither multithreading nor any wait logic for snapshot deletion.\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/volume/drivers/rbd.py#L1689-L1691","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b88a822f0c2ab9a398028978842e7dcaab5ea67b","unresolved":true,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        max_workers \u003d min(8, len(su_clones))"},{"line_number":506,"context_line":"        failed_clones \u003d []"},{"line_number":507,"context_line":"        with concurrent.futures.ThreadPoolExecutor("},{"line_number":508,"context_line":"                max_workers\u003dmax_workers) as executor:"},{"line_number":509,"context_line":"            futures \u003d {"},{"line_number":510,"context_line":"                executor.submit(_split_and_wait, clone[\u0027uuid\u0027]): clone[\u0027uuid\u0027]"},{"line_number":511,"context_line":"                for clone in su_clones"}],"source_content_type":"text/x-python","patch_set":30,"id":"7cac38b1_28fe91b8","line":508,"range":{"start_line":507,"start_character":8,"end_line":508,"end_character":53},"in_reply_to":"863b4471_2cd21a71","updated":"2026-09-24 06:38:25.000000000","message":"Let\u0027s clarify few things,\nfirstly we call it cache volume but it\u0027s actually cache snapshot right?\nsecondly, the cache snapshot isn\u0027t visible from OpenStack perspective, so if we are triggering deletion of cache snapshot, it is probably triggered via deletion of parent volume?\nwe also keep mentioning ONTAP but it\u0027s actually a new platform and the following cases only apply to ASAR2 correct?\nSo, from openstack perspective, I created volA -\u003e cache-snap -\u003e volB\nIf i delete volA that triggers deletion of cache-snap which causes split for volB (flattening), even if the split fails, we will be putting the volA in error state?\nWhat about having a periodic job that checks if all the splits have happened and retry the ones that failed? similar to a garbage collector to check removal of resources at certain intervals and perform the needful to make it successful.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":520,"context_line":"        if failed_clones:"},{"line_number":521,"context_line":"            clone_ids \u003d \u0027, \u0027.join([clone_uuid for clone_uuid, _ in"},{"line_number":522,"context_line":"                                   failed_clones])"},{"line_number":523,"context_line":"            msg \u003d _(\"Clone split failed for clones: %(clone_ids)s\") % {"},{"line_number":524,"context_line":"                \u0027clone_ids\u0027: clone_ids,"},{"line_number":525,"context_line":"            }"},{"line_number":526,"context_line":"            raise netapp_utils.NetAppDriverException(msg)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def restore_snapshot(self, lun_or_namespace, snapshot_name):"},{"line_number":529,"context_line":"        \"\"\"Restore a storage unit snapshot for the specified LUN.\"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"df34b1e6_d3d65cc4","line":526,"range":{"start_line":523,"start_character":0,"end_line":526,"end_character":57},"updated":"2026-09-19 08:27:56.000000000","message":"so if split fails, we fail the destroy_{lun/namespace} operation.\nThe message here seems confusing since clone split is an internal driver/storage array detail and is unrelated to the destroy LUN operation itself from a cloud admin perpspective.\nIt is good for debugging/fixing though but we should include the original operation details as well like\n\n    \"Destroying LUN failed due to a clone split failure. This failure happens when ...\"","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":520,"context_line":"        if failed_clones:"},{"line_number":521,"context_line":"            clone_ids \u003d \u0027, \u0027.join([clone_uuid for clone_uuid, _ in"},{"line_number":522,"context_line":"                                   failed_clones])"},{"line_number":523,"context_line":"            msg \u003d _(\"Clone split failed for clones: %(clone_ids)s\") % {"},{"line_number":524,"context_line":"                \u0027clone_ids\u0027: clone_ids,"},{"line_number":525,"context_line":"            }"},{"line_number":526,"context_line":"            raise netapp_utils.NetAppDriverException(msg)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def restore_snapshot(self, lun_or_namespace, snapshot_name):"},{"line_number":529,"context_line":"        \"\"\"Restore a storage unit snapshot for the specified LUN.\"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"620e7cb0_699909ec","line":526,"range":{"start_line":523,"start_character":0,"end_line":526,"end_character":57},"in_reply_to":"df34b1e6_d3d65cc4","updated":"2026-09-23 19:29:52.000000000","message":"Please refer my previous comment for this","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        \"\"\""},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        initial_interval \u003d 5"},{"line_number":577,"context_line":"        max_interval \u003d min(30, max(initial_interval, wait_interval // 12))"},{"line_number":578,"context_line":"        elapsed \u003d 0"},{"line_number":579,"context_line":"        split_started \u003d False"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"8c87b11c_8dfc4171","line":577,"range":{"start_line":577,"start_character":53,"end_line":577,"end_character":72},"updated":"2026-09-19 08:27:56.000000000","message":"by default 50 is choosen here","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":577,"context_line":"        max_interval \u003d min(30, max(initial_interval, wait_interval // 12))"},{"line_number":578,"context_line":"        elapsed \u003d 0"},{"line_number":579,"context_line":"        split_started \u003d False"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        def _is_split_initiated(value):"},{"line_number":582,"context_line":"            if isinstance(value, bool):"},{"line_number":583,"context_line":"                return value"},{"line_number":584,"context_line":"            if isinstance(value, str):"},{"line_number":585,"context_line":"                return value in (\u0027true\u0027, \u0027True\u0027)"},{"line_number":586,"context_line":"            return bool(value)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        def _next_interval(last_interval, remaining):"},{"line_number":589,"context_line":"            next_interval \u003d ("}],"source_content_type":"text/x-python","patch_set":30,"id":"d49f682c_3e49d7cf","line":586,"range":{"start_line":580,"start_character":0,"end_line":586,"end_character":30},"updated":"2026-09-19 08:27:56.000000000","message":"a better version of this logic is already defined in bool_from_string","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        max_interval \u003d min(30, max(initial_interval, wait_interval // 12))"},{"line_number":578,"context_line":"        elapsed \u003d 0"},{"line_number":579,"context_line":"        split_started \u003d False"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        def _is_split_initiated(value):"},{"line_number":582,"context_line":"            if isinstance(value, bool):"},{"line_number":583,"context_line":"                return value"},{"line_number":584,"context_line":"            if isinstance(value, str):"},{"line_number":585,"context_line":"                return value in (\u0027true\u0027, \u0027True\u0027)"},{"line_number":586,"context_line":"            return bool(value)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        def _next_interval(last_interval, remaining):"},{"line_number":589,"context_line":"            next_interval \u003d ("}],"source_content_type":"text/x-python","patch_set":30,"id":"cb0a7492_b2485d95","line":586,"range":{"start_line":580,"start_character":0,"end_line":586,"end_character":30},"in_reply_to":"a1753f0d_7d57a062","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":577,"context_line":"        max_interval \u003d min(30, max(initial_interval, wait_interval // 12))"},{"line_number":578,"context_line":"        elapsed \u003d 0"},{"line_number":579,"context_line":"        split_started \u003d False"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        def _is_split_initiated(value):"},{"line_number":582,"context_line":"            if isinstance(value, bool):"},{"line_number":583,"context_line":"                return value"},{"line_number":584,"context_line":"            if isinstance(value, str):"},{"line_number":585,"context_line":"                return value in (\u0027true\u0027, \u0027True\u0027)"},{"line_number":586,"context_line":"            return bool(value)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        def _next_interval(last_interval, remaining):"},{"line_number":589,"context_line":"            next_interval \u003d ("}],"source_content_type":"text/x-python","patch_set":30,"id":"a1753f0d_7d57a062","line":586,"range":{"start_line":580,"start_character":0,"end_line":586,"end_character":30},"in_reply_to":"d49f682c_3e49d7cf","updated":"2026-09-23 19:29:52.000000000","message":"Done. Remove this method completely and using bool_from_string method.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":601,"context_line":"            response \u003d self.send_request(f\u0027/storage/storage-units/{su_uuid}\u0027,"},{"line_number":602,"context_line":"                                         \u0027get\u0027, query\u003dquery)"},{"line_number":603,"context_line":"            clone \u003d response.get(\u0027clone\u0027) or {}"},{"line_number":604,"context_line":"            split_initiated \u003d _is_split_initiated("},{"line_number":605,"context_line":"                clone.get(\u0027split_initiated\u0027, False))"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            LOG.debug(\u0027Split status for storage unit %(su_uuid)s - \u0027"},{"line_number":608,"context_line":"                      \u0027started: %(started)s, split_initiated: \u0027"}],"source_content_type":"text/x-python","patch_set":30,"id":"398f7a4e_486d8177","line":605,"range":{"start_line":604,"start_character":12,"end_line":605,"end_character":52},"updated":"2026-09-19 08:27:56.000000000","message":"given above comment, this could be\n\n    from oslo_utils import strutils\n\n    split_initiated \u003d strutils.bool_from_string(clone.get(\u0027split_initiated\u0027, False))","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            response \u003d self.send_request(f\u0027/storage/storage-units/{su_uuid}\u0027,"},{"line_number":602,"context_line":"                                         \u0027get\u0027, query\u003dquery)"},{"line_number":603,"context_line":"            clone \u003d response.get(\u0027clone\u0027) or {}"},{"line_number":604,"context_line":"            split_initiated \u003d _is_split_initiated("},{"line_number":605,"context_line":"                clone.get(\u0027split_initiated\u0027, False))"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            LOG.debug(\u0027Split status for storage unit %(su_uuid)s - \u0027"},{"line_number":608,"context_line":"                      \u0027started: %(started)s, split_initiated: \u0027"}],"source_content_type":"text/x-python","patch_set":30,"id":"8a3a3d21_f41d95ae","line":605,"range":{"start_line":604,"start_character":12,"end_line":605,"end_character":52},"in_reply_to":"354ffbdd_d0ae98b9","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":601,"context_line":"            response \u003d self.send_request(f\u0027/storage/storage-units/{su_uuid}\u0027,"},{"line_number":602,"context_line":"                                         \u0027get\u0027, query\u003dquery)"},{"line_number":603,"context_line":"            clone \u003d response.get(\u0027clone\u0027) or {}"},{"line_number":604,"context_line":"            split_initiated \u003d _is_split_initiated("},{"line_number":605,"context_line":"                clone.get(\u0027split_initiated\u0027, False))"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            LOG.debug(\u0027Split status for storage unit %(su_uuid)s - \u0027"},{"line_number":608,"context_line":"                      \u0027started: %(started)s, split_initiated: \u0027"}],"source_content_type":"text/x-python","patch_set":30,"id":"354ffbdd_d0ae98b9","line":605,"range":{"start_line":604,"start_character":12,"end_line":605,"end_character":52},"in_reply_to":"398f7a4e_486d8177","updated":"2026-09-23 19:29:52.000000000","message":"done","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":620,"context_line":"            elif not split_initiated:"},{"line_number":621,"context_line":"                return"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"            remaining \u003d wait_interval - elapsed"},{"line_number":624,"context_line":"            if remaining \u003c\u003d 0:"},{"line_number":625,"context_line":"                break"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"c76ee317_aea8dd1f","line":623,"range":{"start_line":623,"start_character":24,"end_line":623,"end_character":37},"updated":"2026-09-19 08:27:56.000000000","message":"wait interval is a 10 minute timeout which seems to be a lot given a user can trigger this easily when trying to delete all resources associated to a tenant, do we have a more realistic timeout?","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"50714589b1a154750320712863bd49742dd67cbf","unresolved":true,"context_lines":[{"line_number":620,"context_line":"            elif not split_initiated:"},{"line_number":621,"context_line":"                return"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"            remaining \u003d wait_interval - elapsed"},{"line_number":624,"context_line":"            if remaining \u003c\u003d 0:"},{"line_number":625,"context_line":"                break"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"73f0114a_63a16b75","line":623,"range":{"start_line":623,"start_character":24,"end_line":623,"end_character":37},"in_reply_to":"b07cf199_0fd5211a","updated":"2026-09-22 09:47:36.000000000","message":"If my earlier understanding is correct, we won\u0027t require anything more than a retry decorator.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"48d5ccb5c358544abbb1910e7f1574cd81fcea54","unresolved":true,"context_lines":[{"line_number":620,"context_line":"            elif not split_initiated:"},{"line_number":621,"context_line":"                return"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"            remaining \u003d wait_interval - elapsed"},{"line_number":624,"context_line":"            if remaining \u003c\u003d 0:"},{"line_number":625,"context_line":"                break"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"b07cf199_0fd5211a","line":623,"range":{"start_line":623,"start_character":24,"end_line":623,"end_character":37},"in_reply_to":"c76ee317_aea8dd1f","updated":"2026-09-21 17:18:01.000000000","message":"The wait interval is based on the number of new volumes created from the snapshot. In this case, if the user has more clones, it will take longer because the split operation will require more time, even though concurrency is being used.\n\nAdditionally, if the split job finishes in 30 or 60 seconds, it will not wait for the full 10 minutes; the job will finish in 30 or 60 seconds. This interval is configurable, and users can modify it according to their requirements.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":644,"context_line":"        response \u003d self.send_request(\u0027/storage/storage-units/\u0027,"},{"line_number":645,"context_line":"                                     \u0027get\u0027, query\u003dquery)"},{"line_number":646,"context_line":"        records \u003d response.get(\u0027records\u0027, [])"},{"line_number":647,"context_line":"        if len(records) !\u003d 1:"},{"line_number":648,"context_line":"            msg \u003d _(\u0027Could not find storage unit with name %(name)s.\u0027)"},{"line_number":649,"context_line":"            msg_args \u003d {\u0027name\u0027: name}"},{"line_number":650,"context_line":"            raise netapp_utils.NetAppDriverException(msg % msg_args)"},{"line_number":651,"context_line":"        return records[0][\u0027uuid\u0027]"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def _get_backend_lun_or_namespace(self, path):"},{"line_number":654,"context_line":"        \"\"\"Get the backend LUN or namespace\"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"9c5d8002_5fe24e8f","line":651,"range":{"start_line":647,"start_character":8,"end_line":651,"end_character":33},"updated":"2026-09-19 08:27:56.000000000","message":"nit: this could be written in a more readable way as\n\n    if len(records) \u003d\u003d 1:\n        return records[0][\u0027uuid\u0027]\n    msg \u003d _(\u0027Could not find storage unit with name %(name)s.\u0027)\n    msg_args \u003d {\u0027name\u0027: name}\n    raise netapp_utils.NetAppDriverException(msg % msg_args)","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":644,"context_line":"        response \u003d self.send_request(\u0027/storage/storage-units/\u0027,"},{"line_number":645,"context_line":"                                     \u0027get\u0027, query\u003dquery)"},{"line_number":646,"context_line":"        records \u003d response.get(\u0027records\u0027, [])"},{"line_number":647,"context_line":"        if len(records) !\u003d 1:"},{"line_number":648,"context_line":"            msg \u003d _(\u0027Could not find storage unit with name %(name)s.\u0027)"},{"line_number":649,"context_line":"            msg_args \u003d {\u0027name\u0027: name}"},{"line_number":650,"context_line":"            raise netapp_utils.NetAppDriverException(msg % msg_args)"},{"line_number":651,"context_line":"        return records[0][\u0027uuid\u0027]"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def _get_backend_lun_or_namespace(self, path):"},{"line_number":654,"context_line":"        \"\"\"Get the backend LUN or namespace\"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"bd44caf3_afeb5d1f","line":651,"range":{"start_line":647,"start_character":8,"end_line":651,"end_character":33},"in_reply_to":"9c5d8002_5fe24e8f","updated":"2026-09-23 19:29:52.000000000","message":"Done","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        response \u003d self.send_request(\u0027/storage/storage-units/\u0027,"},{"line_number":645,"context_line":"                                     \u0027get\u0027, query\u003dquery)"},{"line_number":646,"context_line":"        records \u003d response.get(\u0027records\u0027, [])"},{"line_number":647,"context_line":"        if len(records) !\u003d 1:"},{"line_number":648,"context_line":"            msg \u003d _(\u0027Could not find storage unit with name %(name)s.\u0027)"},{"line_number":649,"context_line":"            msg_args \u003d {\u0027name\u0027: name}"},{"line_number":650,"context_line":"            raise netapp_utils.NetAppDriverException(msg % msg_args)"},{"line_number":651,"context_line":"        return records[0][\u0027uuid\u0027]"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def _get_backend_lun_or_namespace(self, path):"},{"line_number":654,"context_line":"        \"\"\"Get the backend LUN or namespace\"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"47dc499c_8e375824","line":651,"range":{"start_line":647,"start_character":8,"end_line":651,"end_character":33},"in_reply_to":"bd44caf3_afeb5d1f","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"}],"cinder/volume/drivers/netapp/dataontap/nvme_library.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":402,"context_line":"        LOG.debug(\"Snapshot %s deletion successful.\", snapshot[\u0027name\u0027])"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":405,"context_line":"        source \u003d {\u0027name\u0027: snapshot[\u0027name\u0027],"},{"line_number":406,"context_line":"                  \u0027volume_name\u0027: snapshot[\u0027volume_name\u0027],"},{"line_number":407,"context_line":"                  \u0027size\u0027: snapshot[\u0027volume_size\u0027]"},{"line_number":408,"context_line":"                  }"}],"source_content_type":"text/x-python","patch_set":17,"id":"4917203d_fb9bb3c1","line":405,"updated":"2026-05-15 15:57:12.000000000","message":"I assume modifying the source here won\u0027t affect the non-disaggregated code?","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        LOG.debug(\"Snapshot %s deletion successful.\", snapshot[\u0027name\u0027])"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":405,"context_line":"        source \u003d {\u0027name\u0027: snapshot[\u0027name\u0027],"},{"line_number":406,"context_line":"                  \u0027volume_name\u0027: snapshot[\u0027volume_name\u0027],"},{"line_number":407,"context_line":"                  \u0027size\u0027: snapshot[\u0027volume_size\u0027]"},{"line_number":408,"context_line":"                  }"}],"source_content_type":"text/x-python","patch_set":17,"id":"4a5778c8_352725d5","line":405,"in_reply_to":"4917203d_fb9bb3c1","updated":"2026-05-19 12:01:07.000000000","message":"Yes, it will not.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"885709559a4513e89bf4915ec850e86218d3bda6","unresolved":true,"context_lines":[{"line_number":416,"context_line":"            self._clone_source_to_destination(source, volume)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":419,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":420,"context_line":"            # Create the snapshot"},{"line_number":421,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":422,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"5267c51e_2e2898bb","line":419,"updated":"2026-05-15 15:57:12.000000000","message":"Might be worthwhile to share some of this code with the other places it is used.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6073d43caf7a31fc7949a9c6499abcd2ee545079","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            self._clone_source_to_destination(source, volume)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":419,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":420,"context_line":"            # Create the snapshot"},{"line_number":421,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":422,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"96f2b5cc_e5e46112","line":419,"in_reply_to":"5267c51e_2e2898bb","updated":"2026-05-19 12:01:07.000000000","message":"Wherever required, I ensure that methods are modularized. In this case, I found that the same code could be reused for snapshot creation; however, since a few lines of code differ between the two implementations, I decided not to extract this into a separate method.","commit_id":"ba2aa0a387fe419b67187267427455a34c0b731b"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"88a6d2a25af1a9932b2cdacd72149b14a623a25d","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"d6414737_74dc84c6","line":1090,"updated":"2026-08-25 08:45:51.000000000","message":"with `disaggregated_platform\u003dFalse` this will re-raise `\"Revert snapshot failed.` and original \"doesn\u0027t support\"  will be lost or ignored.\n\nwith ASAr2 mode and if real restore_snapshot fails\nrestore_snapshot will throw some error, this broad Exception will catch it and re-re-raise \"revert snapshot failed\" masking original error msg.\n\n---\nmove the non supported checks outside the try-block so its never caught.\nand have\n```\nexcept Exception as e:\n    raise exception.VolumeBackendAPIException(\n        f\"Revert snapshot failed: {str(e)}\")\n```\n\n----\nI think I had commented on this earlier, but cant find my comment anymore","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"383b2fed6c8001fd7fb91add83311ec7dd6bde7e","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"d0b28230_827aee6a","line":1090,"in_reply_to":"0cf0f100_1d8be590","updated":"2026-08-27 04:47:45.000000000","message":"Done","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0a5d3d632dd2a2d39e7ebe2acc9a80121c0e0bde","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"0cf0f100_1d8be590","line":1090,"in_reply_to":"31fe60d0_5e1d180c","updated":"2026-08-25 16:50:50.000000000","message":"Made the changes as you suggested.","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"c4b9060b83d399bf1a4dd0b3527775640b68371b","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"453686d9_31c3d50c","line":1090,"in_reply_to":"3e72dce1_e0991070","updated":"2026-09-09 14:53:14.000000000","message":"Done","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"d6c4bce1034399db4f2d0eb6b9e0e960e425a60d","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"31fe60d0_5e1d180c","line":1090,"in_reply_to":"44927d66_df50058c","updated":"2026-08-25 10:12:27.000000000","message":"\u003e I think I had commented on this earlier, but cant find my comment anymore\n\n\u003e\u003e Previously your most of the comment was on unit test. You can filter your comment and check those.\n\nokay, may be in some other patch then, but it helps if we can see our comments being addressed. resoving hide them from file timeline pov.\n\n---\n\nso from masking I meant below, isn\u0027t it same here ?\ncan you please try these 2 scenario\n```\ntry:\n    if True:\n        x \u003d 1/0  # Original error: ZeroDivisionError\n    else:\n        raise ValueError(\"else error\")\nexcept Exception:\n    raise ValueError(\"Generic error: Ops failed\")  # Original masked\n```\n---\n```\nif not True:\n    raise ValueError(\"doesn\u0027t support\")  # Raised outseide try, never masked\n\ntry:\n    x \u003d 1/0  # Only catches this\nexcept Exception as e:\n    raise ValueError(f\"ops failed: {str(e)}\")\n```","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8025eca51576551a157f3042cfd8a2fe26758bd9","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"5d3cce6f_9d981aec","line":1090,"in_reply_to":"453686d9_31c3d50c","updated":"2026-09-10 06:33:33.000000000","message":"Done","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"508c8f95f4d05d1e5d2a51fa84b47800f9c48a80","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"a9fe72cc_a78f4ae4","line":1090,"in_reply_to":"87dcd225_869bebac","updated":"2026-09-08 06:13:57.000000000","message":"Can you elaborate more, what change require here.","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"624b26c12e6bd2c7bc058f7c5da402b582100d5a","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"3e72dce1_e0991070","line":1090,"in_reply_to":"a9fe72cc_a78f4ae4","updated":"2026-09-08 06:59:51.000000000","message":"replace L1089-1091 with \n```\nexcept Exception as e:\n    raise exception.VolumeBackendAPIException(\n                \"Revert snapshot failed: %s\", e)\n```","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"dfa722231573e32ea0cee8bdeb20fb7f021c0a23","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"87dcd225_869bebac","line":1090,"in_reply_to":"d0b28230_827aee6a","updated":"2026-09-04 12:20:37.000000000","message":"not really\n\nL1090-1091 should be as suggested in above ex:\n\n```\nexcept Exception as e:\n    raise ValueError(f\"ops failed: {str(e)}\")\n```","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"def0e06514b63da33f4fe9887f740b75c17f48fc","unresolved":true,"context_lines":[{"line_number":1087,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":1088,"context_line":"                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \""},{"line_number":1089,"context_line":"                    \"unified storage\")"},{"line_number":1090,"context_line":"        except Exception:"},{"line_number":1091,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":1092,"context_line":"                \"Revert snapshot failed.\")"},{"line_number":1093,"context_line":"        LOG.debug(\"Snapshot %s reverted successful.\", snapshot[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"44927d66_df50058c","line":1090,"in_reply_to":"d6414737_74dc84c6","updated":"2026-08-25 09:09:24.000000000","message":"@auniyal@redhat.com, for disaggregated_platform\u003dFalse it will always execute below code.\nelse:\n                raise exception.VolumeBackendAPIException(\n                    \"Snapshot restore doesn\u0027t support for NVMe/TCP \"\n                    \"unified storage\")\n                    \n                    \nIt will never raise \"\"Revert snapshot failed.\" for disaggregated_platform\u003dFalse.\n\nPreviously your most of the comment was on unit test. You can filter your comment and check those.","commit_id":"0b36165c339b005b151ccc2f649b2f0d5d088886"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":423,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":424,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":425,"context_line":"            # Create the snapshot"},{"line_number":426,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":427,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":428,"context_line":"            self.client.create_snapshot(volume_name, snapshot_name)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            # Create the volume from snapshot"},{"line_number":431,"context_line":"            source \u003d {\u0027name\u0027: snapshot_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5f9296d4_7830d03a","line":428,"range":{"start_line":426,"start_character":12,"end_line":428,"end_character":67},"updated":"2026-09-19 08:27:56.000000000","message":"same comments as in cinder/volume/drivers/netapp/dataontap/block_base.py","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":423,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":424,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":425,"context_line":"            # Create the snapshot"},{"line_number":426,"context_line":"            snapshot_name \u003d na_utils.CACHE_SNAPSHOT_NAME"},{"line_number":427,"context_line":"            volume_name \u003d src_vref[\u0027name\u0027]"},{"line_number":428,"context_line":"            self.client.create_snapshot(volume_name, snapshot_name)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            # Create the volume from snapshot"},{"line_number":431,"context_line":"            source \u003d {\u0027name\u0027: snapshot_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"841764f4_ad74df14","line":428,"range":{"start_line":426,"start_character":12,"end_line":428,"end_character":67},"in_reply_to":"5f9296d4_7830d03a","updated":"2026-09-23 19:29:52.000000000","message":"Responded to comment in cinder/volume/drivers/netapp/dataontap/block_base.py","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"}],"cinder/volume/drivers/netapp/options.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":320,"context_line":"                    \u0027ONTAP. Conversely, setting a higher value means the \u0027"},{"line_number":321,"context_line":"                    \u0027performance utilization data may be slightly outdated \u0027"},{"line_number":322,"context_line":"                    \u0027but reduces the load on ONTAP.\u0027),"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    cfg.IntOpt(\u0027netapp_lun_copy_timeout\u0027,"},{"line_number":325,"context_line":"               min\u003d60,"},{"line_number":326,"context_line":"               default\u003d300,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5e87bdc6_352f0215","line":323,"updated":"2026-09-19 08:27:56.000000000","message":"unrelated change","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":320,"context_line":"                    \u0027ONTAP. Conversely, setting a higher value means the \u0027"},{"line_number":321,"context_line":"                    \u0027performance utilization data may be slightly outdated \u0027"},{"line_number":322,"context_line":"                    \u0027but reduces the load on ONTAP.\u0027),"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    cfg.IntOpt(\u0027netapp_lun_copy_timeout\u0027,"},{"line_number":325,"context_line":"               min\u003d60,"},{"line_number":326,"context_line":"               default\u003d300,"}],"source_content_type":"text/x-python","patch_set":30,"id":"cdf8a2c7_888c515b","line":323,"in_reply_to":"5e87bdc6_352f0215","updated":"2026-09-23 19:29:52.000000000","message":"Done","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                    \u0027ONTAP. Conversely, setting a higher value means the \u0027"},{"line_number":321,"context_line":"                    \u0027performance utilization data may be slightly outdated \u0027"},{"line_number":322,"context_line":"                    \u0027but reduces the load on ONTAP.\u0027),"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    cfg.IntOpt(\u0027netapp_lun_copy_timeout\u0027,"},{"line_number":325,"context_line":"               min\u003d60,"},{"line_number":326,"context_line":"               default\u003d300,"}],"source_content_type":"text/x-python","patch_set":30,"id":"98c356bc_86698361","line":323,"in_reply_to":"cdf8a2c7_888c515b","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":328,"context_line":"                    \u0027a LUN copy operation to complete during cross-pool \u0027"},{"line_number":329,"context_line":"                    \u0027cloning. The default value of 300 seconds is \u0027"},{"line_number":330,"context_line":"                    \u0027sufficient for most LUN copy operations.\u0027),"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    cfg.IntOpt(\u0027netapp_clone_split_timeout\u0027,"},{"line_number":333,"context_line":"               min\u003d0,"},{"line_number":334,"context_line":"               default\u003d600,"}],"source_content_type":"text/x-python","patch_set":30,"id":"d5964350_66da1e76","line":331,"updated":"2026-09-19 08:27:56.000000000","message":"other config options don\u0027t have any spacing so I would prefer using the same format i.e. remove empty line on L#331","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                    \u0027a LUN copy operation to complete during cross-pool \u0027"},{"line_number":329,"context_line":"                    \u0027cloning. The default value of 300 seconds is \u0027"},{"line_number":330,"context_line":"                    \u0027sufficient for most LUN copy operations.\u0027),"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    cfg.IntOpt(\u0027netapp_clone_split_timeout\u0027,"},{"line_number":333,"context_line":"               min\u003d0,"},{"line_number":334,"context_line":"               default\u003d600,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1c569796_6e3ff28b","line":331,"in_reply_to":"d575295d_35c12565","updated":"2026-09-24 19:01:40.000000000","message":"Marked as resolved.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":328,"context_line":"                    \u0027a LUN copy operation to complete during cross-pool \u0027"},{"line_number":329,"context_line":"                    \u0027cloning. The default value of 300 seconds is \u0027"},{"line_number":330,"context_line":"                    \u0027sufficient for most LUN copy operations.\u0027),"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    cfg.IntOpt(\u0027netapp_clone_split_timeout\u0027,"},{"line_number":333,"context_line":"               min\u003d0,"},{"line_number":334,"context_line":"               default\u003d600,"}],"source_content_type":"text/x-python","patch_set":30,"id":"d575295d_35c12565","line":331,"in_reply_to":"d5964350_66da1e76","updated":"2026-09-23 19:29:52.000000000","message":"Done","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"}],"releasenotes/notes/asar2-snapshot-and-cache-acceleration-support-68f74f24c89ee6c5.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a4c314e7fc6b95990a267da1b5cdf7783568e8ca","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    to create, delete, and restore snapshots, as well as to create"},{"line_number":7,"context_line":"    clone and volumes from snapshots."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The following features are supported by the ASAr2 driver:"},{"line_number":10,"context_line":"    1. Snapshot Creation."},{"line_number":11,"context_line":"    2. Snapshot Deletion."},{"line_number":12,"context_line":"    3. Snapshot Revert."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"f76b3d03_3c750cc0","line":9,"updated":"2026-05-13 14:31:21.000000000","message":"Need a blank line after line 9 or else sphinx doesn\u0027t turn lines 10-17 into a list:\nhttps://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_024/openstack/024a1c642be84775afdab166c80ceda6/docs/unreleased.html#new-features","commit_id":"53a2bb52976973f0bae8f788158321723d709d96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"8853a914a41a3362c7de1a01eed00e7f81fa4c4d","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    to create, delete, and restore snapshots, as well as to create"},{"line_number":7,"context_line":"    clone and volumes from snapshots."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The following features are supported by the ASAr2 driver:"},{"line_number":10,"context_line":"    1. Snapshot Creation."},{"line_number":11,"context_line":"    2. Snapshot Deletion."},{"line_number":12,"context_line":"    3. Snapshot Revert."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"8b5eed20_523ca38c","line":9,"in_reply_to":"9febe416_666f8ce3","updated":"2026-05-15 10:09:31.000000000","message":"Issue is fixed now","commit_id":"53a2bb52976973f0bae8f788158321723d709d96"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4296632bc5c525c96e6f94666516648b758e5c8c","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    to create, delete, and restore snapshots, as well as to create"},{"line_number":7,"context_line":"    clone and volumes from snapshots."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The following features are supported by the ASAr2 driver:"},{"line_number":10,"context_line":"    1. Snapshot Creation."},{"line_number":11,"context_line":"    2. Snapshot Deletion."},{"line_number":12,"context_line":"    3. Snapshot Revert."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9febe416_666f8ce3","line":9,"in_reply_to":"f76b3d03_3c750cc0","updated":"2026-05-15 10:08:41.000000000","message":"Thanks for pointing this, fix the issue.","commit_id":"53a2bb52976973f0bae8f788158321723d709d96"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"801c9f69f1f6c79c0622b6520ba1c846d1165bd1","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    2. Snapshot Deletion."},{"line_number":13,"context_line":"    3. Snapshot Revert."},{"line_number":14,"context_line":"    4. Create Volume from Snapshot."},{"line_number":15,"context_line":"    5. Create Clone from Snapshot."},{"line_number":16,"context_line":"    6. Create Volume from Image."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":30,"id":"6ae99c40_04e6f552","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":34},"updated":"2026-09-19 08:27:56.000000000","message":"this doesn\u0027t look like the right operation for operators.\nshould this be,\n\n    create clone from volume\n\n(that uses using snapshot interim for the cloning)","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"533c06a03dea3b7e2c26d12dc3e21f7f4ef5d587","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    2. Snapshot Deletion."},{"line_number":13,"context_line":"    3. Snapshot Revert."},{"line_number":14,"context_line":"    4. Create Volume from Snapshot."},{"line_number":15,"context_line":"    5. Create Clone from Snapshot."},{"line_number":16,"context_line":"    6. Create Volume from Image."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":30,"id":"e4fa49f1_dc49eeb1","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":34},"in_reply_to":"6ae99c40_04e6f552","updated":"2026-09-23 19:29:52.000000000","message":"We use a snapshot to create a clone volume when a user creates a VM from a bootable image. Specifically, we use the cache volume and clone it to create the VM’s bootable volume. For this reason, I added “Create Clone from Snapshot.” If you think this is not correct, I can remove it.","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4d6016543fa20c5eabd6ea6f073988378226bbf7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    2. Snapshot Deletion."},{"line_number":13,"context_line":"    3. Snapshot Revert."},{"line_number":14,"context_line":"    4. Create Volume from Snapshot."},{"line_number":15,"context_line":"    5. Create Clone from Snapshot."},{"line_number":16,"context_line":"    6. Create Volume from Image."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":30,"id":"41bbdb6d_dc53a7ed","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":34},"in_reply_to":"e1aa57c3_b3e6f983","updated":"2026-09-24 19:01:40.000000000","message":"Done","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b88a822f0c2ab9a398028978842e7dcaab5ea67b","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    2. Snapshot Deletion."},{"line_number":13,"context_line":"    3. Snapshot Revert."},{"line_number":14,"context_line":"    4. Create Volume from Snapshot."},{"line_number":15,"context_line":"    5. Create Clone from Snapshot."},{"line_number":16,"context_line":"    6. Create Volume from Image."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":30,"id":"e1aa57c3_b3e6f983","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":34},"in_reply_to":"e4fa49f1_dc49eeb1","updated":"2026-09-24 06:38:25.000000000","message":"In releasenotes, we only mention the user facing changes. If a user creates a volume by cloning another volume, they are not interested in the interim strategy (a cache snapshot here) used to create the destination volume, also the snapshot is not user visible so it doesn\u0027t make much sense for operators to say creating clone from snapshot.\nThe valid operations in openstack are,\ncreating volume from snapshot (mentioned in point 4)\ncreating volume from source volume (this operation)","commit_id":"e52b6f118e110382a87bb03e0f937064e4e907e2"}]}
