)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":12,"context_line":"ONTAP libraries while extending support for Cinder volume operations"},{"line_number":13,"context_line":"such as create, delete, attach, and detach."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: I9ba421df169247298a0c50a7169dd0c9a7aa056b"},{"line_number":16,"context_line":"Change-Id: Ib057c5f14fe49faad5757f07d5257fa11be93427"},{"line_number":17,"context_line":"Signed-off-by: agireesh \u003cgawasthi2010@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"0c0732ae_5f2b7007","line":15,"updated":"2025-08-18 17:40:51.000000000","message":"This isn\u0027t necessary because the reference patch is the direct parent of this patch. Depends-On is typically required only when the dependency refers to a patch in another repo.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":true,"context_lines":[{"line_number":12,"context_line":"ONTAP libraries while extending support for Cinder volume operations"},{"line_number":13,"context_line":"such as create, delete, attach, and detach."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: I9ba421df169247298a0c50a7169dd0c9a7aa056b"},{"line_number":16,"context_line":"Change-Id: Ib057c5f14fe49faad5757f07d5257fa11be93427"},{"line_number":17,"context_line":"Signed-off-by: agireesh \u003cgawasthi2010@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"12e6958e_fe844b11","line":15,"in_reply_to":"0c0732ae_5f2b7007","updated":"2025-08-20 19:24:37.000000000","message":"In the Manila project, we add the dependency on the core patch from the driver patch, even though both are in the same repository. I am following the same approach here. Our intention is that the dependent patch should be merged first, followed by this patch.\n\nIf adding the dependent patch here causes any side effects, I can remove it, otherwise, I will keep it as it is. Please suggest ..?","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"ba1b6be0db02a85e9f3a41cdd8b8caa4e3c0f93b","unresolved":true,"context_lines":[{"line_number":12,"context_line":"ONTAP libraries while extending support for Cinder volume operations"},{"line_number":13,"context_line":"such as create, delete, attach, and detach."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: I9ba421df169247298a0c50a7169dd0c9a7aa056b"},{"line_number":16,"context_line":"Change-Id: Ib057c5f14fe49faad5757f07d5257fa11be93427"},{"line_number":17,"context_line":"Signed-off-by: agireesh \u003cgawasthi2010@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fab753ba_fea6cb31","line":15,"in_reply_to":"12e6958e_fe844b11","updated":"2025-08-21 20:50:38.000000000","message":"When both patches are in the same project, you simply need to base one on top of the other. This creates a relation chain, which you can actually see at the top-right side of the gerrit review. Notice the \"Submitted together\" section.\n\nOn one hand the depends-on is benign, but it can be confusing to reviewers (like me!).","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ef46505d19655f214f296d73fa0429e7cb3b7b2a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"ONTAP libraries while extending support for Cinder volume operations"},{"line_number":13,"context_line":"such as create, delete, attach, and detach."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: I9ba421df169247298a0c50a7169dd0c9a7aa056b"},{"line_number":16,"context_line":"Change-Id: Ib057c5f14fe49faad5757f07d5257fa11be93427"},{"line_number":17,"context_line":"Signed-off-by: agireesh \u003cgawasthi2010@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"f308b991_7ea1f611","line":15,"in_reply_to":"fab753ba_fea6cb31","updated":"2025-08-22 16:27:01.000000000","message":"got you point, thanks for the suggestion. Will remove the depends-on section.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2da377bc_a115b282","updated":"2025-08-18 17:40:51.000000000","message":"No vote yet, as I\u0027m mainly asking questions to confirm my understanding (or lack thereof).","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"101e379feb6019933dc4e723a4ed9110d2107fc7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"03b61e32_fa4cba71","updated":"2025-08-18 15:04:36.000000000","message":"recheck","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"e3531e70c7c5d7d9934fb1d9ce475f9e7d00e3a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"acf2af3c_dc54e58d","updated":"2025-08-21 14:16:44.000000000","message":"LGTM","commit_id":"bbe370d71a77e0601b01b4fcc31c5850b685d536"},{"author":{"_account_id":38290},"change_message_id":"0012bfda4d08f63731a6cfb770b5db75a5fb1a96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"698924c2_81c5da21","updated":"2025-08-21 18:46:31.000000000","message":"Run-NetApp CI","commit_id":"bbe370d71a77e0601b01b4fcc31c5850b685d536"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ef46505d19655f214f296d73fa0429e7cb3b7b2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"4d08fcb5_488c1c4d","updated":"2025-08-22 16:27:01.000000000","message":"Thank you abishop@redhat.com for your valuable review comments. I have done my best to address them. Please feel free to reopen any comments where you disagree.","commit_id":"5b09b5f612d583c6c36b950415be7d4b4349522f"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"3a6842c8f8497b47156634721854c3be262285a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0e66a822_8072fd65","updated":"2025-08-23 05:59:50.000000000","message":"recheck - One unit test failed","commit_id":"5b09b5f612d583c6c36b950415be7d4b4349522f"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"91bc700cafc92a7b230fd9fef4edd00ede9607be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"51ee4558_3e5cf7e7","updated":"2025-08-25 12:42:37.000000000","message":"This patch should be rebased. It\u0027s parent in the relation chain was updated.","commit_id":"65f1fb27a5489f87b3fb4f26d8a4ae89f4939d83"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"3d710a48c8f479a6ab0f11562350b1c1a638757c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"a1d342d2_3cfd0f36","in_reply_to":"51ee4558_3e5cf7e7","updated":"2025-08-25 17:15:41.000000000","message":"Thanks @abishop@redhat.com for pointing this, I have rebased the parent patch.","commit_id":"65f1fb27a5489f87b3fb4f26d8a4ae89f4939d83"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a1f22dc4431aa763a4a139f222148eac83c75d44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"14273a79_54ebdcf8","updated":"2025-08-28 21:29:59.000000000","message":"I am going to +2 this patch.  Though we don\u0027t have ASAr2 CI, the developers have assured us (in comments on this review) that the listed features have been tested by hand.  Given that the NetApp CI is green, it\u0027s unlikely that adding this code will cause regressions for non-ASAr2 users, which is good.\n\nAs I said in an inline comment, this driver is using inherited functions to implement the other required driver features; since the other drivers use these too, they most likely work (though I\u0027d feel better seeing them working in an ASAr2 context).  So I am OK with merging this, though I recognize that other cores may not be.  I just want to flag this for the second core reviewer.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ca8959271a073f022cf033c33dec2e8d79584524","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"71620ac1_47390f60","updated":"2025-08-28 18:05:56.000000000","message":"LGTM","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fa297896ff277678f177fc5206863d3692d521db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"42a43059_ad364e7f","updated":"2025-08-26 19:31:40.000000000","message":"The NetApp CI isn\u0027t setting netapp_disaggregated_platform \u003d True, so while CI success is indicating no regressions, I don\u0027t think this code is actually being exercised by the CI.  Please correct me if I\u0027m wrong.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"36d89f3c6abe3ff27ea2292a07bd4b1cb3d807bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"82570576_d439ad2d","updated":"2025-08-29 11:46:45.000000000","message":"The code looks good apart from some minor improvements inline.\nThe main concern here is that the netapp CI hasn\u0027t run since PS 10 which I would like to see passing on the latest PS14","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"c91d744357e36286fd403531806dc90bdcd8b352","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"bf2e54af_07c278f2","updated":"2025-08-29 14:54:31.000000000","message":"iSCSI and NVMe-TCP CI are passing now, FC is failing but should be good enough to get this in.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b7b43d0986af855936fcdcfab2fcc9f2bd4a8446","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"33cbbfa7_0f12d7f1","updated":"2025-08-29 11:47:00.000000000","message":"run-NetApp CI","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"c1714b100e6b0892d8855dbb3bf2c258074def32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"cae3f0cc_b5613a9e","in_reply_to":"82570576_d439ad2d","updated":"2025-08-29 14:04:24.000000000","message":"After patch 10, there is not change in code only the change is \n\n- The commit message was updated.\n- I resolved a conflict that occurred due to the merging of another patch.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"}],"cinder/volume/drivers/netapp/dataontap/block_base.py":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":943,"context_line":"                                                              ports)"},{"line_number":944,"context_line":"        extra_specs \u003d na_utils.get_volume_extra_specs(volume)"},{"line_number":945,"context_line":"        space_allocation \u003d volume_utils.is_boolean_str("},{"line_number":946,"context_line":"            extra_specs.get(\u0027netapp:space_allocation\u0027)"},{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        if space_allocation:"},{"line_number":949,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1693bbc1_a654aaa6","line":946,"updated":"2025-08-18 17:40:51.000000000","message":"Do you need to provide a default value (presumably \u0027false\u0027)? If \u0027netapp:space_allocation\u0027 isn\u0027t in the extra_specs then won\u0027t it trigger an exception?","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":false,"context_lines":[{"line_number":943,"context_line":"                                                              ports)"},{"line_number":944,"context_line":"        extra_specs \u003d na_utils.get_volume_extra_specs(volume)"},{"line_number":945,"context_line":"        space_allocation \u003d volume_utils.is_boolean_str("},{"line_number":946,"context_line":"            extra_specs.get(\u0027netapp:space_allocation\u0027)"},{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        if space_allocation:"},{"line_number":949,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"d9f9b8c7_70227474","line":946,"in_reply_to":"1693bbc1_a654aaa6","updated":"2025-08-20 19:24:37.000000000","message":"I removed this code. Initially, it was failing for the ASAr2 LUN because ASAr2 users cannot set space allocation. I added this condition to handle that, but later I fixed the issue and forgot to remove the code.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":945,"context_line":"        space_allocation \u003d volume_utils.is_boolean_str("},{"line_number":946,"context_line":"            extra_specs.get(\u0027netapp:space_allocation\u0027)"},{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        if space_allocation:"},{"line_number":949,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"},{"line_number":950,"context_line":""},{"line_number":951,"context_line":"        if self.configuration.use_chap_auth:"}],"source_content_type":"text/x-python","patch_set":8,"id":"b2b0a7e0_ca3491d0","line":948,"updated":"2025-08-18 17:40:51.000000000","message":"It seems a little odd that half of the logic for determining if space allocation is enabled (L944..L947) lives outside of the _is_space_alloc_enabled() function. Would it be appropriate to move this new logic into the existing function? You\u0027d pass in both the volume and lun_path.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":false,"context_lines":[{"line_number":945,"context_line":"        space_allocation \u003d volume_utils.is_boolean_str("},{"line_number":946,"context_line":"            extra_specs.get(\u0027netapp:space_allocation\u0027)"},{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        if space_allocation:"},{"line_number":949,"context_line":"            properties[\u0027discard\u0027] \u003d self._is_space_alloc_enabled(lun_path)"},{"line_number":950,"context_line":""},{"line_number":951,"context_line":"        if self.configuration.use_chap_auth:"}],"source_content_type":"text/x-python","patch_set":8,"id":"eb98c91b_fcd7fadf","line":948,"in_reply_to":"b2b0a7e0_ca3491d0","updated":"2025-08-20 19:24:37.000000000","message":"Same as above.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest_asar2.py":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            msg \u003d _(\u0027Failed to get cluster capacity: %s\u0027)"},{"line_number":178,"context_line":"            raise netapp_utils.NetAppDriverException(msg % e)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":181,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":182,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":183,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"6911cee9_148cdf78","line":180,"updated":"2025-08-18 17:40:51.000000000","message":"If this patch is overriding critical functionality like creating a lun, then I\u0027m confused why it wasn\u0027t necessary to include this code in the parent commit that introduced the RestClientASAr2 class. In other words, how did creating an ASA r2 lun work in the parent patch, where create_lun() wasn\u0027t overridden?","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6ca93099bb79d6e5ae1ebd08bf63a18a2240317d","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            msg \u003d _(\u0027Failed to get cluster capacity: %s\u0027)"},{"line_number":178,"context_line":"            raise netapp_utils.NetAppDriverException(msg % e)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":181,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":182,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":183,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"ced671be_d546dea8","line":180,"in_reply_to":"2dacdda5_cdf43c9e","updated":"2025-08-22 17:51:12.000000000","message":"ACK","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8de1f7e8e4cb27126dec12a5eb58c272aad1edba","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            msg \u003d _(\u0027Failed to get cluster capacity: %s\u0027)"},{"line_number":178,"context_line":"            raise netapp_utils.NetAppDriverException(msg % e)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":181,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":182,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":183,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"2dacdda5_cdf43c9e","line":180,"in_reply_to":"47392519_6b8a9fc9","updated":"2025-08-22 16:39:03.000000000","message":"I don\u0027t think it\u0027s necessary for him to change his patch. I just wanted to describe an approach to merging multiple patches that embody a feature (i.e. a relation chain).","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            msg \u003d _(\u0027Failed to get cluster capacity: %s\u0027)"},{"line_number":178,"context_line":"            raise netapp_utils.NetAppDriverException(msg % e)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":181,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":182,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":183,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"dfb22e7e_c28c4b5c","line":180,"in_reply_to":"6911cee9_148cdf78","updated":"2025-08-20 19:24:37.000000000","message":"The work was divided between two engineers to parallelize tasks, enabling us to accelerate the overall delivery for ASAr2. Additionally, this approach ensures that each engineer is responsible for their respective feature functionality. Parent patch is only for pool initialization, we are not testing the LUN create functionality as part of that patch.\n\nWe performed integration testing to verify the overall functionality, ensuring that pool initialization, discovery, and all volume workflows function correctly.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"3a56611f52668e79e66127ff7a43c0cf63fd4c58","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            msg \u003d _(\u0027Failed to get cluster capacity: %s\u0027)"},{"line_number":178,"context_line":"            raise netapp_utils.NetAppDriverException(msg % e)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":181,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":182,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":183,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"b00b12d9_38e8c448","line":180,"in_reply_to":"ced671be_d546dea8","updated":"2025-08-28 17:53:19.000000000","message":"making this resolved","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ef46505d19655f214f296d73fa0429e7cb3b7b2a","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            msg \u003d _(\u0027Failed to get cluster capacity: %s\u0027)"},{"line_number":178,"context_line":"            raise netapp_utils.NetAppDriverException(msg % e)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":181,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":182,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":183,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"47392519_6b8a9fc9","line":180,"in_reply_to":"d11e6313_5c514266","updated":"2025-08-22 16:27:01.000000000","message":"I will check with @jayaanand.borra@netapp.com to see if he agrees to change the commit message for his patch. If he does, I will update my commit message accordingly. In any case, I plan to place my change on top of the scaffolding patch so that the core reviewers are aware of the dependency(by looking at Relation chain).","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"ba1b6be0db02a85e9f3a41cdd8b8caa4e3c0f93b","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            msg \u003d _(\u0027Failed to get cluster capacity: %s\u0027)"},{"line_number":178,"context_line":"            raise netapp_utils.NetAppDriverException(msg % e)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":181,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":182,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":183,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"d11e6313_5c514266","line":180,"in_reply_to":"dfb22e7e_c28c4b5c","updated":"2025-08-21 20:50:38.000000000","message":"It makes sense to split up the work, but unless I misunderstand I think what you\u0027re saying it both patches are co-dependent. This patch clearly relies on the groundwork of the other patch, but this patch is also required for overall feature to work. Both patches need to merge, and should be merged together.\n\nIs my understanding correct?\n\nIf it is correct, a good way to flag the situation might be to add hints in the commit message. This is one example:\n\nfirst patch: \"NetApp: Support ASA r2 (All-Flash SAN Array r2) part 1/2\"\nthis patch: \"NetApp: Support ASA r2 (All-Flash SAN Array r2) part 2/2\"\n\nThe body of the commit messages can go into details, such as the first patch providing the scaffolding and the \u0027netapp_disaggregated_platform\u0027 option, and the second patch providing the ONTAP libs and implementing the ASAr2 workflows.\n\nThis helps the core team know the first patch shouldn\u0027t be merged until the second one is ready. They might do that by voting +2, but setting -W (withhold the workflow approval) until this patch is ready.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":202,"context_line":"                              \u0027ex\u0027: ex,"},{"line_number":203,"context_line":"                          })"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def destroy_lun(self, path, force\u003dTrue):"},{"line_number":206,"context_line":"        \"\"\"Destroys the LUN at the path.\"\"\""},{"line_number":207,"context_line":"        query \u003d {}"},{"line_number":208,"context_line":"        lun_name \u003d self._get_backend_lun_or_namespace(path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"b1f56931_14e816a8","line":205,"range":{"start_line":205,"start_character":38,"end_line":205,"end_character":42},"updated":"2025-08-18 17:40:51.000000000","message":"I don\u0027t understand the significance here, but defaulting to \"force\u003dTrue\" just feels odd.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"ba1b6be0db02a85e9f3a41cdd8b8caa4e3c0f93b","unresolved":true,"context_lines":[{"line_number":202,"context_line":"                              \u0027ex\u0027: ex,"},{"line_number":203,"context_line":"                          })"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def destroy_lun(self, path, force\u003dTrue):"},{"line_number":206,"context_line":"        \"\"\"Destroys the LUN at the path.\"\"\""},{"line_number":207,"context_line":"        query \u003d {}"},{"line_number":208,"context_line":"        lun_name \u003d self._get_backend_lun_or_namespace(path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fc862a34_442e96c0","line":205,"range":{"start_line":205,"start_character":38,"end_line":205,"end_character":42},"in_reply_to":"801921fa_dc6a79f3","updated":"2025-08-21 20:50:38.000000000","message":"Ack, now I see that the other existing ONTAP internal API are similar. Thanks for the explanation.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                              \u0027ex\u0027: ex,"},{"line_number":203,"context_line":"                          })"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def destroy_lun(self, path, force\u003dTrue):"},{"line_number":206,"context_line":"        \"\"\"Destroys the LUN at the path.\"\"\""},{"line_number":207,"context_line":"        query \u003d {}"},{"line_number":208,"context_line":"        lun_name \u003d self._get_backend_lun_or_namespace(path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"801921fa_dc6a79f3","line":205,"range":{"start_line":205,"start_character":38,"end_line":205,"end_character":42},"in_reply_to":"b1f56931_14e816a8","updated":"2025-08-20 19:24:37.000000000","message":"We override a method here, do, we must ensure that the child method uses the same parameters as defined in the parent class. Our logic enforces that methods with the same name in both REST and ZAPI implementations also share identical parameter names. This consistency ensures that the correct method is invoked based on the context.\n\nThe logic here is,  in block_base and any other related classes, we create a connection object. Depending on this connection object, the corresponding ONTAP library—whether ZAPI, REST, or ASAr2 is invoked. To maintain compatibility and proper method invocation across these libraries, methods with the same name must have the same set of parameters.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ef46505d19655f214f296d73fa0429e7cb3b7b2a","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                              \u0027ex\u0027: ex,"},{"line_number":203,"context_line":"                          })"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def destroy_lun(self, path, force\u003dTrue):"},{"line_number":206,"context_line":"        \"\"\"Destroys the LUN at the path.\"\"\""},{"line_number":207,"context_line":"        query \u003d {}"},{"line_number":208,"context_line":"        lun_name \u003d self._get_backend_lun_or_namespace(path)"}],"source_content_type":"text/x-python","patch_set":8,"id":"83da41d7_ecacb460","line":205,"range":{"start_line":205,"start_character":38,"end_line":205,"end_character":42},"in_reply_to":"fc862a34_442e96c0","updated":"2025-08-22 16:27:01.000000000","message":"thanks for understanding.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def map_namespace(self, path, subsystem_name):"},{"line_number":271,"context_line":"        \"\"\"Maps namespace to the host nqn and returns namespace uuid.\"\"\""},{"line_number":272,"context_line":"        namespace_name_name \u003d self._get_backend_lun_or_namespace(path)"},{"line_number":273,"context_line":"        return super().map_namespace(namespace_name_name, subsystem_name)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def unmap_namespace(self, path, subsystem):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5c0aecb5_a41e1a6f","line":272,"range":{"start_line":272,"start_character":8,"end_line":272,"end_character":27},"updated":"2025-08-18 17:40:51.000000000","message":"nit: you probably intended this to be \u0027namespace_name\u0027","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def map_namespace(self, path, subsystem_name):"},{"line_number":271,"context_line":"        \"\"\"Maps namespace to the host nqn and returns namespace uuid.\"\"\""},{"line_number":272,"context_line":"        namespace_name_name \u003d self._get_backend_lun_or_namespace(path)"},{"line_number":273,"context_line":"        return super().map_namespace(namespace_name_name, subsystem_name)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def unmap_namespace(self, path, subsystem):"}],"source_content_type":"text/x-python","patch_set":8,"id":"c652c0a0_2f410fb6","line":272,"range":{"start_line":272,"start_character":8,"end_line":272,"end_character":27},"in_reply_to":"5c0aecb5_a41e1a6f","updated":"2025-08-20 19:24:37.000000000","message":"Done","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"36d89f3c6abe3ff27ea2292a07bd4b1cb3d807bc","unresolved":true,"context_lines":[{"line_number":192,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":193,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":194,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":195,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""},{"line_number":196,"context_line":"        initial_size \u003d size"},{"line_number":197,"context_line":"        lun_name \u003d lun_name.replace(\"-\", \"_\")"},{"line_number":198,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"076a2c50_d6a832da","line":195,"range":{"start_line":195,"start_character":34,"end_line":195,"end_character":57},"updated":"2025-08-29 11:46:45.000000000","message":"nit: I\u0027m assuming netapp refers to the \"pool\" as \"volume\" which conflicts with Cinder terminology that refers to \"LUN\" as a \"volume\" so you can see \"creating LUN on volume\" can be really confusing.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"609a163d6329e11cf2c268d7bc347c4d2b97df3d","unresolved":true,"context_lines":[{"line_number":192,"context_line":"    def create_lun(self, volume_name, lun_name, size, metadata,"},{"line_number":193,"context_line":"                   qos_policy_group_name\u003dNone,"},{"line_number":194,"context_line":"                   qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":195,"context_line":"        \"\"\"Issues API request for creating LUN on volume.\"\"\""},{"line_number":196,"context_line":"        initial_size \u003d size"},{"line_number":197,"context_line":"        lun_name \u003d lun_name.replace(\"-\", \"_\")"},{"line_number":198,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"78bd10b8_874b71a8","line":195,"range":{"start_line":195,"start_character":34,"end_line":195,"end_character":57},"in_reply_to":"076a2c50_d6a832da","updated":"2025-08-29 14:01:05.000000000","message":"Yes, you are right. For now, I am keeping this comment open. In the next release, we will need to work on the other workflow for ASAr2, and I will incorporate this comment there.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"36d89f3c6abe3ff27ea2292a07bd4b1cb3d807bc","unresolved":true,"context_lines":[{"line_number":219,"context_line":"        query \u003d {}"},{"line_number":220,"context_line":"        lun_name \u003d self._get_backend_lun_or_namespace(path)"},{"line_number":221,"context_line":"        query[\u0027name\u0027] \u003d lun_name"},{"line_number":222,"context_line":"        if force:"},{"line_number":223,"context_line":"            query[\u0027allow_delete_while_mapped\u0027] \u003d \u0027true\u0027"},{"line_number":224,"context_line":"        self.send_request(\u0027/storage/luns/\u0027, \u0027delete\u0027, query\u003dquery)"},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"700c227f_aef00133","line":222,"range":{"start_line":222,"start_character":0,"end_line":222,"end_character":17},"updated":"2025-08-29 11:46:45.000000000","message":"Since the default value is True, will there be a case when we don\u0027t want to force deletion of a mapped LUN?","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"609a163d6329e11cf2c268d7bc347c4d2b97df3d","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        query \u003d {}"},{"line_number":220,"context_line":"        lun_name \u003d self._get_backend_lun_or_namespace(path)"},{"line_number":221,"context_line":"        query[\u0027name\u0027] \u003d lun_name"},{"line_number":222,"context_line":"        if force:"},{"line_number":223,"context_line":"            query[\u0027allow_delete_while_mapped\u0027] \u003d \u0027true\u0027"},{"line_number":224,"context_line":"        self.send_request(\u0027/storage/luns/\u0027, \u0027delete\u0027, query\u003dquery)"},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"cebec19b_f7c1925f","line":222,"range":{"start_line":222,"start_character":0,"end_line":222,"end_character":17},"in_reply_to":"700c227f_aef00133","updated":"2025-08-29 14:01:05.000000000","message":"ideally user has to unmap the lun before delete, in case LUN is not unmapped we forcefully deleting it.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"36d89f3c6abe3ff27ea2292a07bd4b1cb3d807bc","unresolved":true,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _get_backend_lun_or_namespace(self, path):"},{"line_number":318,"context_line":"        \"\"\"Get the backend LUN or namespace\"\"\""},{"line_number":319,"context_line":"        paths \u003d path.split(\"/\")"},{"line_number":320,"context_line":"        lun_name \u003d paths[3].replace(\"-\", \"_\")"},{"line_number":321,"context_line":"        return lun_name"}],"source_content_type":"text/x-python","patch_set":14,"id":"790baa9d_ba463193","line":321,"range":{"start_line":319,"start_character":8,"end_line":321,"end_character":23},"updated":"2025-08-29 11:46:45.000000000","message":"nit: can be done in a single line\n\n    return path.split(\"/\")[3].replace(\"-\", \"_\")","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"609a163d6329e11cf2c268d7bc347c4d2b97df3d","unresolved":true,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _get_backend_lun_or_namespace(self, path):"},{"line_number":318,"context_line":"        \"\"\"Get the backend LUN or namespace\"\"\""},{"line_number":319,"context_line":"        paths \u003d path.split(\"/\")"},{"line_number":320,"context_line":"        lun_name \u003d paths[3].replace(\"-\", \"_\")"},{"line_number":321,"context_line":"        return lun_name"}],"source_content_type":"text/x-python","patch_set":14,"id":"356c988b_51adede5","line":321,"range":{"start_line":319,"start_character":8,"end_line":321,"end_character":23},"in_reply_to":"790baa9d_ba463193","updated":"2025-08-29 14:01:05.000000000","message":"agree on this, will keep this comment open, will incorporate this when we add the next set of feature for ASAr2.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"}],"cinder/volume/drivers/netapp/dataontap/nvme_library.py":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":426,"context_line":"        \"\"\"Extracts the namespace from API and populates the table.\"\"\""},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        path \u003d namespace[\u0027Path\u0027]"},{"line_number":429,"context_line":"        if not self.configuration.netapp_disaggregated_platform:"},{"line_number":430,"context_line":"            (_rest, _splitter, name) \u003d path.rpartition(\u0027/\u0027)"},{"line_number":431,"context_line":"        else:"},{"line_number":432,"context_line":"            name \u003d path"}],"source_content_type":"text/x-python","patch_set":8,"id":"1efb532b_acdafd84","line":429,"updated":"2025-08-18 17:40:51.000000000","message":"nit: I find it easier to read if conditionals don\u0027t begin with \u0027not\u0027 when there\u0027s an else clause. Consider this alternative that flips the logic.\n\n        if self.configuration.netapp_disaggregated_platform:\n            name \u003d path\n        else:\n            (_rest, _splitter, name) \u003d path.rpartition(\u0027/\u0027)","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        \"\"\"Extracts the namespace from API and populates the table.\"\"\""},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        path \u003d namespace[\u0027Path\u0027]"},{"line_number":429,"context_line":"        if not self.configuration.netapp_disaggregated_platform:"},{"line_number":430,"context_line":"            (_rest, _splitter, name) \u003d path.rpartition(\u0027/\u0027)"},{"line_number":431,"context_line":"        else:"},{"line_number":432,"context_line":"            name \u003d path"}],"source_content_type":"text/x-python","patch_set":8,"id":"14d1b5d9_af071c43","line":429,"in_reply_to":"1efb532b_acdafd84","updated":"2025-08-20 19:24:37.000000000","message":"Done","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"}],"releasenotes/notes/added_ontap_libs_for_asar2_platform-6688b9f811645b96.yaml":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"00d1eba69e6719af42e0c8c2efbc6b0363c0c0a6","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The new ASAr2 driver class inherits from the existing ONTAP REST"},{"line_number":5,"context_line":"    library, enabling reuse of the mature ONTAP codebase. This design"},{"line_number":6,"context_line":"    extends the Cinder driver capabilities to support key volume operations"},{"line_number":7,"context_line":"    on ASAr2, including."},{"line_number":8,"context_line":"    * Volume Creation"},{"line_number":9,"context_line":"    * Volume Deletion"},{"line_number":10,"context_line":"    * Volume Attachment"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"fb79a892_e2728dcb","line":7,"range":{"start_line":5,"start_character":58,"end_line":7,"end_character":24},"updated":"2025-08-18 17:40:51.000000000","message":"As I noted elsewhere in this review, I\u0027m confused about how things would work without this patch. Maybe I\u0027m starting from a false assumption about this whole ASA r2 driver. Is it possible that without this patch (i.e. just the parent patch), the ASA r2 driver would function correctly, but just not provide the new ASA r2 benefits? And it\u0027s this patch that adds those benefits?","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"94ed26296349504cca83a0db9e14a0ab4016b4a8","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The new ASAr2 driver class inherits from the existing ONTAP REST"},{"line_number":5,"context_line":"    library, enabling reuse of the mature ONTAP codebase. This design"},{"line_number":6,"context_line":"    extends the Cinder driver capabilities to support key volume operations"},{"line_number":7,"context_line":"    on ASAr2, including."},{"line_number":8,"context_line":"    * Volume Creation"},{"line_number":9,"context_line":"    * Volume Deletion"},{"line_number":10,"context_line":"    * Volume Attachment"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bbd723e2_902d292e","line":7,"range":{"start_line":5,"start_character":58,"end_line":7,"end_character":24},"in_reply_to":"74567bd5_f3a4e425","updated":"2025-08-20 19:24:37.000000000","message":"Added NetApp.\n\nThe parent patch is intended only for pool initialization and pooling. In this patch, we have added the ONTP library for ASAr2 to support volume workflows, such as creating, deleting, attaching, and detaching Cinder volumes. Without this patch, the volume workflows will not function properly.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"ef46505d19655f214f296d73fa0429e7cb3b7b2a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The new ASAr2 driver class inherits from the existing ONTAP REST"},{"line_number":5,"context_line":"    library, enabling reuse of the mature ONTAP codebase. This design"},{"line_number":6,"context_line":"    extends the Cinder driver capabilities to support key volume operations"},{"line_number":7,"context_line":"    on ASAr2, including."},{"line_number":8,"context_line":"    * Volume Creation"},{"line_number":9,"context_line":"    * Volume Deletion"},{"line_number":10,"context_line":"    * Volume Attachment"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ba6882be_f723f413","line":7,"range":{"start_line":5,"start_character":58,"end_line":7,"end_character":24},"in_reply_to":"997fb8e4_17d563df","updated":"2025-08-22 16:27:01.000000000","message":"I think this patch has more user-facing features. It adds support for Cinder volume creation, deletion, as well as attach and detach. While Part 1 focuses on pool initialization, users cannot execute the volume workflow without this patch.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8de1f7e8e4cb27126dec12a5eb58c272aad1edba","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The new ASAr2 driver class inherits from the existing ONTAP REST"},{"line_number":5,"context_line":"    library, enabling reuse of the mature ONTAP codebase. This design"},{"line_number":6,"context_line":"    extends the Cinder driver capabilities to support key volume operations"},{"line_number":7,"context_line":"    on ASAr2, including."},{"line_number":8,"context_line":"    * Volume Creation"},{"line_number":9,"context_line":"    * Volume Deletion"},{"line_number":10,"context_line":"    * Volume Attachment"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"8fb47184_a332c05c","line":7,"range":{"start_line":5,"start_character":58,"end_line":7,"end_character":24},"in_reply_to":"ba6882be_f723f413","updated":"2025-08-22 16:39:03.000000000","message":"Sure, I just meant the user probably views the two patches as a single feature: support for ASA r2. Unless I misunderstand, the user doesn\u0027t really benefit from the first patch unless they also have the second. With two separate release notes, there will be two separate \"features\" listed in the published notes, and they won\u0027t necessarily appear together.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"ba1b6be0db02a85e9f3a41cdd8b8caa4e3c0f93b","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The new ASAr2 driver class inherits from the existing ONTAP REST"},{"line_number":5,"context_line":"    library, enabling reuse of the mature ONTAP codebase. This design"},{"line_number":6,"context_line":"    extends the Cinder driver capabilities to support key volume operations"},{"line_number":7,"context_line":"    on ASAr2, including."},{"line_number":8,"context_line":"    * Volume Creation"},{"line_number":9,"context_line":"    * Volume Deletion"},{"line_number":10,"context_line":"    * Volume Attachment"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"997fb8e4_17d563df","line":7,"range":{"start_line":5,"start_character":58,"end_line":7,"end_character":24},"in_reply_to":"bbd723e2_902d292e","updated":"2025-08-21 20:50:38.000000000","message":"Pursuant to my earlier comment, if this patch is part of a co-dependent set (both patches need to merge) then I don\u0027t think they need separate release notes. Notice this note really doesn\u0027t describe a user-facing feature. It\u0027s just part 2 of adding support for ASA r2 and the associated workflows.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"767cb47f516af0103e46c6fee697fd215b45b889","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The new ASAr2 driver class inherits from the existing ONTAP REST"},{"line_number":5,"context_line":"    library, enabling reuse of the mature ONTAP codebase. This design"},{"line_number":6,"context_line":"    extends the Cinder driver capabilities to support key volume operations"},{"line_number":7,"context_line":"    on ASAr2, including."},{"line_number":8,"context_line":"    * Volume Creation"},{"line_number":9,"context_line":"    * Volume Deletion"},{"line_number":10,"context_line":"    * Volume Attachment"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"74567bd5_f3a4e425","line":7,"range":{"start_line":5,"start_character":58,"end_line":7,"end_character":24},"in_reply_to":"fb79a892_e2728dcb","updated":"2025-08-18 18:16:29.000000000","message":"Also, please mention \"NetApp\" early in the note.","commit_id":"93ae2321533c949d5c5140bbc50643a5402dfd46"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fa297896ff277678f177fc5206863d3692d521db","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    NetApp - The new ASAr2 driver class inherits from the existing ONTAP"},{"line_number":5,"context_line":"    REST library, enabling reuse of the mature ONTAP codebase. This design"},{"line_number":6,"context_line":"    extends the Cinder driver capabilities to support key volume operations"},{"line_number":7,"context_line":"    on ASAr2 platform, including."},{"line_number":8,"context_line":"    * Volume Creation"},{"line_number":9,"context_line":"    * Volume Deletion"},{"line_number":10,"context_line":"    * Volume Attachment"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"305fda9f_069065d0","line":7,"range":{"start_line":7,"start_character":32,"end_line":7,"end_character":33},"updated":"2025-08-26 19:31:40.000000000","message":"I think you want a \u0027:\u0027 here instead of a \u0027.\u0027","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fa297896ff277678f177fc5206863d3692d521db","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"7d5c608e_9aa6783c","line":13,"updated":"2025-08-26 19:31:40.000000000","message":"From what you said in the release note on the parent patch, the parent class of the ASA r2 driver will handle the other required driver functions, namely, create/delete snapshot, create volume from snapshot, clone volume, create image from volume, and host-assisted volume migration ... which is fine, but it would be good to have at least one CI run with netapp_disaggregated_platform \u003d True to see that all the usual tempest tests pass.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"3a56611f52668e79e66127ff7a43c0cf63fd4c58","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"e03189cc_901f89a9","line":13,"in_reply_to":"7d5c608e_9aa6783c","updated":"2025-08-28 17:53:19.000000000","message":"Thanks, @rosmaita.fossdev@gmail.com, for your review comments. I agree with your point that we need to run the CI on the ASAr2 platform. We recently brought our CI up, and currently, we have only one provider running the CI for all our patches. To run tests on ASAr2, we need to create a separate pipeline and add the ASAr2 cluster. At present, we don\u0027t have a dedicated ASAr2 cluster for CI/CD, but we are planning to include one in the next release. Meanwhile, we run our CI with ONTAP 9 for this patch to ensure there are no regressions. For ASAr2, we performed peer testing and covered the following scenarios:\n\n\n\n1. Test Volume create/Delete:\n   - Make sure volume is created successfully. Make sure LUN is created on ONTAP.\n   - Cinder volume deletion should work fine and make sure LUN is get deleted from   ONTAP\n\n2. Attach and Detach the volume \nWorkflow: \n  - Create NOVA instance \n  - Create cinder volume \n  - Attach the cinder volume to NOVA LUN \n  - Create the file system on attached LUN and mount it to NOVA VM.\n  - Write some data on mounted LUN\n  - Detach the cinder volume \n\n3. Test Volume Extend \n   - Create cinder volume \n   - Increase the volume size from horizon GUI\n   - Create the Nova Instance attach the cinder volume VM\n   - Create the file system on attached volume and mount and write some data on  mounted volume.\n   - Now, again increase the cinder volume size.\n   - Verify the volume size on ONTAP and Nova also reflect the volume size \n\n4. Test VM creation with boot volume \n5. Create the new cinder volume from image \n6. Create cinder volume creation with qos policy and adaptive QOS policy\n7. Test CHAP authentication workflow \n   - Make sure we have \"use_chap_auth\u003dtrue\" set to cinder.conf file.\n   - Create cinder volume and NOVA VM.\n   - Attach the cinder volume to NOVA VM.\n   - Create the file system on attached LUN and mount it to NOVA VM.\n   - Write some data on mounted LUN\n   - Detach the cinder volume","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a1f22dc4431aa763a4a139f222148eac83c75d44","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"d6361ddb_494e6c92","line":13,"in_reply_to":"e03189cc_901f89a9","updated":"2025-08-28 21:29:59.000000000","message":"Thanks for the explanation.  The only other thing I want to be clear on is that with the ASA r2 driver configured, you can perform all the required driver functions not mentioned above, that is, create/delete snapshot, create volume from snapshot, clone volume, create image from volume, and host-assisted volume migration.  I realize that these will be handled by inherited functions that we already know work, but the reason to test is to make sure something didn\u0027t get overridden by accident.","commit_id":"b826f66994cd22f062725f8de39c374b3674fe2b"}]}
