)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"9af0f258d089fa124cb23169f4566f237cbd31da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d5018b7c_38303286","updated":"2026-06-04 04:18:59.000000000","message":"@anoop.shukla@netapp.com - updated comments. Pls check.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"591368495cc5f7b7cd5c8a36d750b1f01c0a6db6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ac6304d6_d6842ff2","updated":"2026-07-10 15:43:56.000000000","message":"Code looks good to me.\n\nI have one question based on the behavior in querying the value that I\u0027d like confirmation for, but otherwise I can +2 this.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"00eaab9e0084f5c6fd27a7660ab7d92750a33144","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b17ce583_46985f25","updated":"2026-06-02 10:26:26.000000000","message":"Hi, opening for internal review.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fff80962faa73209b1e521ace902cebf2e3a62f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fbac13fb_8265ca81","updated":"2026-06-09 05:45:21.000000000","message":"LGTM","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"26b5235fc636a73fd4e10ba07bff6157f2b54b45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0561307d_c6485c51","updated":"2026-06-11 10:42:05.000000000","message":"Opening for core review.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"09e2b65585eb53688ca930057ed58d0965dab07b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9cf341fd_3499b71b","updated":"2026-06-02 13:07:31.000000000","message":"Please take a look at the comments.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ab1854df9439b0a4b2633abeca19901c439c8f80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1353de6f_6fd547a8","updated":"2026-08-18 10:13:18.000000000","message":"Re-reviewed with one open comment. Please take a look.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"818ed84de7f525d9b81706a4f7fffaf4e0e5a2be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0182956b_a065b142","updated":"2026-06-02 10:27:00.000000000","message":"Run-NetApp CI","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"496961b2336b3d50776a6fbc9b249ef0274ca6f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f740a09b_101f2540","in_reply_to":"097dc393_268cbe45","updated":"2026-08-25 15:20:34.000000000","message":"I\u0027m good with all the responses @anthony.galica@hitachivantara.com","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"eae16006_59370dc1","in_reply_to":"ac6304d6_d6842ff2","updated":"2026-08-24 11:20:08.000000000","message":"@agalica can you please check the comments ?","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"92f80bb6717aaa77fe3a9f4a99d0f033f83ad0bd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"097dc393_268cbe45","in_reply_to":"eae16006_59370dc1","updated":"2026-08-24 22:55:09.000000000","message":"I\u0027d like to see responses to Simon\u0027s other review points and I will re-review at that time - feel free to ping me again at that point.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d810a0a9efd45cb71e58890a72fd81ff4bb58a1e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f18d5b38_324318a7","updated":"2026-08-21 18:05:27.000000000","message":"Inline comments.\nAlso, if you are adding A-A you should also update the support matrix to reflect this.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"4cd077b88aed5be007978dcddce2fd0bb917a5ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bf476926_cb134c1c","updated":"2026-08-21 15:45:26.000000000","message":"Looks good to me.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"261f685f74ee75fd8531371dbcb3e3a8c1a37cdb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a805583b_b5f92386","updated":"2026-08-21 15:42:47.000000000","message":"Thanks for clarifying. LGTM","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"24a96aae_86a68bdb","updated":"2026-08-24 11:20:08.000000000","message":"Fixed comments.","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"670bc8c5ea3ee853da3eec87fcde74ec3be221a7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7db2dd33_7f1ad4a0","updated":"2026-08-24 14:18:32.000000000","message":"It would be a good idea to add some text as a body in the commit message. Maybe describe what `netapp_san_active_active` means, why an SVM-level property is applied per-pool, the 9.19.1 gate, and that the ZAPI client now opens a REST connection.","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"08687c89f556c852913e62510329cc8d14c05e38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"23b121e4_3cb80555","in_reply_to":"7db2dd33_7f1ad4a0","updated":"2026-08-25 15:09:33.000000000","message":"Done","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8a6d9cc7a89563b08138695ef6e89cddeecbce28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6e4eb2f0_adb8d23c","updated":"2026-08-26 08:15:57.000000000","message":"@anthony.galica@hitachivantara.com @rosmaita.fossdev@gmail.com requesting approval to merge the fix.","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"433f6a4c68824761f05812cfedd361871ee5c572","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c917f758_5c773eae","updated":"2026-08-25 15:10:20.000000000","message":"@simon@everpuredata.com can you please review the changes ? Thanks.","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"227f4348cc5c66de590699cf38babf569420b5a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"03821831_08fbbda5","updated":"2026-08-26 23:00:36.000000000","message":"LGTM","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"9f9242c8a831fd89cf7905b12cca136ada272bef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0d23d34b_c82cb8c2","updated":"2026-08-26 14:01:02.000000000","message":"LGTM","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"dadf9615eaf6a00ddeb663044a97cce05d223e0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9728cc7e_fd495f15","updated":"2026-08-26 12:18:58.000000000","message":"LGTM","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d8fe1757ebc681174d16b059bc5bab45a769e7e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"548b6b7c_bb8f6bdb","updated":"2026-08-26 11:54:16.000000000","message":"LGTM ..!","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"496961b2336b3d50776a6fbc9b249ef0274ca6f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"aab651af_fd72b181","updated":"2026-08-25 15:20:34.000000000","message":"Looking good","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"1035cf2c08d2cab2baf8363baeae6419a187cbaf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4a0b37b2_2284b72e","updated":"2026-08-26 16:37:42.000000000","message":"Looks good to me, thanks for working on this Sanketh!!","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"f131c2a96010d6ab0c1438ce5578b22dcbcb71dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1d3a9536_12452be6","updated":"2026-08-31 09:45:42.000000000","message":"Run-NetApp CI","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"3f067fd484550215567f3f4591099f11504d58f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"57eccfa3_2980ad7e","updated":"2026-08-31 13:49:07.000000000","message":"We are advertising this capability to NFS as well and A/A is not supported for NFS.","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"a2a777f28319a093b5687296a7bda292efb94427","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c308578e_279b1e64","updated":"2026-08-26 05:41:10.000000000","message":"recheck","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"54ebb0d782f51184c4a6922774eec8b9395d20b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4c78aff2_b995ef6d","updated":"2026-09-02 10:49:07.000000000","message":"@anthony.galica@hitachivantara.com @jayaanand.borra@netapp.com @saikumar1016@gmail.com @rosmaita.fossdev@gmail.com - requesting approval again.","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"9a46c201a2acba64e50ddd2a828cd77851cef876","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7826b2fc_cb6a5585","updated":"2026-09-02 10:47:28.000000000","message":"@anthony.galica@hitachivantara.com, @jayaanand.borra@netapp.com, @rosmaita.fossdev@gmail.com, @saikumar1016@gmail.com - requesting approval again.","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"97984574d2792a3e17c73115878ffb07daf0984c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"79f6c9c3_ec99d5e3","updated":"2026-09-28 14:49:52.000000000","message":"Hi, @rosmaita.fossdev@gmail.com, @simon@everpuredata.com, @rajatdhasmana@gmail.com, requesting an addititional +2 to get this PR merged. Its pending from a long time.","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"f32f68ef30581a5c297407e13165d679c83f502c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d2899de7_cc231dfa","updated":"2026-09-09 14:43:28.000000000","message":"LGTM","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"81fafb3d9e5f2e02978bd6b7c57e188b9ebe9a6a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e454f44c_554c1aeb","updated":"2026-10-02 14:22:07.000000000","message":"Looks good to me.","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"0c16826f40ec99064f657b182bc1cd105ffbbbf7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d3227760_e7d48b28","updated":"2026-09-09 05:58:26.000000000","message":"Returning my +2.  Update after Jay\u0027s comments looks good to me (thanks for catching this, Jay).","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"482116115bbb0b395c3b7d4facee40bf295faa4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"dec073a8_aac322c0","updated":"2026-09-02 15:47:40.000000000","message":"Run-NetApp CI","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"63b5c49ee8ac80709aeafceda87daf8916587fed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"76d89757_30d7f190","updated":"2026-09-02 11:19:43.000000000","message":"Thanks for making the changes. LGTM.","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"f38fea258af2d73f7d4fc265eefbacbdd0174abf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"e0bb713f_cf261b38","updated":"2026-10-03 07:03:06.000000000","message":"recheck","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"8974d3726c2b5e9d50a2d871ab3455c1852a92cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a54a6e16_158b35e0","updated":"2026-09-02 13:25:19.000000000","message":"recheck\ntempest.scenario.test_volume_backup_restore.TestVolumeBackupRestore.test_volume_backup_restore[compute,id-2ce5e55c-4085-43c1-98c6-582525334ad7,image,slow,volume] test intermittent failure","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":36179,"name":"Saikumar Pulluri","display_name":"Saikumar Pulluri","email":"saikumar1016@gmail.com","username":"pulluri"},"change_message_id":"a02e1ab3f9441616776a6afcb5d950ef9e415429","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"96a1a72b_9c081807","updated":"2026-10-03 09:42:40.000000000","message":"recheck \ntempest-slow-py3 failure","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"54ebb0d782f51184c4a6922774eec8b9395d20b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"59bb4d82_07091e6a","in_reply_to":"7826b2fc_cb6a5585","updated":"2026-09-02 10:49:07.000000000","message":"Done","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_cmode_rest.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"591368495cc5f7b7cd5c8a36d750b1f01c0a6db6","unresolved":true,"context_lines":[{"line_number":4928,"context_line":""},{"line_number":4929,"context_line":"        self.assertIsNone(result)"},{"line_number":4930,"context_line":""},{"line_number":4931,"context_line":"    def test_get_svm_san_multipathing_active_active(self):"},{"line_number":4932,"context_line":"        self.mock_object("},{"line_number":4933,"context_line":"            self.client, \u0027send_request\u0027,"},{"line_number":4934,"context_line":"            return_value\u003d{\u0027records\u0027: ["}],"source_content_type":"text/x-python","patch_set":1,"id":"ad5977d5_2985bdd1","line":4931,"updated":"2026-07-10 15:43:56.000000000","message":"You do not have to change this for me if you do not want to, but consider using DDT for some of the tests like this that all have similar structure.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"ffd38dd2bf6461d55a1b4b0241b818bc6c3bfe86","unresolved":false,"context_lines":[{"line_number":4928,"context_line":""},{"line_number":4929,"context_line":"        self.assertIsNone(result)"},{"line_number":4930,"context_line":""},{"line_number":4931,"context_line":"    def test_get_svm_san_multipathing_active_active(self):"},{"line_number":4932,"context_line":"        self.mock_object("},{"line_number":4933,"context_line":"            self.client, \u0027send_request\u0027,"},{"line_number":4934,"context_line":"            return_value\u003d{\u0027records\u0027: ["}],"source_content_type":"text/x-python","patch_set":1,"id":"c970d95d_a1019517","line":4931,"in_reply_to":"ad5977d5_2985bdd1","updated":"2026-08-19 04:37:55.000000000","message":"Acknowledged","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"}],"cinder/volume/drivers/netapp/dataontap/client/client_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":"591368495cc5f7b7cd5c8a36d750b1f01c0a6db6","unresolved":true,"context_lines":[{"line_number":2880,"context_line":"        if not hasattr(self, \u0027_rest_connection\u0027):"},{"line_number":2881,"context_line":"            zapi_cert_path \u003d getattr("},{"line_number":2882,"context_line":"                self.connection, \u0027_ssl_cert_path\u0027, None)"},{"line_number":2883,"context_line":"            # When the ZAPI connection has no explicit CA cert path it"},{"line_number":2884,"context_line":"            # silently disables SSL verification (unverified context)."},{"line_number":2885,"context_line":"            # Mirror that behaviour for the REST session by passing"},{"line_number":2886,"context_line":"            # False so that requests also skips certificate checks."}],"source_content_type":"text/x-python","patch_set":1,"id":"688f7972_ab017793","line":2883,"updated":"2026-07-10 15:43:56.000000000","message":"Not a topic for this specific patch (especially since it\u0027s just mirroring existing behavior), but I\u0027m guessing this will need to change (silent disabling of SSL verification) at some point given all the security talks we\u0027ve had in the meetings the last few weeks.\n\nSmall heads up.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"ffd38dd2bf6461d55a1b4b0241b818bc6c3bfe86","unresolved":true,"context_lines":[{"line_number":2880,"context_line":"        if not hasattr(self, \u0027_rest_connection\u0027):"},{"line_number":2881,"context_line":"            zapi_cert_path \u003d getattr("},{"line_number":2882,"context_line":"                self.connection, \u0027_ssl_cert_path\u0027, None)"},{"line_number":2883,"context_line":"            # When the ZAPI connection has no explicit CA cert path it"},{"line_number":2884,"context_line":"            # silently disables SSL verification (unverified context)."},{"line_number":2885,"context_line":"            # Mirror that behaviour for the REST session by passing"},{"line_number":2886,"context_line":"            # False so that requests also skips certificate checks."}],"source_content_type":"text/x-python","patch_set":1,"id":"a30166b1_9950680b","line":2883,"in_reply_to":"688f7972_ab017793","updated":"2026-08-19 04:37:55.000000000","message":"Yes you are right. As part of the security update we will be adding, the verify_certification flag will be default set to True.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"976c6c2ec4dcb9fae074a401f5fcdb26788b7c62","unresolved":false,"context_lines":[{"line_number":2880,"context_line":"        if not hasattr(self, \u0027_rest_connection\u0027):"},{"line_number":2881,"context_line":"            zapi_cert_path \u003d getattr("},{"line_number":2882,"context_line":"                self.connection, \u0027_ssl_cert_path\u0027, None)"},{"line_number":2883,"context_line":"            # When the ZAPI connection has no explicit CA cert path it"},{"line_number":2884,"context_line":"            # silently disables SSL verification (unverified context)."},{"line_number":2885,"context_line":"            # Mirror that behaviour for the REST session by passing"},{"line_number":2886,"context_line":"            # False so that requests also skips certificate checks."}],"source_content_type":"text/x-python","patch_set":1,"id":"a0917cd4_2fef1e59","line":2883,"in_reply_to":"a30166b1_9950680b","updated":"2026-08-21 08:53:10.000000000","message":"Done","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d810a0a9efd45cb71e58890a72fd81ff4bb58a1e","unresolved":true,"context_lines":[{"line_number":2875,"context_line":""},{"line_number":2876,"context_line":"        return provisioning_opts"},{"line_number":2877,"context_line":""},{"line_number":2878,"context_line":"    def _get_rest_connection(self):"},{"line_number":2879,"context_line":"        \"\"\"Lazily create a minimal REST connection for REST-only queries.\"\"\""},{"line_number":2880,"context_line":"        if not hasattr(self, \u0027_rest_connection\u0027):"},{"line_number":2881,"context_line":"            zapi_cert_path \u003d getattr("}],"source_content_type":"text/x-python","patch_set":2,"id":"fdaa34ce_b6e75789","line":2878,"updated":"2026-08-21 18:05:27.000000000","message":"This reaches into eleven private attributes of the ZAPI connection object — `_host`, `_protocol`, `_username`, `_password`, `_port`, `_private_key_file`, `_certificate_file`, `_ca_certificate_file`, `_ssl_cert_verify`, `_certificate_host_validation`, and `_ssl_cert_path`.\n\nAny rename in `NaServer` breaks this at runtime, and because the caller catches bare `Exception` and logs at debug, the failure would surface only as \"this backend isn\u0027t active-active\" — see my comment on `capabilities.py:350`. That\u0027s a silent, hard-to-diagnose combination.\n\n`dot_utils.get_client_for_backend` already constructs clients from the driver configuration. Is there a reason the REST connection can\u0027t be built from config rather than reverse-engineered from the ZAPI connection? If there is, it\u0027s worth a comment here recording it.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[{"line_number":2875,"context_line":""},{"line_number":2876,"context_line":"        return provisioning_opts"},{"line_number":2877,"context_line":""},{"line_number":2878,"context_line":"    def _get_rest_connection(self):"},{"line_number":2879,"context_line":"        \"\"\"Lazily create a minimal REST connection for REST-only queries.\"\"\""},{"line_number":2880,"context_line":"        if not hasattr(self, \u0027_rest_connection\u0027):"},{"line_number":2881,"context_line":"            zapi_cert_path \u003d getattr("}],"source_content_type":"text/x-python","patch_set":2,"id":"2fe902df_6e47b7f7","line":2878,"in_reply_to":"fdaa34ce_b6e75789","updated":"2026-08-24 11:20:08.000000000","message":"Done","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d810a0a9efd45cb71e58890a72fd81ff4bb58a1e","unresolved":true,"context_lines":[{"line_number":2886,"context_line":"            # False so that requests also skips certificate checks."},{"line_number":2887,"context_line":"            ssl_cert_path \u003d zapi_cert_path if ("},{"line_number":2888,"context_line":"                isinstance(zapi_cert_path, str)) else False"},{"line_number":2889,"context_line":"            self._rest_connection \u003d netapp_api.RestNaServer("},{"line_number":2890,"context_line":"                host\u003dself.connection._host,"},{"line_number":2891,"context_line":"                transport_type\u003dself.connection._protocol,"},{"line_number":2892,"context_line":"                ssl_cert_path\u003dssl_cert_path,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c527e8fa_01d053f9","line":2889,"updated":"2026-08-21 18:05:27.000000000","message":"The connection is memorised for the life of the process via the `hasattr` check and never invalidated, so rotated credentials leave a stale session until the service restarts. Probably acceptable, but worth a comment noting it\u0027s deliberate.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[{"line_number":2886,"context_line":"            # False so that requests also skips certificate checks."},{"line_number":2887,"context_line":"            ssl_cert_path \u003d zapi_cert_path if ("},{"line_number":2888,"context_line":"                isinstance(zapi_cert_path, str)) else False"},{"line_number":2889,"context_line":"            self._rest_connection \u003d netapp_api.RestNaServer("},{"line_number":2890,"context_line":"                host\u003dself.connection._host,"},{"line_number":2891,"context_line":"                transport_type\u003dself.connection._protocol,"},{"line_number":2892,"context_line":"                ssl_cert_path\u003dssl_cert_path,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c44b954d_e358b76c","line":2889,"in_reply_to":"c527e8fa_01d053f9","updated":"2026-08-24 11:20:08.000000000","message":"Yes if any credential change happens in conf file, expectation is to reinit cinder, which will take care of resetting the hasattr.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d810a0a9efd45cb71e58890a72fd81ff4bb58a1e","unresolved":true,"context_lines":[{"line_number":2922,"context_line":"            if records:"},{"line_number":2923,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":2924,"context_line":"        except Exception:"},{"line_number":2925,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":2926,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":2927,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"b02f04fd_62840dbd","line":2925,"updated":"2026-08-21 18:05:27.000000000","message":"Probbaly should be a `LOG.warning` given the other comments about failure paths","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[{"line_number":2922,"context_line":"            if records:"},{"line_number":2923,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":2924,"context_line":"        except Exception:"},{"line_number":2925,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":2926,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":2927,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ec54376_34fdbe80","line":2925,"in_reply_to":"b02f04fd_62840dbd","updated":"2026-08-24 11:20:08.000000000","message":"Done","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"591368495cc5f7b7cd5c8a36d750b1f01c0a6db6","unresolved":true,"context_lines":[{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"da304c3d_3358499a","line":3322,"updated":"2026-07-10 15:43:56.000000000","message":"Based on this being a capability-type thing, I assume that if this fails with an exception it won\u0027t cause direct harm (and/or will be queried again later).\n\nCan you confirm this?  I ask because if the result is highly important, swallowing the exception may not be the best way to go about this.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"46753df5_da71b050","line":3322,"in_reply_to":"5ced2573_e19a4323","updated":"2026-08-24 11:20:08.000000000","message":"Have fixed this as part of another comment.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"ffd38dd2bf6461d55a1b4b0241b818bc6c3bfe86","unresolved":true,"context_lines":[{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ced2573_e19a4323","line":3322,"in_reply_to":"da304c3d_3358499a","updated":"2026-08-19 04:37:55.000000000","message":"We donot want to fail the SSC capabilties query. Hence any failure we are not setting the value. I will discuss on this further internally before making the change.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d810a0a9efd45cb71e58890a72fd81ff4bb58a1e","unresolved":true,"context_lines":[{"line_number":3318,"context_line":"            records \u003d response.get(\u0027records\u0027, [])"},{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"f932f6ec_96b83c19","line":3321,"updated":"2026-08-21 18:05:27.000000000","message":"bare `Exception` swallows everything - a typo or `AttributeError` would flag as a \"backend not active-active\".\nUsing `NaApiError` might be better","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"12d5f7122aa331c867acde1f9aa4541aba89c01f","unresolved":false,"context_lines":[{"line_number":3318,"context_line":"            records \u003d response.get(\u0027records\u0027, [])"},{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"65cf9dc8_6311def7","line":3321,"in_reply_to":"45c6058b_2970b59d","updated":"2026-08-26 12:59:46.000000000","message":"I have narrowed down the exception to NaApiError, which would be better here as it REST call failure here is due to an ontap failure.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"dadf9615eaf6a00ddeb663044a97cce05d223e0a","unresolved":true,"context_lines":[{"line_number":3318,"context_line":"            records \u003d response.get(\u0027records\u0027, [])"},{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"45c6058b_2970b59d","line":3321,"in_reply_to":"f932f6ec_96b83c19","updated":"2026-08-26 12:18:58.000000000","message":"An exception here would mean the REST API did not go through as that is the only error that would be thrown via send_request. So even though the exception caught is broad, we expect that would end up failing the query to get svm attribute and we would need to default to None.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[{"line_number":3318,"context_line":"            records \u003d response.get(\u0027records\u0027, [])"},{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"8727affc_3f2c0699","line":3321,"in_reply_to":"f932f6ec_96b83c19","updated":"2026-08-24 11:20:08.000000000","message":"Done","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"670bc8c5ea3ee853da3eec87fcde74ec3be221a7","unresolved":true,"context_lines":[{"line_number":3318,"context_line":"            records \u003d response.get(\u0027records\u0027, [])"},{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":3,"id":"5593b6ed_5198df42","line":3321,"updated":"2026-08-24 14:18:32.000000000","message":"The change of this bare Exception was marked as Done, but it hasn\u0027t changed","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"eb533b87c62c530458293d584ae497e25d0be51d","unresolved":false,"context_lines":[{"line_number":3318,"context_line":"            records \u003d response.get(\u0027records\u0027, [])"},{"line_number":3319,"context_line":"            if records:"},{"line_number":3320,"context_line":"                return records[0].get(\u0027san_multipathing\u0027)"},{"line_number":3321,"context_line":"        except Exception:"},{"line_number":3322,"context_line":"            LOG.debug(\u0027Failed to query san_multipathing via REST. \u0027"},{"line_number":3323,"context_line":"                      \u0027Defaulting to None.\u0027)"},{"line_number":3324,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":3,"id":"8b93115d_10739384","line":3321,"in_reply_to":"5593b6ed_5198df42","updated":"2026-08-25 15:09:08.000000000","message":"Done","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"}],"cinder/volume/drivers/netapp/dataontap/utils/capabilities.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"09e2b65585eb53688ca930057ed58d0965dab07b","unresolved":true,"context_lines":[{"line_number":95,"context_line":"        ssc \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        # SVM-level property -- query once, apply to all pools"},{"line_number":98,"context_line":"        san_mp_info \u003d self._get_ssc_san_multipathing_info()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        for flexvol_name, flexvol_info in flexvol_map.items():"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8d505851_2108cd9d","line":98,"updated":"2026-06-02 13:07:31.000000000","message":"Shouldnt there be a check for ASAR2?","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fff80962faa73209b1e521ace902cebf2e3a62f6","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        ssc \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        # SVM-level property -- query once, apply to all pools"},{"line_number":98,"context_line":"        san_mp_info \u003d self._get_ssc_san_multipathing_info()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        for flexvol_name, flexvol_info in flexvol_map.items():"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"58f547e4_c7f2d913","line":98,"in_reply_to":"5242acd9_a0acd664","updated":"2026-06-09 05:45:21.000000000","message":"okay good.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"dfb0297a31a451a485ec2c480d0ea00bf8073364","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        ssc \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        # SVM-level property -- query once, apply to all pools"},{"line_number":98,"context_line":"        san_mp_info \u003d self._get_ssc_san_multipathing_info()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        for flexvol_name, flexvol_info in flexvol_map.items():"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5242acd9_a0acd664","line":98,"in_reply_to":"5b5c9349_31b5c486","updated":"2026-06-04 04:19:28.000000000","message":"Acknowledged","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"9af0f258d089fa124cb23169f4566f237cbd31da","unresolved":true,"context_lines":[{"line_number":95,"context_line":"        ssc \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        # SVM-level property -- query once, apply to all pools"},{"line_number":98,"context_line":"        san_mp_info \u003d self._get_ssc_san_multipathing_info()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        for flexvol_name, flexvol_info in flexvol_map.items():"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5b5c9349_31b5c486","line":98,"in_reply_to":"8d505851_2108cd9d","updated":"2026-06-04 04:18:59.000000000","message":"Its not required as this function is not called for ASAr2,\n\ndef _update_ssc(self):\n        \"\"\"Refresh the storage service catalog with the latest set of pools.\"\"\"\n        if self.configuration.netapp_disaggregated_platform:\n            self.ssc_library.update_ssc_asa(self._get_cluster_to_pool_map())\n        else:\n            self.ssc_library.update_ssc(self._get_flexvol_to_pool_map())","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"09e2b65585eb53688ca930057ed58d0965dab07b","unresolved":true,"context_lines":[{"line_number":121,"context_line":"            ssc_volume.update(self._get_ssc_qos_min_info(node_name))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # SVM-level SAN multipathing capability"},{"line_number":124,"context_line":"            ssc_volume.update(san_mp_info)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            if self.protocol.casefold() !\u003d \u0027nfs\u0027:"},{"line_number":127,"context_line":"                ssc_volume.update"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8e95a1_960f7693","line":124,"updated":"2026-06-02 13:07:31.000000000","message":"Have we tested with ASAr2 platform? Does this work on ASAr2 with the same API call?","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"dfb0297a31a451a485ec2c480d0ea00bf8073364","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            ssc_volume.update(self._get_ssc_qos_min_info(node_name))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # SVM-level SAN multipathing capability"},{"line_number":124,"context_line":"            ssc_volume.update(san_mp_info)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            if self.protocol.casefold() !\u003d \u0027nfs\u0027:"},{"line_number":127,"context_line":"                ssc_volume.update"}],"source_content_type":"text/x-python","patch_set":1,"id":"1165ea5c_0af28d48","line":124,"in_reply_to":"6d595fec_d206f045","updated":"2026-06-04 04:19:28.000000000","message":"Acknowledged","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"9af0f258d089fa124cb23169f4566f237cbd31da","unresolved":true,"context_lines":[{"line_number":121,"context_line":"            ssc_volume.update(self._get_ssc_qos_min_info(node_name))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # SVM-level SAN multipathing capability"},{"line_number":124,"context_line":"            ssc_volume.update(san_mp_info)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            if self.protocol.casefold() !\u003d \u0027nfs\u0027:"},{"line_number":127,"context_line":"                ssc_volume.update"}],"source_content_type":"text/x-python","patch_set":1,"id":"6d595fec_d206f045","line":124,"in_reply_to":"7a8e95a1_960f7693","updated":"2026-06-04 04:18:59.000000000","message":"Same comment as above.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"09e2b65585eb53688ca930057ed58d0965dab07b","unresolved":true,"context_lines":[{"line_number":342,"context_line":"            return {}"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        ontap_version_str \u003d \".\".join(map(str, ontap_version))"},{"line_number":345,"context_line":"        if (version.parse(ontap_version_str) \u003c"},{"line_number":346,"context_line":"                version.parse(MINIMUM_SAN_AA_VERSION)):"},{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"}],"source_content_type":"text/x-python","patch_set":1,"id":"aac75ba4_232f3e80","line":346,"range":{"start_line":345,"start_character":8,"end_line":346,"end_character":55},"updated":"2026-06-02 13:07:31.000000000","message":"This check should be done in the caller method? The method call is unnecessary for older versions of ONTAP.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"fff80962faa73209b1e521ace902cebf2e3a62f6","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            return {}"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        ontap_version_str \u003d \".\".join(map(str, ontap_version))"},{"line_number":345,"context_line":"        if (version.parse(ontap_version_str) \u003c"},{"line_number":346,"context_line":"                version.parse(MINIMUM_SAN_AA_VERSION)):"},{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"}],"source_content_type":"text/x-python","patch_set":1,"id":"6f89c463_431e732a","line":346,"range":{"start_line":345,"start_character":8,"end_line":346,"end_character":55},"in_reply_to":"6a180440_d2a0a4e1","updated":"2026-06-09 05:45:21.000000000","message":"Okay..since we are using cached\u003dtrue, we can keep it here.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"9af0f258d089fa124cb23169f4566f237cbd31da","unresolved":true,"context_lines":[{"line_number":342,"context_line":"            return {}"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        ontap_version_str \u003d \".\".join(map(str, ontap_version))"},{"line_number":345,"context_line":"        if (version.parse(ontap_version_str) \u003c"},{"line_number":346,"context_line":"                version.parse(MINIMUM_SAN_AA_VERSION)):"},{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"}],"source_content_type":"text/x-python","patch_set":1,"id":"f0864b29_7d10d9a4","line":346,"range":{"start_line":345,"start_character":8,"end_line":346,"end_character":55},"in_reply_to":"aac75ba4_232f3e80","updated":"2026-06-04 04:18:59.000000000","message":"The check here keeps the code clean, with only the function call bieng done in update_ssc and the internal version validation done in the function itself.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"dfb0297a31a451a485ec2c480d0ea00bf8073364","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            return {}"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        ontap_version_str \u003d \".\".join(map(str, ontap_version))"},{"line_number":345,"context_line":"        if (version.parse(ontap_version_str) \u003c"},{"line_number":346,"context_line":"                version.parse(MINIMUM_SAN_AA_VERSION)):"},{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a180440_d2a0a4e1","line":346,"range":{"start_line":345,"start_character":8,"end_line":346,"end_character":55},"in_reply_to":"f0864b29_7d10d9a4","updated":"2026-06-04 04:19:28.000000000","message":"Acknowledged","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ab1854df9439b0a4b2633abeca19901c439c8f80","unresolved":true,"context_lines":[{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"},{"line_number":350,"context_line":"        is_active_active \u003d (san_multipathing \u003d\u003d \u0027active_active\u0027)"},{"line_number":351,"context_line":"        return {"},{"line_number":352,"context_line":"            \u0027netapp_san_active_active\u0027: str(is_active_active).lower(),"},{"line_number":353,"context_line":"        }"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def get_matching_flexvols_for_extra_specs(self, extra_specs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffdeb789_38b20ea3","line":352,"updated":"2026-08-18 10:13:18.000000000","message":"Why do we need .lower? This will convert it to true or false instead of True or False. Ideally we should store the python bool True/False in SSC?","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"976c6c2ec4dcb9fae074a401f5fcdb26788b7c62","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"},{"line_number":350,"context_line":"        is_active_active \u003d (san_multipathing \u003d\u003d \u0027active_active\u0027)"},{"line_number":351,"context_line":"        return {"},{"line_number":352,"context_line":"            \u0027netapp_san_active_active\u0027: str(is_active_active).lower(),"},{"line_number":353,"context_line":"        }"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def get_matching_flexvols_for_extra_specs(self, extra_specs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"85d7cfee_7290d129","line":352,"in_reply_to":"60163056_8dd5e594","updated":"2026-08-21 08:53:10.000000000","message":"Done","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"ffd38dd2bf6461d55a1b4b0241b818bc6c3bfe86","unresolved":true,"context_lines":[{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"},{"line_number":350,"context_line":"        is_active_active \u003d (san_multipathing \u003d\u003d \u0027active_active\u0027)"},{"line_number":351,"context_line":"        return {"},{"line_number":352,"context_line":"            \u0027netapp_san_active_active\u0027: str(is_active_active).lower(),"},{"line_number":353,"context_line":"        }"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def get_matching_flexvols_for_extra_specs(self, extra_specs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"60163056_8dd5e594","line":352,"in_reply_to":"ffdeb789_38b20ea3","updated":"2026-08-19 04:37:55.000000000","message":"Cross checked other instances. We are intentionally converting to lower case and passing it to core. Core is handling it correctly by showing it as True or False.","commit_id":"5f632a06f51cc678011163a281b3ae671df8276a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d810a0a9efd45cb71e58890a72fd81ff4bb58a1e","unresolved":true,"context_lines":[{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"},{"line_number":350,"context_line":"        is_active_active \u003d (san_multipathing \u003d\u003d \u0027active_active\u0027)"},{"line_number":351,"context_line":"        return {"},{"line_number":352,"context_line":"            \u0027netapp_san_active_active\u0027: str(is_active_active).lower(),"},{"line_number":353,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"89ee7d92_9d9a2a62","line":350,"updated":"2026-08-21 18:05:27.000000000","message":"This is where a failed query becomes a positive claim that the SVM is not active-active.\n\n`get_svm_san_multipathing()` returns `None` on any failure, so `is_active_active` is `False` and line 352 advertises `\u0027false\u0027`. That makes four different situations indistinguishable:\n\n* REST endpoint unreachable or firewalled\n* credentials lack the SVM read privilege\n* transient 5xx from ONTAP\n* SVM genuinely is `local_active`\n\nOn a real active-active backend, one failed SSC refresh makes the scheduler steer A/A-requiring volumes _away_ from a backend that supports it — and since SSC is cached and refreshed periodically, the wrong value persists until the next successful refresh.\n\nThe version gate above already does the right thing by returning `{}` (\"so that the key is never advertised on clusters that do not support it\"). Suggest the same here:\n\n```\nsan_multipathing \u003d self.zapi_client.get_svm_san_multipathing()\nif san_multipathing is None:\n    return {}\nreturn {\u0027netapp_san_active_active\u0027:\n        str(san_multipathing \u003d\u003d \u0027active_active\u0027).lower()}\n```\n\nThat keeps the SSC query non-fatal — which is the right goal — while making \"unknown\" absent rather than false.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"},{"line_number":350,"context_line":"        is_active_active \u003d (san_multipathing \u003d\u003d \u0027active_active\u0027)"},{"line_number":351,"context_line":"        return {"},{"line_number":352,"context_line":"            \u0027netapp_san_active_active\u0027: str(is_active_active).lower(),"},{"line_number":353,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"d8417b03_e286f132","line":350,"in_reply_to":"89ee7d92_9d9a2a62","updated":"2026-08-24 11:20:08.000000000","message":"Done","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"670bc8c5ea3ee853da3eec87fcde74ec3be221a7","unresolved":true,"context_lines":[{"line_number":346,"context_line":"                version.parse(MINIMUM_SAN_AA_VERSION)):"},{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"},{"line_number":350,"context_line":"        if san_multipathing is None:"},{"line_number":351,"context_line":"            return {}"},{"line_number":352,"context_line":"        is_active_active \u003d (san_multipathing \u003d\u003d \u0027active_active\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"79e73708_9f24061d","line":349,"updated":"2026-08-24 14:18:32.000000000","message":"I\u0027d add a guard in here as well:\n```\ntry:\n    san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()\nexcept Exception:\n    LOG.warning(\u0027Could not determine SVM san_multipathing; \u0027\n                \u0027omitting netapp_san_active_active.\u0027, exc_info\u003dTrue)\n    return {}\nif san_multipathing is None:\n    return {}\n```","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"eb533b87c62c530458293d584ae497e25d0be51d","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                version.parse(MINIMUM_SAN_AA_VERSION)):"},{"line_number":347,"context_line":"            return {}"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        san_multipathing \u003d self.zapi_client.get_svm_san_multipathing()"},{"line_number":350,"context_line":"        if san_multipathing is None:"},{"line_number":351,"context_line":"            return {}"},{"line_number":352,"context_line":"        is_active_active \u003d (san_multipathing \u003d\u003d \u0027active_active\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a1469bf_43071fc5","line":349,"in_reply_to":"79e73708_9f24061d","updated":"2026-08-25 15:09:08.000000000","message":"I would like to avoid swallowing generic Exception here. Cross checked at other capabilities function where were are allowing the unknown Exception to occur.","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"0e84372d0618ea03081fcfe6db0fe1bb3d660533","unresolved":true,"context_lines":[{"line_number":121,"context_line":"            ssc_volume.update(self._get_ssc_qos_min_info(node_name))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # SVM-level SAN multipathing capability"},{"line_number":124,"context_line":"            ssc_volume.update(san_mp_info)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            if self.protocol.casefold() !\u003d \u0027nfs\u0027:"},{"line_number":127,"context_line":"                ssc_volume.update"}],"source_content_type":"text/x-python","patch_set":4,"id":"8e0b99cd_f6eb9ff1","line":124,"updated":"2026-08-31 13:29:03.000000000","message":"update_ssc() is shared with NFS and NVMe. Hope This feature works with NFS and NVMe.","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"a987c7fd52a5783952c825af4a09d2560c482235","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            ssc_volume.update(self._get_ssc_qos_min_info(node_name))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # SVM-level SAN multipathing capability"},{"line_number":124,"context_line":"            ssc_volume.update(san_mp_info)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            if self.protocol.casefold() !\u003d \u0027nfs\u0027:"},{"line_number":127,"context_line":"                ssc_volume.update"}],"source_content_type":"text/x-python","patch_set":4,"id":"d329aaa3_8b3637ad","line":124,"in_reply_to":"8e0b99cd_f6eb9ff1","updated":"2026-09-02 10:46:01.000000000","message":"Have validated now on nfs,iscsi and nvme. Works as expected now. The flag will only show for san protocols.","commit_id":"4026c010e763dbe803d046ad170a7cd02900423a"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"f32f68ef30581a5c297407e13165d679c83f502c","unresolved":true,"context_lines":[{"line_number":95,"context_line":"        ssc \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        san_mp_info \u003d {}"},{"line_number":98,"context_line":"        # SVM-level property -- query once, apply to all pools"},{"line_number":99,"context_line":"        if self.protocol.casefold() !\u003d \u0027nfs\u0027:"},{"line_number":100,"context_line":"            san_mp_info \u003d self._get_ssc_san_multipathing_info()"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"cbbc8b34_6bec5b7f","line":98,"range":{"start_line":98,"start_character":7,"end_line":98,"end_character":62},"updated":"2026-09-09 14:43:28.000000000","message":"Nit: Please add comment about the san multipathing not supported for NFS protocol.","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"492e306a7550c32f9a2515ad06736b7ffc247a16","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        ssc \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        san_mp_info \u003d {}"},{"line_number":98,"context_line":"        # SVM-level property -- query once, apply to all pools"},{"line_number":99,"context_line":"        if self.protocol.casefold() !\u003d \u0027nfs\u0027:"},{"line_number":100,"context_line":"            san_mp_info \u003d self._get_ssc_san_multipathing_info()"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"6e2416a8_0de1d14e","line":98,"range":{"start_line":98,"start_character":7,"end_line":98,"end_character":62},"in_reply_to":"cbbc8b34_6bec5b7f","updated":"2026-09-28 14:48:35.000000000","message":"Acknowledged","commit_id":"db3ba87b1808247c9c2442bfc4b1431d48874488"}],"releasenotes/notes/netapp-aa-san-multipathing-capability-support-72457618bdae4ec3.yaml":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"d810a0a9efd45cb71e58890a72fd81ff4bb58a1e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"13ceef75_06946f9c","line":18,"updated":"2026-08-21 18:05:27.000000000","message":"Two gaps - \n**Operational requirement is missing.** The note describes the lazy `RestNaServer` as an implementation detail, but the consequence for operators is the important part: a backend configured with `netapp_use_legacy_client\u003dTrue` will now open REST sessions to the array. Anyone who deliberately runs ZAPI-only needs to know REST access must be permitted — otherwise the capability silently reports `false` rather than being omitted. That belongs in an `upgrade` section.\n\n**The failure mode should be stated.** The note says \"A version gate ensures the capability is only advertised on clusters running ONTAP 9.19.1 or later; older releases omit the key entirely.\" That\u0027s accurate for the version gate but sets an expectation the query-failure path doesn\u0027t meet. If `capabilities.py:350` is fixed to return `{}`, this sentence becomes true in general and no change is needed here — worth resolving in that order.","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8fb78f8f56c9083bf7c20973e7427dbb1083bde3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f3ff2c6b_f7f9dc2d","line":18,"in_reply_to":"13ceef75_06946f9c","updated":"2026-08-24 11:20:08.000000000","message":"Done","commit_id":"b2efb28d0c548b29857872aaec807487ed4caaa7"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"670bc8c5ea3ee853da3eec87fcde74ec3be221a7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"285472a2_987e3736","line":18,"updated":"2026-08-24 14:18:32.000000000","message":"There is still nothing in here to tell operators that setting `netapp_use_legacy_client\u003dTrue` will now open REST sessions to the array. This should be an `upgrade:` section.","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"eb533b87c62c530458293d584ae497e25d0be51d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8b82d3f4_5b2c4d0b","line":18,"in_reply_to":"285472a2_987e3736","updated":"2026-08-25 15:09:08.000000000","message":"This is not something that operators need to set mandatorily. There is no upgrade path needed. If this flag is set the driver will internally create a REST client to handle this usecase. This is mainly for legacy users how have not yet moved to REST.","commit_id":"5c57bd89a320e12a5dfbf44963214fc71a6436fd"}]}
