)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"0f159e9df92db40aed204bc6405024993f9b7b05","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0d4fccce_b46f9e47","updated":"2026-08-10 10:14:26.000000000","message":"LGTM","commit_id":"f4c99c68a736848d121671a3ba530cb5c2ae10e9"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"3ef9e0f340d6aa0042ae810c0438e46ae85604d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a7f83657_84bdd432","updated":"2026-08-10 10:15:43.000000000","message":"Run-NetApp CI","commit_id":"f4c99c68a736848d121671a3ba530cb5c2ae10e9"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"199e1be002dc922e434cdfc1c5269e938d17bace","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d128b73c_810178af","updated":"2026-09-06 05:25:35.000000000","message":"Run-NetApp CI","commit_id":"1d1f90f213260e40d307302876090f66ef6db644"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"febe5842ce3554f73cc34f6389add49372ae1374","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1147c3d9_5df6f506","updated":"2026-09-08 08:08:09.000000000","message":"Run-NetApp CI","commit_id":"5c84c18fb627b083a0143e108a7aefcef7bfd3b5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3b07cd4599467d8065c3a900ae587ed5be32b9f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c55b3333_2673b4b8","updated":"2026-09-06 20:26:15.000000000","message":"Run-NetApp CI","commit_id":"5c84c18fb627b083a0143e108a7aefcef7bfd3b5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"44cfe25e65a385f1247124734ca55aef9f06217f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"986e011d_4e0782e0","updated":"2026-09-08 13:03:57.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"5c84c18fb627b083a0143e108a7aefcef7bfd3b5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"a2bc3d9d10ff2cc1925d65da5ddbcdfe4a1a56de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8ebebbca_f86580fb","updated":"2026-09-09 09:06:05.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"6a026251574632669a33dc3948ce4524ab73e67f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b730295ae2232b29824c17da6ba3643f4b40e4bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"08d79da9_c7b589d7","updated":"2026-09-09 10:32:50.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"7b93032434156c481fcf680e113fc270078d6d87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b46f659a_47e30941","updated":"2026-09-09 12:48:13.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"579c80b6d0ec3d869ad957eec09cd32d36c5481a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"beb63c08_aa8e89b9","updated":"2026-09-09 15:36:27.000000000","message":"Run-NetApp-ASAr2 CI","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"abda5bf90ed0e79c9760fa35abebaeecdb10dd50","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0d838b41_28428aca","updated":"2026-09-12 17:06:08.000000000","message":"SVM credentials are not yet planned to be supported with ASAr2. I dont think this patch itself is going to solve other issues we may face with SVM credentials. So I would like to flag it to not be submitted. \n\nThis needs to be thought through for replication and other features that will be planned for upcoming release.","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"448d5657_32f563fe","updated":"2026-09-10 06:08:36.000000000","message":"can you please check overall approach","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_base.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"83a6afe53c443289041c8f61fec29eb6b5793e16","unresolved":false,"context_lines":[{"line_number":671,"context_line":"    @mock.patch.object(block_base.NetAppBlockStorageLibrary, \u0027_unmap_lun\u0027)"},{"line_number":672,"context_line":"    @mock.patch.object(block_base.NetAppBlockStorageLibrary, \u0027_get_lun_attr\u0027)"},{"line_number":673,"context_line":"    def test_terminate_connection_iscsi_no_metadata(self, mock_get_lun_attr,"},{"line_number":674,"context_line":"                                                     mock_unmap_lun):"},{"line_number":675,"context_line":"        mock_get_lun_attr.return_value \u003d None"},{"line_number":676,"context_line":"        volume \u003d copy.deepcopy(fake.test_volume)"},{"line_number":677,"context_line":"        volume.multiattach \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ecf3c13_7be22b6b","line":674,"updated":"2026-08-05 09:36:30.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"00af154420cd38938f2611acb3144efb31d79c9b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"83a6afe53c443289041c8f61fec29eb6b5793e16","unresolved":false,"context_lines":[{"line_number":865,"context_line":"    @mock.patch.object(block_base.NetAppBlockStorageLibrary,"},{"line_number":866,"context_line":"                       \u0027_get_lun_attr\u0027)"},{"line_number":867,"context_line":"    def test_terminate_connection_fc_no_metadata(self, mock_get_lun_attr,"},{"line_number":868,"context_line":"                                                  mock_unmap_lun):"},{"line_number":869,"context_line":"        mock_get_lun_attr.return_value \u003d None"},{"line_number":870,"context_line":"        volume \u003d copy.deepcopy(fake.test_volume)"},{"line_number":871,"context_line":"        target_info \u003d self.library.terminate_connection_fc(volume,"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e1b0e05_a1d4c085","line":868,"updated":"2026-08-05 09:36:30.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"00af154420cd38938f2611acb3144efb31d79c9b"}],"cinder/volume/drivers/netapp/dataontap/block_base.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":true,"context_lines":[{"line_number":300,"context_line":"            metadata[\u0027Volume\u0027] \u003d metadata[\u0027Path\u0027]"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        handle \u003d self._create_lun_handle(metadata)"},{"line_number":303,"context_line":"        self._add_lun_to_table(NetAppLun(handle, lun_name, size, metadata))"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        model_update \u003d self._get_volume_model_update(volume)"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"790f4707_5258e78a","line":303,"updated":"2026-09-10 06:08:36.000000000","message":"This appears to be the root cause behind the later metadata\u003dNone\nfailures on ASA r2.\n\ncreate_volume inserts the LUN in lun_table using the original Cinder\nname, which contains hyphens. _get_lun_from_table() normalises the\nlookup through get_backend_lun_or_ns_name(), producing the ASA r2\nunderscore name. The freshly created LUN therefore cannot be found by\nits subsequent lookup key.\n\nPlease make cache insertion, lookup, refresh and removal use one\ncanonical backend key. NVMe create_volume already uses the converted\nnamespace name and provides a useful pattern.\n\nPlease also cover this with a test that:\n1. creates an ASA r2 volume,\n2. verifies the inserted lun_table key, and\n3. retrieves metadata using the normal Cinder volume name without\n   forcing get_lun_list().","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":true,"context_lines":[{"line_number":467,"context_line":"    def _map_lun(self, name, initiator_list, initiator_type, lun_id\u003dNone):"},{"line_number":468,"context_line":"        \"\"\"Maps LUN to the initiator(s) and returns LUN ID assigned.\"\"\""},{"line_number":469,"context_line":"        metadata \u003d self._get_lun_attr(name, \u0027metadata\u0027)"},{"line_number":470,"context_line":"        if not metadata:"},{"line_number":471,"context_line":"            msg \u003d _(\u0027Could not find metadata for LUN %s, cannot map it.\u0027)"},{"line_number":472,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg % name)"},{"line_number":473,"context_line":"        path \u003d metadata[\u0027Path\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"f5c444b4_14ded3fe","line":470,"updated":"2026-09-10 06:08:36.000000000","message":"The explicit exception is better than the current NoneType crash, but\nit does not fix the ASA r2 attach failure if metadata is None because\nthe LUN was inserted under the hyphenated name and looked up under the\nunderscore backend name.\n\nPlease fix the lun_table key normalisation first. This check can remain\nas a defensive error path, but the message should include the Cinder\nname and normalised backend lookup name so an operator can diagnose the\nmiss.","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":true,"context_lines":[{"line_number":1122,"context_line":"                                             \u0027initiator_name\u0027: initiators})"},{"line_number":1123,"context_line":""},{"line_number":1124,"context_line":"        metadata \u003d self._get_lun_attr(name, \u0027metadata\u0027)"},{"line_number":1125,"context_line":"        if not metadata:"},{"line_number":1126,"context_line":"            LOG.warning(\"LUN %(name)s has no metadata, skipping unmap.\","},{"line_number":1127,"context_line":"                        {\u0027name\u0027: name})"},{"line_number":1128,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"9d27d495_fd8bd880","line":1125,"updated":"2026-09-10 06:08:36.000000000","message":"Returning success here is unsafe because metadata\u003dNone does not prove\nthat the backend LUN or its mapping is absent. It can also mean a cache\nkey mismatch, an incomplete REST record, or a failed table refresh.\n\nThis makes terminate_connection, including connector\u003dNone cleanup,\nreturn without attempting _unmap_lun().\n\nPlease:\n1. fix the ASA r2 cache key mismatch;\n2. retry an authoritative backend lookup when the cache record is\n   unavailable;\n3. treat a confirmed missing backend object as idempotent success; and\n4. unmap when the object exists and its backend name/path is known.\n\nA REST/parsing failure should not be converted into successful cleanup.\nPlease add a test where local metadata is unavailable but a backend\nmapping still exists.","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"}],"cinder/volume/drivers/netapp/dataontap/block_cmode.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":true,"context_lines":[{"line_number":336,"context_line":"        This override adds boundary detection for cross-pool"},{"line_number":337,"context_line":"        cloning when the clone_across_pools capability is enabled."},{"line_number":338,"context_line":"        \"\"\""},{"line_number":339,"context_line":"        if self.configuration.netapp_disaggregated_platform:"},{"line_number":340,"context_line":"            return super("},{"line_number":341,"context_line":"                NetAppBlockStorageCmodeLibrary, self"},{"line_number":342,"context_line":"            )._clone_source_to_destination(source, destination_volume)"}],"source_content_type":"text/x-python","patch_set":6,"id":"6c70038d_bb90b839","line":339,"updated":"2026-09-10 06:08:36.000000000","message":"The disaggregated early return is correct because ASA r2 must not use\nthe FlexVol cross-pool boundary path.\n\nHowever, please audit the parent clone completion path for the same\ncache-key issue as create_volume. If the cloned LUN is inserted using\nthe hyphenated Cinder new_name but later looked up using the normalised\nASA r2 backend name, create-from-source/create-from-snapshot will fail\nat the next lookup.\n\nPlease add a test that completes an ASA r2 clone and retrieves the new\nLUN from lun_table using the normal driver lookup path.","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest_asar2.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":true,"context_lines":[{"line_number":180,"context_line":"                          })"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def clone_lun(self, volume, name, new_name, space_reserved\u003d\u0027true\u0027,"},{"line_number":183,"context_line":"                  qos_policy_group_name\u003dNone, src_block\u003d0, dest_block\u003d0,"},{"line_number":184,"context_line":"                  block_count\u003d0, source_snapshot\u003dNone, is_snapshot\u003dFalse,"},{"line_number":185,"context_line":"                  qos_policy_group_is_adaptive\u003dFalse):"},{"line_number":186,"context_line":"        \"\"\"Copy an ASA r2 LUN using ASA r2 names.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7de383_914a7df4","line":183,"updated":"2026-09-10 06:08:36.000000000","message":"This override accepts qos_policy_group_name and validates QoS-related\ninput, but the value is neither included in the copy request nor applied\nafter creation. That silently changes the inherited clone_lun contract.\n\nPlease either:\n1. apply QoS using the ASA r2-supported request field or follow-up API,\n   or\n2. reject the operation explicitly when QoS was requested but cannot be\n   honoured.","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"}],"cinder/volume/drivers/netapp/dataontap/nvme_library.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":true,"context_lines":[{"line_number":764,"context_line":"    def _map_namespace(self, name, host_nqn):"},{"line_number":765,"context_line":"        \"\"\"Maps namespace to the host nqn and returns its ID assigned.\"\"\""},{"line_number":766,"context_line":"        metadata \u003d self._get_namespace_attr(name, \u0027metadata\u0027)"},{"line_number":767,"context_line":"        if not metadata:"},{"line_number":768,"context_line":"            msg \u003d _(\u0027Could not find metadata for namespace %s, cannot \u0027"},{"line_number":769,"context_line":"                    \u0027map it.\u0027)"},{"line_number":770,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg % name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"972e8e5b_a7ba7d32","line":767,"updated":"2026-09-10 06:08:36.000000000","message":"Please do not treat missing local namespace metadata as proof that no\nbackend mapping exists.\n\nNVMe already inserts the converted backend namespace name, so this path\ncan indicate a restart/table-refresh problem or an incomplete REST\nrecord. Retry the backend lookup and unmap when the namespace exists.\nOnly return idempotent success after confirming that the backend object\nor mapping is absent.\n\nPlease add coverage for terminate_connection with unavailable local\nmetadata and an existing namespace-to-subsystem mapping.","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6124b25b06a8202179a7b1c47bcd32f4c1d6f626","unresolved":true,"context_lines":[{"line_number":890,"context_line":"                      \"%(host_nqn)s\", {\u0027name\u0027: name, \u0027host_nqn\u0027: host_nqn})"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        metadata \u003d self._get_namespace_attr(name, \u0027metadata\u0027)"},{"line_number":893,"context_line":"        if not metadata:"},{"line_number":894,"context_line":"            LOG.warning(\"Namespace %(name)s has no metadata, skipping \""},{"line_number":895,"context_line":"                        \"unmap.\", {\u0027name\u0027: name})"},{"line_number":896,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"a804e946_380cdac6","line":893,"updated":"2026-09-10 06:08:36.000000000","message":"NVMe already inserts the converted backend namespace name, so this path\n5\ncan indicate a restart/table-refresh problem or an incomplete REST\n6\nrecord. Retry the backend lookup and unmap when the namespace exists.\n7\nOnly return idempotent success after confirming that the backend object\n8\nor mapping is absent","commit_id":"5b6ab714bd67000b39ada3a90641bf70e78335f9"}]}
