)]}'
{"/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":"3076285c12a2e66e8ebe9bab83850f6e7981f1ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1915e480_adf2dac8","updated":"2026-08-10 10:18:55.000000000","message":"Adding NetApp reviewers.","commit_id":"e762745513783dd3ace47007c74dac781e85f24f"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"3d7f6c301742fd777102f9269655c558bdab46dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4e5dbc88_b1ee3f68","updated":"2026-08-09 17:25:26.000000000","message":"CI green, small correct message fix, review appreciated","commit_id":"e762745513783dd3ace47007c74dac781e85f24f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"f0ec95d0ff203762d8c01130abd03353e8678927","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4f771b7c_33d1e143","updated":"2026-08-10 10:31:17.000000000","message":"LGTM. Please confirm with core members if both feature and bug section is required in release notes.","commit_id":"e762745513783dd3ace47007c74dac781e85f24f"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"71e006fa81039781bc43c326837049c4ec80006c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2f20e280_7248eb6d","updated":"2026-10-12 15:35:48.000000000","message":"please add a test covering `netapp_manage_existing_rename_lun\u003dFalse` to verify that manage_existing() preserves the original LUN name","commit_id":"e762745513783dd3ace47007c74dac781e85f24f"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ca1292b05ef7fe4afd946794322051903b05e566","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1fdbffb8_978dabe7","updated":"2026-08-10 10:17:14.000000000","message":"run-NetApp CI","commit_id":"e762745513783dd3ace47007c74dac781e85f24f"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"b39c17a7a0f13248c9248c952775cb3c2b62578f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"276d0881_97f284b4","updated":"2026-10-20 07:00:20.000000000","message":"The preservation behavior itself looks reasonable. Could you add coverage for an operation after manage_existing when the preserved LUN name differs from the Cinder volume name? This would verify that the driver can continue resolving the LUN after removing the previous rename invariant.","commit_id":"58de352d0e40103ed247c621b8215bef84a62f3d"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"b719e0c725ba2b57f66bd73e896ee81c7f87a4ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e6930337_c398edd8","in_reply_to":"2f20e280_7248eb6d","updated":"2026-10-19 09:19:48.000000000","message":"Done. Added test_manage_existing_preserve_name_config in cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_base.py to verify that manage_existing() preserves the original LUN name and path on ONTAP when netapp_manage_existing_rename_lun\u003dFalse.","commit_id":"58de352d0e40103ed247c621b8215bef84a62f3d"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"b719e0c725ba2b57f66bd73e896ee81c7f87a4ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f3eb93eb_48ab8edf","in_reply_to":"4f771b7c_33d1e143","updated":"2026-10-19 09:19:48.000000000","message":"Kept both sections for now as this patch introduces a new configuration option (features) to fix Bug #2161976 (fixes). Happy to adjust if core reviewers prefer only one.","commit_id":"58de352d0e40103ed247c621b8215bef84a62f3d"}],"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":"037a966b674dd41a577ec8a2a96e05266de493d0","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        volume \u003d fake_volume.fake_volume_obj(self.ctxt)"},{"line_number":1197,"context_line":"        existing_ref \u003d {\u0027source-name\u0027: \u0027/vol/vol0/lun0\u0027, \u0027preserve_name\u0027: True}"},{"line_number":1198,"context_line":"        mock_lun \u003d block_base.NetAppLun("},{"line_number":1199,"context_line":"            \u0027lun0\u0027, \u0027lun0\u0027, \u00273\u0027, {\u0027UUID\u0027: \u0027fake_uuid\u0027, \u0027Path\u0027: \u0027/vol/vol0/lun0\u0027})"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        self.mock_object(na_utils, \u0027get_volume_extra_specs\u0027, return_value\u003d{})"},{"line_number":1202,"context_line":"        self.mock_object(self.library, \u0027_check_volume_type_for_lun\u0027, return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b4b1853_86f97549","line":1199,"updated":"2026-08-08 21:13:38.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"730b659fe769ce17f22eb30406697a951026a246"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"037a966b674dd41a577ec8a2a96e05266de493d0","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"            \u0027lun0\u0027, \u0027lun0\u0027, \u00273\u0027, {\u0027UUID\u0027: \u0027fake_uuid\u0027, \u0027Path\u0027: \u0027/vol/vol0/lun0\u0027})"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        self.mock_object(na_utils, \u0027get_volume_extra_specs\u0027, return_value\u003d{})"},{"line_number":1202,"context_line":"        self.mock_object(self.library, \u0027_check_volume_type_for_lun\u0027, return_value\u003dTrue)"},{"line_number":1203,"context_line":"        self.mock_object(self.library, \u0027_setup_qos_for_volume\u0027, return_value\u003dNone)"},{"line_number":1204,"context_line":"        self.mock_object(na_utils, \u0027get_qos_policy_group_name_from_info\u0027, return_value\u003dNone)"},{"line_number":1205,"context_line":"        self.mock_object(self.library, \u0027_add_lun_to_table\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae7881b1_f87655ea","line":1202,"updated":"2026-08-08 21:13:38.000000000","message":"pep8: E501 line too long (87 \u003e 79 characters)","commit_id":"730b659fe769ce17f22eb30406697a951026a246"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"037a966b674dd41a577ec8a2a96e05266de493d0","unresolved":false,"context_lines":[{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        self.mock_object(na_utils, \u0027get_volume_extra_specs\u0027, return_value\u003d{})"},{"line_number":1202,"context_line":"        self.mock_object(self.library, \u0027_check_volume_type_for_lun\u0027, return_value\u003dTrue)"},{"line_number":1203,"context_line":"        self.mock_object(self.library, \u0027_setup_qos_for_volume\u0027, return_value\u003dNone)"},{"line_number":1204,"context_line":"        self.mock_object(na_utils, \u0027get_qos_policy_group_name_from_info\u0027, return_value\u003dNone)"},{"line_number":1205,"context_line":"        self.mock_object(self.library, \u0027_add_lun_to_table\u0027)"},{"line_number":1206,"context_line":"        self.mock_object(self.library, \u0027_get_volume_model_update\u0027, return_value\u003d{})"}],"source_content_type":"text/x-python","patch_set":1,"id":"39cdb5ee_a65a77a5","line":1203,"updated":"2026-08-08 21:13:38.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"730b659fe769ce17f22eb30406697a951026a246"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"037a966b674dd41a577ec8a2a96e05266de493d0","unresolved":false,"context_lines":[{"line_number":1201,"context_line":"        self.mock_object(na_utils, \u0027get_volume_extra_specs\u0027, return_value\u003d{})"},{"line_number":1202,"context_line":"        self.mock_object(self.library, \u0027_check_volume_type_for_lun\u0027, return_value\u003dTrue)"},{"line_number":1203,"context_line":"        self.mock_object(self.library, \u0027_setup_qos_for_volume\u0027, return_value\u003dNone)"},{"line_number":1204,"context_line":"        self.mock_object(na_utils, \u0027get_qos_policy_group_name_from_info\u0027, return_value\u003dNone)"},{"line_number":1205,"context_line":"        self.mock_object(self.library, \u0027_add_lun_to_table\u0027)"},{"line_number":1206,"context_line":"        self.mock_object(self.library, \u0027_get_volume_model_update\u0027, return_value\u003d{})"},{"line_number":1207,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c6239c18_d0a15f8e","line":1204,"updated":"2026-08-08 21:13:38.000000000","message":"pep8: E501 line too long (92 \u003e 79 characters)","commit_id":"730b659fe769ce17f22eb30406697a951026a246"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"037a966b674dd41a577ec8a2a96e05266de493d0","unresolved":false,"context_lines":[{"line_number":1203,"context_line":"        self.mock_object(self.library, \u0027_setup_qos_for_volume\u0027, return_value\u003dNone)"},{"line_number":1204,"context_line":"        self.mock_object(na_utils, \u0027get_qos_policy_group_name_from_info\u0027, return_value\u003dNone)"},{"line_number":1205,"context_line":"        self.mock_object(self.library, \u0027_add_lun_to_table\u0027)"},{"line_number":1206,"context_line":"        self.mock_object(self.library, \u0027_get_volume_model_update\u0027, return_value\u003d{})"},{"line_number":1207,"context_line":""},{"line_number":1208,"context_line":"        self.library.manage_existing(volume, existing_ref)"},{"line_number":1209,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"be23889a_99e7f834","line":1206,"updated":"2026-08-08 21:13:38.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"730b659fe769ce17f22eb30406697a951026a246"}],"cinder/volume/drivers/netapp/dataontap/block_base.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"037a966b674dd41a577ec8a2a96e05266de493d0","unresolved":false,"context_lines":[{"line_number":921,"context_line":""},{"line_number":922,"context_line":"        path \u003d lun.get_metadata_property(\u0027Path\u0027)"},{"line_number":923,"context_line":"        preserve_name \u003d ("},{"line_number":924,"context_line":"            strutils.bool_from_string(existing_ref.get(\u0027preserve_name\u0027, False)) or"},{"line_number":925,"context_line":"            not self.configuration.netapp_manage_existing_rename_lun)"},{"line_number":926,"context_line":"        if lun.name \u003d\u003d volume[\u0027name\u0027] or preserve_name:"},{"line_number":927,"context_line":"            new_path \u003d path"}],"source_content_type":"text/x-python","patch_set":1,"id":"67329096_954896be","line":924,"updated":"2026-08-08 21:13:38.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"730b659fe769ce17f22eb30406697a951026a246"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"d5f483464e7302b75c28de114c1b05a0cefacc6e","unresolved":true,"context_lines":[{"line_number":926,"context_line":"            strutils.bool_from_string("},{"line_number":927,"context_line":"                existing_ref.get(\u0027preserve_name\u0027, False)) or"},{"line_number":928,"context_line":"            not self.configuration.netapp_manage_existing_rename_lun)"},{"line_number":929,"context_line":"        if lun.name \u003d\u003d volume[\u0027name\u0027] or preserve_name:"},{"line_number":930,"context_line":"            new_path \u003d path"},{"line_number":931,"context_line":"            LOG.info(\"LUN with given ref %s need not be renamed \""},{"line_number":932,"context_line":"                     \"during manage operation.\", existing_ref)"}],"source_content_type":"text/x-python","patch_set":4,"id":"749ff632_2e959a00","line":929,"updated":"2026-10-25 14:28:11.000000000","message":"Skipping move_lun leaves the LUN basename unchanged. _add_lun_to_table()\nat line 675 stores lun_table[lun.name], and lun.name is the path\nbasename from _extract_lun_info(). volume[\u0027name\u0027] is\nvolume_name_template % name_id (cinder/objects/volume.py:187), which\ndoes not match that basename.\n\n_get_lun_from_table() (line 677) misses, reloads get_lun_list(), and\nstill misses, because _extract_and_populate_luns() keys only by\nbasename. This happens on the next call in this process. A restart is\nnot required.\n\nChecked callers:\n\n- create_export() line 351 returns {\u0027provider_location\u0027: None}.\n  VolumeManager.initialize_connection() (manager.py:1984) saves that.\n  provider_location is nullable (objects/volume.py:113).\n- iSCSI attach then executes line 1022:\n  volume[\u0027provider_location\u0027].split(\u0027:\u0027)[1]\n  and raises AttributeError. It does not reach _map_lun().\n- FC attach calls _map_lun() at line 1186. _map_lun() line 473 does\n  metadata[\u0027Path\u0027] after _get_lun_attr() (line 698) caught\n  VolumeNotFound and returned None. That is a TypeError.\n- delete: _delete_lun() line 326 logs \"No entry in LUN table\" and\n  returns. It does not call destroy_lun(). cmode delete_volume()\n  returns success. VolumeManager.delete_volume() then calls\n  volume.destroy(); db volume_destroy() sets status\u003d\u0027deleted\u0027 and\n  deleted\u003dTrue (cinder/db/api.py:2123) and commits the quota release.\n  The ONTAP LUN is still there.\n- unmanage() line 997 calls _get_lun_from_table(volume[\u0027name\u0027]), which\n  raises VolumeNotFound. The manager sets error_unmanaging\n  (manager.py:1026).\n- extend: _extend_volume() line 762 raises VolumeNotFound. The manager\n  sets error_extending (manager.py:3027).\n- snapshot: _create_snapshot() line 376 looks up snapshot[\u0027volume_name\u0027],\n  which is volume.name (objects/snapshot.py:101). VolumeNotFound.\n  The manager sets the snapshot to error (manager.py:1261).\n- clone: create_cloned_volume() looks up src_vref[\u0027name\u0027] and raises\n  VolumeNotFound.\n- migrate: block_cmode._move_lun() passes volume.name to\n  start_lun_move(), which builds /vol/\u003cpool\u003e/\u003cvolume.name\u003e\n  (client_cmode_rest.py:3166). That path is not the preserved LUN.\n\nReturning provider_location from manage_existing() does not fix delete,\nextend, snapshot, clone, or migrate. Those calls pass only the Cinder\nname into _get_lun_from_table() and never read provider_location.\n\nPlease keep NetAppLun.name as the ONTAP basename. _create_snapshot()\npasses lun.name to _clone_lun(). Add a second lun_table key,\nlun_table[volume[\u0027name\u0027]], pointing at that same object, and teach\n_extract_and_populate_luns() to rebuild it from data get_lun_list()\nreturns. _get_lun_from_table() does not receive the volume.\ncheck_for_setup_error() starts from an empty lun_table, and both the\niSCSI and FC drivers set SUPPORTS_ACTIVE_ACTIVE \u003d True, so an alias\nthat exists only in the managing process is not enough. _delete_lun()\npops only the key it looked up; pop both keys.\n\nThe log at line 931 says the LUN need not be renamed when the names\ndiffer and preservation was requested. Please log the preserved path\nand volume[\u0027name\u0027].\n\nbool_from_string() is called with the default strict\u003dFalse. In the\noslo_utils used here, a non-string is passed through str() first.\nTRUE_STRINGS are 1, t, true, on, y, yes. An unrecognized value returns\nFalse, so the LUN is renamed, with no ManageExistingInvalidReference.\nPlease use strict\u003dTrue and raise ManageExistingInvalidReference.\npreserve_name cannot force a rename when\nnetapp_manage_existing_rename_lun is False: the condition is\nhint OR not config.","commit_id":"58de352d0e40103ed247c621b8215bef84a62f3d"}],"cinder/volume/drivers/netapp/options.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"037a966b674dd41a577ec8a2a96e05266de493d0","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                help\u003d(\u0027When True, manage_existing renames the backend LUN \u0027"},{"line_number":207,"context_line":"                      \u0027path to match Cinder volume name if they differ. \u0027"},{"line_number":208,"context_line":"                      \u0027Set to False to preserve the original LUN name and \u0027"},{"line_number":209,"context_line":"                      \u0027path on ONTAP (e.g. to preserve SnapMirror relationships).\u0027)), ]"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"netapp_img_cache_opts \u003d ["},{"line_number":212,"context_line":"    cfg.IntOpt(\u0027netapp_nfs_image_cache_cleanup_interval\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4db3d464_a8a88b4c","line":209,"updated":"2026-08-08 21:13:38.000000000","message":"pep8: E501 line too long (87 \u003e 79 characters)","commit_id":"730b659fe769ce17f22eb30406697a951026a246"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"d5f483464e7302b75c28de114c1b05a0cefacc6e","unresolved":true,"context_lines":[{"line_number":223,"context_line":"                default\u003dTrue,"},{"line_number":224,"context_line":"                help\u003d(\u0027When True, manage_existing renames the backend LUN \u0027"},{"line_number":225,"context_line":"                      \u0027path to match Cinder volume name if they differ. \u0027"},{"line_number":226,"context_line":"                      \u0027Set to False to preserve the original LUN name and \u0027"},{"line_number":227,"context_line":"                      \u0027path on ONTAP (e.g. to preserve SnapMirror \u0027"},{"line_number":228,"context_line":"                      \u0027relationships).\u0027)), ]"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"e7d8e48f_43398daf","line":226,"updated":"2026-10-25 14:28:11.000000000","message":"The help text says False preserves SnapMirror relationships. With the\ncode in block_base.manage_existing(), False makes manage succeed and\nthen delete marks the Cinder volume deleted while the LUN remains.\nPlease describe that False is unsafe until name lookup works, or drop\nthis option until that lookup exists.\n\nOnly block_base.manage_existing() reads this option. NFS\nmanage_existing() still renames whenever the file name differs\n(nfs_base.py:1156). NetAppCmodeNVMeDriver.get_driver_options() returns\nnetapp_cluster_opts (nvme_cmode.py:49) and NetAppNVMeStorageLibrary\nhas no manage_existing(), so the NVMe driver advertises an option it\ndoes not implement.","commit_id":"58de352d0e40103ed247c621b8215bef84a62f3d"}]}
