)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"c0ab7a7e899aff42d15b7f3926ee4b932cffbf77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ac75b7cc_221d0177","updated":"2026-01-13 07:40:16.000000000","message":"Dear Mr. fossdev and Mr. zong:\n\n\n    Happy New Year!\n\n    I am a software development engineer from ZTE. We have recently developed a plugin for the company\u0027s B100 storage, and the corresponding code is now ready to be contributed to the open-source community. We kindly request your review as experts. If everything looks good, please proceed with the scoring and merging process. Thank you for your support!\n\n    The newly developed plugin code already complies with community standards, has been integrated and validated in the open-source version of the environment, and has successfully passed test cases including smoke, storage, and object-storage.\n\n    We look forward to your response. Wishing you a pleasant life and smooth work!\n\n\n\n    link: https://review.opendev.org/c/openstack/cinder/+/969207\n\n\n\n\n\n                                                                                                                                                                                                                Xiangzhi Meng\n\n                                                                                                                                                                                                                     2026.1.13","commit_id":"846a1531f5703fb09f3da77d049557769e4d32f1"},{"author":{"_account_id":38568,"name":"Xue.MingZhong","display_name":"ZTE storage CI","email":"coenocyte@hotmail.com","username":"xuemzh"},"change_message_id":"60968b3d782ed2194399af49b7e8b11b717b774d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"069303f7_656c014a","updated":"2026-01-19 06:23:04.000000000","message":"recheck zte driver","commit_id":"846a1531f5703fb09f3da77d049557769e4d32f1"},{"author":{"_account_id":38568,"name":"Xue.MingZhong","display_name":"ZTE storage CI","email":"coenocyte@hotmail.com","username":"xuemzh"},"change_message_id":"7a99e8259da92e7f9813f6b70aef658483d575ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7341ab06_d3835f89","updated":"2026-01-19 08:13:35.000000000","message":"recheck zte driver","commit_id":"846a1531f5703fb09f3da77d049557769e4d32f1"},{"author":{"_account_id":38568,"name":"Xue.MingZhong","display_name":"ZTE storage CI","email":"coenocyte@hotmail.com","username":"xuemzh"},"change_message_id":"87df8bd3b9866006415c1c2fcb5919fd13620e92","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"dd521a68_ab180362","updated":"2026-01-19 08:25:11.000000000","message":"recheck zte driver","commit_id":"846a1531f5703fb09f3da77d049557769e4d32f1"},{"author":{"_account_id":38568,"name":"Xue.MingZhong","display_name":"ZTE storage CI","email":"coenocyte@hotmail.com","username":"xuemzh"},"change_message_id":"9bbbc050f982ad00b02554c81574c8b91bf8c492","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ef4d0a85_70e69f1e","updated":"2026-01-19 06:27:38.000000000","message":"recheck zte driver","commit_id":"846a1531f5703fb09f3da77d049557769e4d32f1"},{"author":{"_account_id":38568,"name":"Xue.MingZhong","display_name":"ZTE storage CI","email":"coenocyte@hotmail.com","username":"xuemzh"},"change_message_id":"2e46c0b28e53c3519080f39609f195510d8290e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"6a5ebe52_82fbe0f7","in_reply_to":"dd521a68_ab180362","updated":"2026-01-19 08:28:39.000000000","message":"Done","commit_id":"846a1531f5703fb09f3da77d049557769e4d32f1"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"f285fa0309ff4bf2ee2ad15c8232ddcf6193d875","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8a47f6ec_692ad63c","updated":"2026-02-05 11:12:04.000000000","message":"Dear Mr. Brian Rosmaita and Mr. Yian Zong:\n    I am a software development engineer from ZTE. We have recently developed a plugin for the company\u0027s B100 storage, and the corresponding code is now ready to be contributed to the open-source community. We kindly request your review as experts. If everything looks good, please proceed with the scoring and merging process. Thank you for your support!\n\n    The newly developed plugin code already complies with community standards, has been integrated and validated in the open-source version of the environment, and has successfully passed test cases including smoke, storage, and object-storage.\n\n    We look forward to your response. Wishing you a pleasant life and smooth work!","commit_id":"d1438decd4fa6f6ed21a2503326f83f48832ba14"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"626955ab_70007e86","updated":"2026-03-04 18:12:46.000000000","message":"Does this contain LLM-generated code?","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38568,"name":"Xue.MingZhong","display_name":"ZTE storage CI","email":"coenocyte@hotmail.com","username":"xuemzh"},"change_message_id":"e5bd042e4cd69d8f79eaf01ee9200b97c48f71cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"4a25ed7b_814e704d","updated":"2026-03-18 07:36:28.000000000","message":"recheck zte driver","commit_id":"bc8c84d1ada6eb70b4c1865e3e89f580da9b7683"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"93c05edf_258b762d","updated":"2026-03-20 08:47:58.000000000","message":"recheck zte driver","commit_id":"de8a6a9b4b42473e9530852f1359a8a24e1bf7d1"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"e0124eb37c82cb6219c6c77ec0dab82e001de89c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":28,"id":"a45dac94_25d0635d","updated":"2026-03-26 09:09:53.000000000","message":"@interface.volumedriver decorator is required in classes for driver registration and official Cinder driver status.\n\nall cinder drivers use this decorator,so i think it should be added to maintain consistency.","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"c7aeba18071c806b975bd40e618d97b33f3c3f4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"5b6fbd64_69e2e19b","updated":"2026-03-25 09:08:05.000000000","message":"Also update the support matrix.\npls follow https://docs.openstack.org/cinder/latest/contributor/new_driver_checklist.html","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"3176feaef4131056d79c34ee46f589eb3ea6dd6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"8efef42e_1319158e","updated":"2026-03-25 08:56:32.000000000","message":"pls add release notes which explains about the new driver and protocols supported.","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"1f9cd35b_71885c93","in_reply_to":"5b6fbd64_69e2e19b","updated":"2026-04-07 05:37:46.000000000","message":"Thank you for your suggestion. We have updated the feature list and configuration description for the new driver in accordance with the community\u0027s requirements","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"15c733e6_81a4d879","in_reply_to":"a45dac94_25d0635d","updated":"2026-04-07 05:37:46.000000000","message":"Thank you, it has been resolved","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"e5a85218bd1e50350beeced276a91c5a382f3848","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"528447d8_38c3ab31","updated":"2026-04-13 06:45:19.000000000","message":"LGTM","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"b96f8bd2_0628dad2","updated":"2026-04-07 05:37:46.000000000","message":"recheck zte driver","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"2ee6aabcb8fab9a88b54243c64110bc140abfc01","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"67149273_843efa7d","updated":"2026-04-16 08:46:02.000000000","message":"recheck zte driver","commit_id":"e5477a63170545581194c3134385f683b8bdc995"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"86d93ea4a8b5efdd6701b916cbcbb4a4cb8b9d67","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"9824a8aa_f6acdc7a","updated":"2026-04-16 10:49:29.000000000","message":"recheck zte driver","commit_id":"e5477a63170545581194c3134385f683b8bdc995"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"527163d68cdfb47d37329434f69eb4a6649678a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"0cfd7e0a_3bf7bf8b","updated":"2026-05-20 06:34:36.000000000","message":"recheck zte driver","commit_id":"3d7e1cd9bc49db07325f8434aed225441ef4ebd9"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"f6123312dccb730b758a525ceeb3dacbdbb1726a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"78815fe1_74fec8c6","updated":"2026-05-20 02:40:29.000000000","message":"recheck zte driver","commit_id":"3d7e1cd9bc49db07325f8434aed225441ef4ebd9"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"6a85f79e2bb06b0a69b535ba9d6023b80f0e941f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"ce1a3397_ee787dbc","updated":"2026-05-20 05:58:10.000000000","message":"recheck zte driver","commit_id":"3d7e1cd9bc49db07325f8434aed225441ef4ebd9"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"ea2a44ea6177df8836b341ae4e2cb0b22483f01e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"fd843b90_dd2f654c","updated":"2026-05-21 04:13:11.000000000","message":"this required functional tests and probably tempest tests as well.","commit_id":"a2e39b2fa1db51398ffcdcf7544cc812b91cb36c"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"e4fd20f5fcc6f5271d7d59bed471a983c1945631","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":40,"id":"409f7c29_e78320e7","updated":"2026-06-05 10:33:36.000000000","message":"no functional tests for new driver","commit_id":"386ee59c8d2b384f1d224d7bf56c4eaf1241aa22"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"f7be667fe1e0acef4581e35cd1d4b3d24e4f62e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":40,"id":"d08b6083_8955a50a","updated":"2026-06-05 06:46:18.000000000","message":"recheck zte driver","commit_id":"386ee59c8d2b384f1d224d7bf56c4eaf1241aa22"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b2016681fa316628389d42d2972b28539276aee1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":40,"id":"8e102f13_4895451c","in_reply_to":"409f7c29_e78320e7","updated":"2026-06-05 14:11:55.000000000","message":"We don\u0027t normally add functional tests for drivers, what do you mean here?","commit_id":"386ee59c8d2b384f1d224d7bf56c4eaf1241aa22"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"40b8a52a83840af572c1b8085e3f0d1cd818bac3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":40,"id":"bf8cfd38_47dfaca8","in_reply_to":"8e102f13_4895451c","updated":"2026-06-06 05:35:54.000000000","message":"yeah, historically we haven\u0027t required functional tests for drivers.\nI have been trying to shift that direction though, not as a hard requirement yet but as a quality bar we should work toward.\n\nmy thinking, for new drivers especially, functional test catch integration issues that unit test miss (being heavily depend on mocks) like confs edge cases, actual flow validation. \n\nthis is important for new drivers, because with new drivers we have least confidence - no existing community or  prod track record, func test gives us some baseline - does this actually work end-to-end.","commit_id":"386ee59c8d2b384f1d224d7bf56c4eaf1241aa22"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"3def6c8c2aafecf733dc76b67cdfe87024d07632","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":40,"id":"679fc87a_64c79853","in_reply_to":"bf8cfd38_47dfaca8","updated":"2026-06-11 05:21:31.000000000","message":"The CI pipeline will run some functional tests","commit_id":"386ee59c8d2b384f1d224d7bf56c4eaf1241aa22"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"92da82b5b9d22b1d654066d076e53c78d7362a8c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":41,"id":"4851cdd6_efcdca7e","updated":"2026-06-09 17:25:09.000000000","message":"Also note that your CI system should NOT be voting here. No vendor CIs vote.","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":41,"id":"b3274b40_0e1e650d","updated":"2026-06-08 19:38:17.000000000","message":"There area few things that need resolving before this can move forward.","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"222f31fc_6210b1e4","in_reply_to":"4851cdd6_efcdca7e","updated":"2026-06-11 05:19:52.000000000","message":"OK","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"3de2dbee_b47f9b96","in_reply_to":"b3274b40_0e1e650d","updated":"2026-06-11 05:19:52.000000000","message":"Thank you very much for your valuable feedback","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"49c893a5_13d93e74","updated":"2026-06-11 05:19:52.000000000","message":"recheck zte driver","commit_id":"5ecbedbc05a7110061ecede7966606cf8054e44e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"6e8a2ad22d52ca40d362f04517b8d17a9923e44e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"1d8653fd_40ee3e65","updated":"2026-06-12 15:13:50.000000000","message":"Unit tests are failing due to duplicated san_login option:\n\noslo_config.cfg.DuplicateOptError: duplicate option: san_login","commit_id":"a6c100f56c5a94a78f30d1d4e62c308530f52d51"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d1f0c038fe57540d55cc2de63d8aa13929d4c897","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"d6c0c0e5_009a824b","updated":"2026-06-15 00:41:40.000000000","message":"recheck zte driver","commit_id":"27ce336679fe17100354bcffa1096da600044ebf"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e9c07b6485bf7ac66b3e85f0779507a5a804e418","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"d7668df0_1a709937","updated":"2026-07-14 18:41:28.000000000","message":"Glad to see that you have your third party CI working, but there are 2 issues with it:\n1. It should not be voting on patches; it should just report test results\n2. It should be running the cinder-tempest-plugin tests in addition to the \"regular\" suite of tempest tests","commit_id":"2d7c518c0c08fc1ffa17b71f26b361056fb6f999"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"b115af1a410001167673ba5f5f40e088a7db71d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"6c791acd_70d19b4c","updated":"2026-08-17 06:02:52.000000000","message":"recheck zte driver","commit_id":"2d7c518c0c08fc1ffa17b71f26b361056fb6f999"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"3d979abf095fb55a00307dfff235989eb2d8b4d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"b30c74b6_11786550","updated":"2026-08-10 01:31:22.000000000","message":"recheck zte driver","commit_id":"2d7c518c0c08fc1ffa17b71f26b361056fb6f999"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"158e6aadbc2eed15a38459bea0e5ff933aa1375b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"94551f5a_b57321bb","in_reply_to":"d7668df0_1a709937","updated":"2026-08-24 07:05:14.000000000","message":"Thank you for your valuable feedback. We have made corrections according to the review comments, removed the CI voting, and enabled the cinder_tempest_plugin test cases.","commit_id":"2d7c518c0c08fc1ffa17b71f26b361056fb6f999"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"36336630f4d44b6a068ce6837566b6ae31ac87b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"315a5063_6878237d","updated":"2026-08-18 07:54:52.000000000","message":"recheck zte driver","commit_id":"2b4542b5c338efdc15e02c1a20a35fb7bbe47ee5"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"da556526c0b93e9e802b844388ca3cacce3d078a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":52,"id":"31959805_0cb69779","updated":"2026-08-26 08:31:06.000000000","message":"recheck zte driver","commit_id":"98c701a86feb32fca1bceda9e9a0c156f0cd8e92"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a592ae0544042cc1bfcff7bfe49e48f53094278c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":52,"id":"3fe60d5a_ba61bb7d","updated":"2026-08-26 07:09:09.000000000","message":"recheck zte driver","commit_id":"98c701a86feb32fca1bceda9e9a0c156f0cd8e92"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"e5f6fd7dc1a6deeade7a66f6854241b6f44d5bb3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":53,"id":"fd414cb6_a31c0420","updated":"2026-08-27 07:59:56.000000000","message":"recheck zte driver","commit_id":"aba79ddda61fc1d04626c432e77fdf6b61511295"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"b6b9d03df1785b88294ab8f154ded39e86c85a7f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":53,"id":"d5ab81f8_b73f53cc","updated":"2026-08-27 08:06:43.000000000","message":"run-Quobyte CI","commit_id":"aba79ddda61fc1d04626c432e77fdf6b61511295"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a177b61142601603b23852d24d7ecb5bf45bdcee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":56,"id":"07248de4_f9b98099","updated":"2026-09-04 03:26:22.000000000","message":"Thank you very much for taking time from your busy schedule to provide such thorough and professional review and guidance. The relevant issues have been carefully reviewed and revised accordingly. Once again, thank you for your invaluable input.","commit_id":"12c3db963bd294bcd385f1b58299065284b9bb41"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d4ce3f637e080582dc1dc56d2999a1cd738b058c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":58,"id":"8fd504c8_ab427ec7","updated":"2026-09-05 08:15:17.000000000","message":"recheck zte driver","commit_id":"1f3475d844708ff5b7d5437cc287a1f3b48c56b1"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"c9b0c2e2907acc6be06377c2736b590c2da36982","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":61,"id":"885c43e0_821111bd","updated":"2026-09-23 08:31:30.000000000","message":"recheck zte driver","commit_id":"8274970e2a0000108f8f1658e7c7f0ae662cd522"}],"cinder/tests/unit/volume/drivers/zte/vstorage/test_vstorage.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":469,"context_line":"                          self.driver.revert_to_snapshot,"},{"line_number":470,"context_line":"                          \u0027context\u0027, \u0027volume\u0027, ss)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def test_clone_volume_failed_when_size_err(self):"},{"line_number":473,"context_line":"        vol \u003d {\"name\": \"vol1\", \"size\": \"2\"}"},{"line_number":474,"context_line":"        src_vref \u003d {\"name\": \"vol2\", \"size\": \"1\"}"},{"line_number":475,"context_line":"        self.assertRaises(exception.VolumeDriverException,"}],"source_content_type":"text/x-python","patch_set":59,"id":"760c207a_c524ce1b","line":472,"updated":"2026-09-21 04:27:01.000000000","message":"vol \u003d {\"name\": \"vol1\", \"size\": \"2\"}\nsrc_vref \u003d {\"name\": \"vol2\", \"size\": \"1\"}\nself.assertRaises(..., create_cloned_volume, vol, src_vref)\nDriver check is if volume[\u0027size\u0027] \u003c src_vref[\u0027size\u0027] (vstorage.py L399). Clone 2 vs source 1 is valid. This only fails because unmocked REST to 1.1.1.1 errors. Same pattern at L569 (test_create_vol_from_ss_fail_when_size_err). Invert the sizes.","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                          self.driver.revert_to_snapshot,"},{"line_number":470,"context_line":"                          \u0027context\u0027, \u0027volume\u0027, ss)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def test_clone_volume_failed_when_size_err(self):"},{"line_number":473,"context_line":"        vol \u003d {\"name\": \"vol1\", \"size\": \"2\"}"},{"line_number":474,"context_line":"        src_vref \u003d {\"name\": \"vol2\", \"size\": \"1\"}"},{"line_number":475,"context_line":"        self.assertRaises(exception.VolumeDriverException,"}],"source_content_type":"text/x-python","patch_set":59,"id":"fdc06dbf_18a4503f","line":472,"in_reply_to":"760c207a_c524ce1b","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":2112,"context_line":"                              self.driver.create_cloned_volume,"},{"line_number":2113,"context_line":"                              volume, src_vref)"},{"line_number":2114,"context_line":""},{"line_number":2115,"context_line":"    def test_initialize_connection_not_metro(self):"},{"line_number":2116,"context_line":"        \"\"\"Test initialize_connection when metro not supported.\"\"\""},{"line_number":2117,"context_line":"        volume \u003d {\u0027name\u0027: \u0027test_vol\u0027}"},{"line_number":2118,"context_line":"        connector \u003d {\u0027initiator\u0027: \u0027test_initiator\u0027}"}],"source_content_type":"text/x-python","patch_set":59,"id":"d9b33038_b3c472f5","line":2115,"updated":"2026-09-21 04:27:01.000000000","message":"test_initialize_connection_not_metro / test_terminate_connection_not_metro patch self.driver.initialize_connection / terminate_connection while calling those methods. Production code never runs. Patch _support_metro, not the method under test.","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":2112,"context_line":"                              self.driver.create_cloned_volume,"},{"line_number":2113,"context_line":"                              volume, src_vref)"},{"line_number":2114,"context_line":""},{"line_number":2115,"context_line":"    def test_initialize_connection_not_metro(self):"},{"line_number":2116,"context_line":"        \"\"\"Test initialize_connection when metro not supported.\"\"\""},{"line_number":2117,"context_line":"        volume \u003d {\u0027name\u0027: \u0027test_vol\u0027}"},{"line_number":2118,"context_line":"        connector \u003d {\u0027initiator\u0027: \u0027test_initiator\u0027}"}],"source_content_type":"text/x-python","patch_set":59,"id":"f3972778_3e2e8dc8","line":2115,"in_reply_to":"d9b33038_b3c472f5","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"}],"cinder/volume/drivers/zte/vstorage/vstorage.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"16793ba2128713227bbf927919d134a4bab1d21c","unresolved":true,"context_lines":[{"line_number":455,"context_line":"        metadata[\u0027metadata\u0027] \u003d self._add_metadata(src_meta, dest_meta)"},{"line_number":456,"context_line":"        return metadata"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"# Started by AICoder, pid:186a4s438b38bc314f3e0a4590fe485cb590113e"},{"line_number":459,"context_line":"    def _initialize_connection(self, volume, connector, storage_protocol):"},{"line_number":460,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":461,"context_line":"        nqn \u003d connector[\u0027nqn\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"fc278854_b6929aeb","line":458,"updated":"2026-03-02 19:23:00.000000000","message":"Please see https://openinfra.org/legal/ai-policy and add relevant info to the commit message.","commit_id":"d1438decd4fa6f6ed21a2503326f83f48832ba14"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        metadata[\u0027metadata\u0027] \u003d self._add_metadata(src_meta, dest_meta)"},{"line_number":456,"context_line":"        return metadata"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"# Started by AICoder, pid:186a4s438b38bc314f3e0a4590fe485cb590113e"},{"line_number":459,"context_line":"    def _initialize_connection(self, volume, connector, storage_protocol):"},{"line_number":460,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":461,"context_line":"        nqn \u003d connector[\u0027nqn\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9631e3a8_149f8587","line":458,"in_reply_to":"fc278854_b6929aeb","updated":"2026-03-20 08:47:58.000000000","message":"Thank you for your review. In accordance with community guidelines, all relevant identifiers and code have been removed. AI-assisted development tools were used, followed by manual modifications and improvements. After debugging and testing, no issues remain.","commit_id":"d1438decd4fa6f6ed21a2503326f83f48832ba14"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"ae9d3462bbe2aaa7546cea9c63f73663817a26d5","unresolved":true,"context_lines":[{"line_number":159,"context_line":"            \u0027pool\u0027: self.pool,"},{"line_number":160,"context_line":"            \u0027vendor_name\u0027: self.vendor_name,"},{"line_number":161,"context_line":"            \u0027user\u0027: self.user,"},{"line_number":162,"context_line":"            \u0027pwd\u0027: self.pwd,"},{"line_number":163,"context_line":"            \u0027gwnode_name\u0027: self.gwnode_name,"},{"line_number":164,"context_line":"            \u0027driver_use_ssl\u0027: self.driver_use_ssl,"},{"line_number":165,"context_line":"            \u0027verification\u0027: self.verification,"}],"source_content_type":"text/x-python","patch_set":23,"id":"4f2fd4ae_5606e2e9","line":162,"updated":"2026-03-17 05:07:59.000000000","message":"cleartext password in dict passed to RestClient. If i look from previous code self.pwd \u003d base64.b64decode(self.configuration.safe_get(\n    \u0027vstorage_pwd\u0027)).decode(\u0027utf-8\u0027). No encoding is present for passwd. Is this correct approach?","commit_id":"23b559c9ecf28457553008e2d0a051c3b917cde6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            \u0027pool\u0027: self.pool,"},{"line_number":160,"context_line":"            \u0027vendor_name\u0027: self.vendor_name,"},{"line_number":161,"context_line":"            \u0027user\u0027: self.user,"},{"line_number":162,"context_line":"            \u0027pwd\u0027: self.pwd,"},{"line_number":163,"context_line":"            \u0027gwnode_name\u0027: self.gwnode_name,"},{"line_number":164,"context_line":"            \u0027driver_use_ssl\u0027: self.driver_use_ssl,"},{"line_number":165,"context_line":"            \u0027verification\u0027: self.verification,"}],"source_content_type":"text/x-python","patch_set":23,"id":"85d678b9_5b193fb9","line":162,"in_reply_to":"4f2fd4ae_5606e2e9","updated":"2026-03-20 08:47:58.000000000","message":"Thank you for your suggestion. It has been revised to decrypt only when in use, to avoid the risk of inscription password leakage","commit_id":"23b559c9ecf28457553008e2d0a051c3b917cde6"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"ae9d3462bbe2aaa7546cea9c63f73663817a26d5","unresolved":true,"context_lines":[{"line_number":284,"context_line":"        self.update_qos(new_qos, volume)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @utils.synchronized("},{"line_number":287,"context_line":"        \"locked-vstorage-update-qos-{volume[\u0027id\u0027]}\", external\u003dTrue)"},{"line_number":288,"context_line":"    def update_qos(self, new_qos, volume):"},{"line_number":289,"context_line":"        vol_info \u003d self.RestClient.get_volume(volume)"},{"line_number":290,"context_line":"        if vol_info and vol_info.get(\u0027qos_stgy\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"379411b3_9b29f13a","line":287,"updated":"2026-03-17 05:07:59.000000000","message":"This is not f-string.String literal... so lock is always on same string.","commit_id":"23b559c9ecf28457553008e2d0a051c3b917cde6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        self.update_qos(new_qos, volume)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @utils.synchronized("},{"line_number":287,"context_line":"        \"locked-vstorage-update-qos-{volume[\u0027id\u0027]}\", external\u003dTrue)"},{"line_number":288,"context_line":"    def update_qos(self, new_qos, volume):"},{"line_number":289,"context_line":"        vol_info \u003d self.RestClient.get_volume(volume)"},{"line_number":290,"context_line":"        if vol_info and vol_info.get(\u0027qos_stgy\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"f3c6066a_9121c0fd","line":287,"in_reply_to":"379411b3_9b29f13a","updated":"2026-03-20 08:47:58.000000000","message":"Thank you very much. The lock used indeed had issues, and it has been modified to use a coordination distributed lock","commit_id":"23b559c9ecf28457553008e2d0a051c3b917cde6"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"e0124eb37c82cb6219c6c77ec0dab82e001de89c","unresolved":true,"context_lines":[{"line_number":25,"context_line":"from oslo_config import cfg"},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder import coordination"},{"line_number":29,"context_line":"from cinder import exception"},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":28,"id":"53cae22b_55d49f9f","line":28,"updated":"2026-03-26 09:09:53.000000000","message":"# add\nfrom cinder import interface","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_config import cfg"},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder import coordination"},{"line_number":29,"context_line":"from cinder import exception"},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":28,"id":"f6a5cf59_9eebd844","line":28,"in_reply_to":"53cae22b_55d49f9f","updated":"2026-04-07 05:37:46.000000000","message":"Thank you, it has been resolved","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"e0124eb37c82cb6219c6c77ec0dab82e001de89c","unresolved":true,"context_lines":[{"line_number":506,"context_line":"        self.RestClient.terminate_connect(volume, map_group_name)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"class VstorageNvmeTcpDriver(BaseVstorageDriver):"},{"line_number":510,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":511,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":512,"context_line":"        properties \u003d self._initialize_connection(volume, connector, \"tcp\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"0761fafb_c6c49ebf","line":509,"updated":"2026-03-26 09:09:53.000000000","message":"@interface.volumedriver","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        self.RestClient.terminate_connect(volume, map_group_name)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"class VstorageNvmeTcpDriver(BaseVstorageDriver):"},{"line_number":510,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":511,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":512,"context_line":"        properties \u003d self._initialize_connection(volume, connector, \"tcp\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"ab7bc15b_64dc7fbc","line":509,"in_reply_to":"0761fafb_c6c49ebf","updated":"2026-04-07 05:37:46.000000000","message":"Thank you, it has been resolved","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"e0124eb37c82cb6219c6c77ec0dab82e001de89c","unresolved":true,"context_lines":[{"line_number":524,"context_line":"        return self._stats"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"class VstorageNvmeRdmaDriver(BaseVstorageDriver):"},{"line_number":528,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":529,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":530,"context_line":"        properties \u003d self._initialize_connection(volume, connector, \"RoCEv2\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"98c74aad_f7b7429e","line":527,"updated":"2026-03-26 09:09:53.000000000","message":"@interface.volumedriver","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[{"line_number":524,"context_line":"        return self._stats"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"class VstorageNvmeRdmaDriver(BaseVstorageDriver):"},{"line_number":528,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":529,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":530,"context_line":"        properties \u003d self._initialize_connection(volume, connector, \"RoCEv2\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"eabfd174_bd95976a","line":527,"in_reply_to":"98c74aad_f7b7429e","updated":"2026-04-07 05:37:46.000000000","message":"Thank you, it has been resolved","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"e0124eb37c82cb6219c6c77ec0dab82e001de89c","unresolved":true,"context_lines":[{"line_number":776,"context_line":"        raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"class VstorageDriver(VstorageMetroDriver, BaseVstorageDriver):"},{"line_number":780,"context_line":"    BASE_DRIVER \u003d BaseVstorageDriver"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"ab3e7c81_ac30e9d6","line":779,"updated":"2026-03-26 09:09:53.000000000","message":"@interface.volumedriver","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"class VstorageDriver(VstorageMetroDriver, BaseVstorageDriver):"},{"line_number":780,"context_line":"    BASE_DRIVER \u003d BaseVstorageDriver"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"c4a2fc2d_46c7602c","line":779,"in_reply_to":"ab3e7c81_ac30e9d6","updated":"2026-04-07 05:37:46.000000000","message":"Thank you, it has been resolved","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":34598,"name":"Manojkatari","email":"mkatari@redhat.com","username":"mkatari"},"change_message_id":"e0124eb37c82cb6219c6c77ec0dab82e001de89c","unresolved":true,"context_lines":[{"line_number":780,"context_line":"    BASE_DRIVER \u003d BaseVstorageDriver"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"class VstorageFCDriver(VstorageMetroDriver, BaseVstorageFCDriver):"},{"line_number":784,"context_line":"    BASE_DRIVER \u003d BaseVstorageFCDriver"}],"source_content_type":"text/x-python","patch_set":28,"id":"52e18b9f_5186707d","line":783,"updated":"2026-03-26 09:09:53.000000000","message":"@interface.volumedriver","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d9f9608d7c6c72ec19cd86564c3c6344bcd24e59","unresolved":false,"context_lines":[{"line_number":780,"context_line":"    BASE_DRIVER \u003d BaseVstorageDriver"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"class VstorageFCDriver(VstorageMetroDriver, BaseVstorageFCDriver):"},{"line_number":784,"context_line":"    BASE_DRIVER \u003d BaseVstorageFCDriver"}],"source_content_type":"text/x-python","patch_set":28,"id":"be943cb9_5a375a5b","line":783,"in_reply_to":"52e18b9f_5186707d","updated":"2026-04-07 05:37:46.000000000","message":"Thank you, it has been resolved","commit_id":"d0ab726a1c9cb9290949192156d6ce915f8b5212"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bc70a8b823287357c6e3d2d2373d69aa15d7e681","unresolved":true,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027vstorage pool_name\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027vstorage_user\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027vstorage_user\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027vstorage_pwd\u0027,"},{"line_number":52,"context_line":"               secret\u003dTrue,"},{"line_number":53,"context_line":"               help\u003d\u0027vstorage_pwd\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027vstorage_gwnode_name\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"2736027b_419a6bac","line":51,"updated":"2026-04-14 20:40:45.000000000","message":"This should be renamed to vstorage_pwd -- all other drivers are calling this \"password\" instead of \"pwd\".\n\nBut, why duplicate these options into the driver and not just use san_login/san_password?","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"da61f3dd3ce8497fc37df380622bc761ef582641","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027vstorage pool_name\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027vstorage_user\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027vstorage_user\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027vstorage_pwd\u0027,"},{"line_number":52,"context_line":"               secret\u003dTrue,"},{"line_number":53,"context_line":"               help\u003d\u0027vstorage_pwd\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027vstorage_gwnode_name\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"5ea8d3da_8c70202f","line":51,"in_reply_to":"2736027b_419a6bac","updated":"2026-04-15 08:50:25.000000000","message":"Thank you for your suggestion. \u0027vstorage_pwd\u0027 is a storage configuration item and will not be modified","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d2d41341966a5455ddc009bf94a9bd086e224119","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027vstorage pool_name\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027vstorage_user\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027vstorage_user\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027vstorage_pwd\u0027,"},{"line_number":52,"context_line":"               secret\u003dTrue,"},{"line_number":53,"context_line":"               help\u003d\u0027vstorage_pwd\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027vstorage_gwnode_name\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"fdefaa36_b96ac803","line":51,"in_reply_to":"33df8cf4_5a2400df","updated":"2026-05-18 01:16:20.000000000","message":"Done","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2bcf070fae6b6281d4cbc23043ebffb6c3db32d0","unresolved":true,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027vstorage pool_name\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027vstorage_user\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027vstorage_user\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027vstorage_pwd\u0027,"},{"line_number":52,"context_line":"               secret\u003dTrue,"},{"line_number":53,"context_line":"               help\u003d\u0027vstorage_pwd\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027vstorage_gwnode_name\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"33df8cf4_5a2400df","line":51,"in_reply_to":"5ea8d3da_8c70202f","updated":"2026-05-15 12:51:29.000000000","message":"(Reopening)","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bc70a8b823287357c6e3d2d2373d69aa15d7e681","unresolved":true,"context_lines":[{"line_number":62,"context_line":"                     \u0027If False, use http for connection to backend storage.\u0027),"},{"line_number":63,"context_line":"    cfg.BoolOpt(\u0027vstorage_verification\u0027,"},{"line_number":64,"context_line":"                default\u003dFalse,"},{"line_number":65,"context_line":"                help\u003d\u0027If True, do verification,\u0027"},{"line_number":66,"context_line":"                     \u0027If False, do not verification.\u0027),"},{"line_number":67,"context_line":"    cfg.BoolOpt(\u0027vstorage_two_way_authentication\u0027,"},{"line_number":68,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ad7323bf_bd73084b","line":65,"updated":"2026-04-14 20:40:45.000000000","message":"It is not clear what this option does from the description.","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"da61f3dd3ce8497fc37df380622bc761ef582641","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                     \u0027If False, use http for connection to backend storage.\u0027),"},{"line_number":63,"context_line":"    cfg.BoolOpt(\u0027vstorage_verification\u0027,"},{"line_number":64,"context_line":"                default\u003dFalse,"},{"line_number":65,"context_line":"                help\u003d\u0027If True, do verification,\u0027"},{"line_number":66,"context_line":"                     \u0027If False, do not verification.\u0027),"},{"line_number":67,"context_line":"    cfg.BoolOpt(\u0027vstorage_two_way_authentication\u0027,"},{"line_number":68,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ec1e0ccc_8f120e57","line":65,"in_reply_to":"ad7323bf_bd73084b","updated":"2026-04-15 08:50:25.000000000","message":"Thank you for your suggestion. \u0027vstorage_verification\u0027 is used to determine whether to perform certificate verification, and modifications have been made","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bc70a8b823287357c6e3d2d2373d69aa15d7e681","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027vstorage_crl_file_path\u0027,"},{"line_number":84,"context_line":"               default\u003dNone,"},{"line_number":85,"context_line":"               help\u003d\u0027File path of peer CRL.\u0027),"},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027linked_clone\u0027,"},{"line_number":87,"context_line":"                default\u003dTrue,"},{"line_number":88,"context_line":"                help\u003d\u0027Whether create clone volume linked or not.\u0027),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027vstorage_metro_backend\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"bca390ad_9efcaa36","line":86,"updated":"2026-04-14 20:40:45.000000000","message":"Should be named \"vstorage_linked_clone\".","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2bcf070fae6b6281d4cbc23043ebffb6c3db32d0","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027vstorage_crl_file_path\u0027,"},{"line_number":84,"context_line":"               default\u003dNone,"},{"line_number":85,"context_line":"               help\u003d\u0027File path of peer CRL.\u0027),"},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027linked_clone\u0027,"},{"line_number":87,"context_line":"                default\u003dTrue,"},{"line_number":88,"context_line":"                help\u003d\u0027Whether create clone volume linked or not.\u0027),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027vstorage_metro_backend\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"99600d4c_887e9093","line":86,"in_reply_to":"5a5ea450_fcea9d22","updated":"2026-05-15 12:51:29.000000000","message":"(Reopening)","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"d2d41341966a5455ddc009bf94a9bd086e224119","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027vstorage_crl_file_path\u0027,"},{"line_number":84,"context_line":"               default\u003dNone,"},{"line_number":85,"context_line":"               help\u003d\u0027File path of peer CRL.\u0027),"},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027linked_clone\u0027,"},{"line_number":87,"context_line":"                default\u003dTrue,"},{"line_number":88,"context_line":"                help\u003d\u0027Whether create clone volume linked or not.\u0027),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027vstorage_metro_backend\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"f56ca7f5_68047ec1","line":86,"in_reply_to":"99600d4c_887e9093","updated":"2026-05-18 01:16:20.000000000","message":"modified","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"da61f3dd3ce8497fc37df380622bc761ef582641","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027vstorage_crl_file_path\u0027,"},{"line_number":84,"context_line":"               default\u003dNone,"},{"line_number":85,"context_line":"               help\u003d\u0027File path of peer CRL.\u0027),"},{"line_number":86,"context_line":"    cfg.BoolOpt(\u0027linked_clone\u0027,"},{"line_number":87,"context_line":"                default\u003dTrue,"},{"line_number":88,"context_line":"                help\u003d\u0027Whether create clone volume linked or not.\u0027),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027vstorage_metro_backend\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a5ea450_fcea9d22","line":86,"in_reply_to":"bca390ad_9efcaa36","updated":"2026-04-15 08:50:25.000000000","message":"Thank you for your suggestion. `linked_clone` is used to control whether to perform chained cloning. The configuration items are located under the corresponding storage backend segment. There is no need to add the `vstorage` prefix to every configuration item. Moreover, if modifications have a wide impact, the entire TECS side needs to be adapted","commit_id":"a487fef8e7faa8211a70c3623979a55b57e213f8"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":29,"context_line":"from cinder import exception"},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from cinder.i18n import _"},{"line_number":32,"context_line":"    from cinder.i18n import _LE"},{"line_number":33,"context_line":"    from cinder.i18n import _LI"},{"line_number":34,"context_line":"except Exception:"},{"line_number":35,"context_line":"    _LE \u003d _LI \u003d _"},{"line_number":36,"context_line":"from cinder import interface"}],"source_content_type":"text/x-python","patch_set":41,"id":"d09adb8b_12f4623f","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":31},"updated":"2026-06-08 19:38:17.000000000","message":"these were removed from cinder years ago - they may cause issues down the line","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder import exception"},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from cinder.i18n import _"},{"line_number":32,"context_line":"    from cinder.i18n import _LE"},{"line_number":33,"context_line":"    from cinder.i18n import _LI"},{"line_number":34,"context_line":"except Exception:"},{"line_number":35,"context_line":"    _LE \u003d _LI \u003d _"},{"line_number":36,"context_line":"from cinder import interface"}],"source_content_type":"text/x-python","patch_set":41,"id":"41f560aa_4d343d2b","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":31},"in_reply_to":"d09adb8b_12f4623f","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027vstorage pool_name\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027vstorage_user\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027vstorage_user\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027vstorage_password\u0027,"},{"line_number":52,"context_line":"               secret\u003dTrue,"},{"line_number":53,"context_line":"               help\u003d\u0027vstorage_password\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027vstorage_gwnode_name\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027gwnode_name\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027vstorage_enable_delay_delete\u0027,"}],"source_content_type":"text/x-python","patch_set":41,"id":"ddac13b8_2c776b76","line":53,"range":{"start_line":51,"start_character":0,"end_line":53,"end_character":41},"updated":"2026-06-08 19:38:17.000000000","message":"why not use the cinder standard of san_password. Also you are expecting this to be base64 encoded base on the code in vstorage_client.py although this isn\u0027t specifically mentioned here.","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"               help\u003d\u0027vstorage pool_name\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027vstorage_user\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027vstorage_user\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027vstorage_password\u0027,"},{"line_number":52,"context_line":"               secret\u003dTrue,"},{"line_number":53,"context_line":"               help\u003d\u0027vstorage_password\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027vstorage_gwnode_name\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027gwnode_name\u0027),"},{"line_number":56,"context_line":"    cfg.BoolOpt(\u0027vstorage_enable_delay_delete\u0027,"}],"source_content_type":"text/x-python","patch_set":41,"id":"3bf706bb_c7bba8eb","line":53,"range":{"start_line":51,"start_character":0,"end_line":53,"end_character":41},"in_reply_to":"ddac13b8_2c776b76","updated":"2026-06-11 05:19:52.000000000","message":"The password is encrypted in two layers, first using base64 encoding, and then using AES encryption. The password has already been decrypted in the first layer of AES when executing \u0027self.configuration.safe_get\u0027","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":196,"context_line":"                LOG.error(_LE(\"Login failed!\"))"},{"line_number":197,"context_line":"                err_msg \u003d \"Login failed!\""},{"line_number":198,"context_line":"                raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":199,"context_line":"        self.RestClient.get_gwnode_number()"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def check_for_setup_error(self):"},{"line_number":202,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":41,"id":"78c2b3c1_29d1e2e8","line":199,"range":{"start_line":199,"start_character":0,"end_line":199,"end_character":43},"updated":"2026-06-08 19:38:17.000000000","message":"what is this doing? you call it, but then discard the response.","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                LOG.error(_LE(\"Login failed!\"))"},{"line_number":197,"context_line":"                err_msg \u003d \"Login failed!\""},{"line_number":198,"context_line":"                raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":199,"context_line":"        self.RestClient.get_gwnode_number()"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def check_for_setup_error(self):"},{"line_number":202,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":41,"id":"137a6ec0_74a78ff0","line":199,"range":{"start_line":199,"start_character":0,"end_line":199,"end_character":43},"in_reply_to":"78c2b3c1_29d1e2e8","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":308,"context_line":"        \"\"\"Extend an existing volume.\"\"\""},{"line_number":309,"context_line":"        vol_info \u003d self.RestClient.get_volume(volume)"},{"line_number":310,"context_line":"        old_size \u003d vol_info[\"capacity\"] / 1024 if vol_info else volume[\"size\"]"},{"line_number":311,"context_line":"        size \u003d int(new_size) - int(old_size)"},{"line_number":312,"context_line":"        req \u003d self.RestClient.resize(volume, size\u003dsize)"},{"line_number":313,"context_line":"        if int(req.get(\"ret\")) \u003d\u003d 0:"},{"line_number":314,"context_line":"            LOG.info(_LI(\u0027End extend volume from %(old)sGB to %(new)sGB\u0027),"},{"line_number":315,"context_line":"                     {\u0027old\u0027: old_size, \u0027new\u0027: new_size})"}],"source_content_type":"text/x-python","patch_set":41,"id":"b0cffe3a_fb0522c5","line":312,"range":{"start_line":311,"start_character":8,"end_line":312,"end_character":55},"updated":"2026-06-08 19:38:17.000000000","message":"this looks like you are setting size to be a delta, but then you are passing it to the resize endpoint and that feels like this will resize to the delta, not increase by the delta","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        \"\"\"Extend an existing volume.\"\"\""},{"line_number":309,"context_line":"        vol_info \u003d self.RestClient.get_volume(volume)"},{"line_number":310,"context_line":"        old_size \u003d vol_info[\"capacity\"] / 1024 if vol_info else volume[\"size\"]"},{"line_number":311,"context_line":"        size \u003d int(new_size) - int(old_size)"},{"line_number":312,"context_line":"        req \u003d self.RestClient.resize(volume, size\u003dsize)"},{"line_number":313,"context_line":"        if int(req.get(\"ret\")) \u003d\u003d 0:"},{"line_number":314,"context_line":"            LOG.info(_LI(\u0027End extend volume from %(old)sGB to %(new)sGB\u0027),"},{"line_number":315,"context_line":"                     {\u0027old\u0027: old_size, \u0027new\u0027: new_size})"}],"source_content_type":"text/x-python","patch_set":41,"id":"c0209a3b_089eb487","line":312,"range":{"start_line":311,"start_character":8,"end_line":312,"end_character":55},"in_reply_to":"b0cffe3a_fb0522c5","updated":"2026-06-11 05:19:52.000000000","message":"Considering that hard disks need to support expansion and contraction, the difference between existing hard disks is taken when passing parameters, with positive values indicating expansion and negative values indicating contraction","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":322,"context_line":"        \"\"\"Map a volume to a host and return target iSCSI information.\"\"\""},{"line_number":323,"context_line":"        initiator_name \u003d connector[\u0027initiator\u0027]"},{"line_number":324,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":325,"context_line":"        msg \u003d \u0027Initialize connection: volume name: {volume}s.  \u0027 \\"},{"line_number":326,"context_line":"              \u0027initiator name: {ini}s.\u0027.format(volume\u003dvolume_name,"},{"line_number":327,"context_line":"                                               ini\u003dinitiator_name)"},{"line_number":328,"context_line":"        LOG.debug(msg)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        map_group_name \u003d \"group-\" + initiator_name.replace(\u0027:\u0027, \u0027-\u0027) \\"}],"source_content_type":"text/x-python","patch_set":41,"id":"bec3fc72_bb6590c2","line":327,"range":{"start_line":325,"start_character":8,"end_line":327,"end_character":66},"updated":"2026-06-08 19:38:17.000000000","message":"trailing s not required twice here - it makes the final response messy.","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        \"\"\"Map a volume to a host and return target iSCSI information.\"\"\""},{"line_number":323,"context_line":"        initiator_name \u003d connector[\u0027initiator\u0027]"},{"line_number":324,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":325,"context_line":"        msg \u003d \u0027Initialize connection: volume name: {volume}s.  \u0027 \\"},{"line_number":326,"context_line":"              \u0027initiator name: {ini}s.\u0027.format(volume\u003dvolume_name,"},{"line_number":327,"context_line":"                                               ini\u003dinitiator_name)"},{"line_number":328,"context_line":"        LOG.debug(msg)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        map_group_name \u003d \"group-\" + initiator_name.replace(\u0027:\u0027, \u0027-\u0027) \\"}],"source_content_type":"text/x-python","patch_set":41,"id":"d16879fe_e1f8b9df","line":327,"range":{"start_line":325,"start_character":8,"end_line":327,"end_character":66},"in_reply_to":"bec3fc72_bb6590c2","updated":"2026-06-11 05:19:52.000000000","message":"Thank you for your meticulous review. The errors have been corrected","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":463,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":464,"context_line":"        nqn \u003d connector[\u0027nqn\u0027]"},{"line_number":465,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":466,"context_line":"        msg \u003d \u0027Initialize connection: volume name: {volume}s.  \u0027 \\"},{"line_number":467,"context_line":"              \u0027nqn: {ini}s.\u0027.format(volume\u003dvolume_name,"},{"line_number":468,"context_line":"                                    ini\u003dnqn)"},{"line_number":469,"context_line":"        LOG.info(msg)"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        data \u003d self.RestClient.map_lun_nvme(nqn, volume, self.gwnode_name)"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f9d01b6_01847b99","line":468,"range":{"start_line":466,"start_character":0,"end_line":468,"end_character":44},"updated":"2026-06-08 19:38:17.000000000","message":"trailing s not required twice here - it makes the final response messy.","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":464,"context_line":"        nqn \u003d connector[\u0027nqn\u0027]"},{"line_number":465,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":466,"context_line":"        msg \u003d \u0027Initialize connection: volume name: {volume}s.  \u0027 \\"},{"line_number":467,"context_line":"              \u0027nqn: {ini}s.\u0027.format(volume\u003dvolume_name,"},{"line_number":468,"context_line":"                                    ini\u003dnqn)"},{"line_number":469,"context_line":"        LOG.info(msg)"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        data \u003d self.RestClient.map_lun_nvme(nqn, volume, self.gwnode_name)"}],"source_content_type":"text/x-python","patch_set":41,"id":"c9299fb2_831bf328","line":468,"range":{"start_line":466,"start_character":0,"end_line":468,"end_character":44},"in_reply_to":"5f9d01b6_01847b99","updated":"2026-06-11 05:19:52.000000000","message":"Thank you for your meticulous review. The errors have been corrected","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":536,"context_line":"class VstorageNvmeRdmaDriver(BaseVstorageDriver):"},{"line_number":537,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":538,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":539,"context_line":"        properties \u003d self._initialize_connection(volume, connector, \"RoCEv2\")"},{"line_number":540,"context_line":"        res \u003d {\u0027driver_volume_type\u0027: \u0027nvmeof\u0027, \u0027data\u0027: properties}"},{"line_number":541,"context_line":"        return res"},{"line_number":542,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"abd9c5f6_1c294076","line":539,"range":{"start_line":539,"start_character":69,"end_line":539,"end_character":75},"updated":"2026-06-08 19:38:17.000000000","message":"is this correct - check the standard os-brick nvmeof connector accepts this. I thought it was rdma / tcp","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":536,"context_line":"class VstorageNvmeRdmaDriver(BaseVstorageDriver):"},{"line_number":537,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":538,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":539,"context_line":"        properties \u003d self._initialize_connection(volume, connector, \"RoCEv2\")"},{"line_number":540,"context_line":"        res \u003d {\u0027driver_volume_type\u0027: \u0027nvmeof\u0027, \u0027data\u0027: properties}"},{"line_number":541,"context_line":"        return res"},{"line_number":542,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"e519aed5_c569dee9","line":539,"range":{"start_line":539,"start_character":69,"end_line":539,"end_character":75},"in_reply_to":"abd9c5f6_1c294076","updated":"2026-06-11 05:19:52.000000000","message":"RDMA over Converged Ethernet version 2","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":670,"context_line":"        #     self._stats[\"volume_backend_name\"] \u003d self.configuration.safe_get("},{"line_number":671,"context_line":"        #         \u0027volume_backend_name\u0027)"},{"line_number":672,"context_line":"        for pool in self._stats[\"pools\"]:"},{"line_number":673,"context_line":"            pool[vstorage_pub.REPORT_METRO_CAPABILITY] \u003d True"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def create_volume(self, volume):"},{"line_number":676,"context_line":"        if not self._support_metro(volume):"}],"source_content_type":"text/x-python","patch_set":41,"id":"28a411d1_8d95532b","line":673,"range":{"start_line":673,"start_character":12,"end_line":673,"end_character":61},"updated":"2026-06-08 19:38:17.000000000","message":"This is reporting true except all the code for Metro support is commented out, lines 6401-655, and 667-671.\nIf you aren\u0027t going to support this remove the commented out lines and change the parameter as False","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        #     self._stats[\"volume_backend_name\"] \u003d self.configuration.safe_get("},{"line_number":671,"context_line":"        #         \u0027volume_backend_name\u0027)"},{"line_number":672,"context_line":"        for pool in self._stats[\"pools\"]:"},{"line_number":673,"context_line":"            pool[vstorage_pub.REPORT_METRO_CAPABILITY] \u003d True"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def create_volume(self, volume):"},{"line_number":676,"context_line":"        if not self._support_metro(volume):"}],"source_content_type":"text/x-python","patch_set":41,"id":"dc7a1197_97de3e5e","line":673,"range":{"start_line":673,"start_character":12,"end_line":673,"end_character":61},"in_reply_to":"28a411d1_8d95532b","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":90,"context_line":"]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"CONF \u003d cfg.CONF"},{"line_number":93,"context_line":"CONF.register_opts(vstorage_opts)"},{"line_number":94,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"NQN_PREFIX \u003d \"nqn.2016-06.io.spdk:\""}],"source_content_type":"text/x-python","patch_set":55,"id":"0214babb_0c4c61b6","line":93,"updated":"2026-09-01 03:41:12.000000000","message":"driver opts are registered under DEFAULT.\n\n  CONF.register_opts(vstorage_opts)\n\nUse group\u003dconfiguration.SHARED_CONF_GROUP (backend_defaults), which is\nwhat append_config_values expects.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"CONF \u003d cfg.CONF"},{"line_number":93,"context_line":"CONF.register_opts(vstorage_opts)"},{"line_number":94,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"NQN_PREFIX \u003d \"nqn.2016-06.io.spdk:\""}],"source_content_type":"text/x-python","patch_set":55,"id":"507ffb06_73c4e8fb","line":93,"in_reply_to":"0214babb_0c4c61b6","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":192,"context_line":"                LOG.error(err_msg)"},{"line_number":193,"context_line":"                raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def check_for_setup_error(self):"},{"line_number":196,"context_line":"        pass"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _update_volume_status(self):"}],"source_content_type":"text/x-python","patch_set":55,"id":"11930e4f_5076bd93","line":195,"updated":"2026-09-01 03:41:12.000000000","message":"Validate vstorage_manage_ip, user, password, pool (and metro_backend /\nmetro_domain_name if set) here and raise InvalidConfigurationValue.\nOtherwise cinder-volume starts \"up\" and only fails on the first user\nrequest or periodic stats.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                LOG.error(err_msg)"},{"line_number":193,"context_line":"                raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def check_for_setup_error(self):"},{"line_number":196,"context_line":"        pass"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _update_volume_status(self):"}],"source_content_type":"text/x-python","patch_set":55,"id":"14849f6a_628907e0","line":195,"in_reply_to":"11930e4f_5076bd93","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":201,"context_line":"        data \u003d {\"volume_backend_name\": vol_backend_name,"},{"line_number":202,"context_line":"                \u0027vendor_name\u0027: self.vendor_name,"},{"line_number":203,"context_line":"                \u0027driver_version\u0027: self.VERSION,"},{"line_number":204,"context_line":"                \"storage_protocol\": \"ISCSI\","},{"line_number":205,"context_line":"                \"pools\": []}"},{"line_number":206,"context_line":"        single_pool \u003d {}"},{"line_number":207,"context_line":"        single_pool.update(dict("}],"source_content_type":"text/x-python","patch_set":55,"id":"2ae6d27c_10a50ffb","line":204,"updated":"2026-09-01 03:41:12.000000000","message":"\"ISCSI\" is not a Cinder protocol constant. Scheduler extra_specs such\nas capabilities:storage_protocol\u003d\u0027iSCSI\u0027 will not match.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        data \u003d {\"volume_backend_name\": vol_backend_name,"},{"line_number":202,"context_line":"                \u0027vendor_name\u0027: self.vendor_name,"},{"line_number":203,"context_line":"                \u0027driver_version\u0027: self.VERSION,"},{"line_number":204,"context_line":"                \"storage_protocol\": \"ISCSI\","},{"line_number":205,"context_line":"                \"pools\": []}"},{"line_number":206,"context_line":"        single_pool \u003d {}"},{"line_number":207,"context_line":"        single_pool.update(dict("}],"source_content_type":"text/x-python","patch_set":55,"id":"14f457b2_144540b2","line":204,"in_reply_to":"2ae6d27c_10a50ffb","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        new_qos \u003d self.RestClient._get_qos_from_id(qos_specs_id)"},{"line_number":281,"context_line":"        self.update_qos(new_qos, volume)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    @coordination.synchronized(\"locked-vstorage-update-qos-{volume[id]}\")"},{"line_number":284,"context_line":"    def update_qos(self, new_qos, volume):"},{"line_number":285,"context_line":"        vol_info \u003d self.RestClient.get_volume(volume)"},{"line_number":286,"context_line":"        if vol_info and vol_info.get(\u0027qos_stgy\u0027):"}],"source_content_type":"text/x-python","patch_set":55,"id":"3f926e5f_4b08c4bd","line":283,"updated":"2026-09-01 03:41:12.000000000","message":"@coordination.synchronized(\"locked-vstorage-update-qos-{volume[id]}\")\n\nThis lock does not cover _create_and_bind_qos, which uses\n\u0027locked-vstorage-qos-{qos_name}\u0027. Concurrent retype and create can\ninterleave bind/unbind. Can you check and confirm once?","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        new_qos \u003d self.RestClient._get_qos_from_id(qos_specs_id)"},{"line_number":281,"context_line":"        self.update_qos(new_qos, volume)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    @coordination.synchronized(\"locked-vstorage-update-qos-{volume[id]}\")"},{"line_number":284,"context_line":"    def update_qos(self, new_qos, volume):"},{"line_number":285,"context_line":"        vol_info \u003d self.RestClient.get_volume(volume)"},{"line_number":286,"context_line":"        if vol_info and vol_info.get(\u0027qos_stgy\u0027):"}],"source_content_type":"text/x-python","patch_set":55,"id":"439c7917_59550272","line":283,"in_reply_to":"3f926e5f_4b08c4bd","updated":"2026-09-04 03:41:46.000000000","message":"The retype and create operations cannot be performed simultaneously on the same volume, can they?","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":315,"context_line":"        \"\"\"Map a volume to a host and return target iSCSI information.\"\"\""},{"line_number":316,"context_line":"        initiator_name \u003d connector[\u0027initiator\u0027]"},{"line_number":317,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":318,"context_line":"        msg \u003d \u0027Initialize connection: volume name: %(volume)s. \u0027 \\"},{"line_number":319,"context_line":"              \u0027initiator name: %(ini)s.\u0027, {\u0027volume\u0027: volume_name,"},{"line_number":320,"context_line":"                                           \u0027ini\u0027: initiator_name}"},{"line_number":321,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":55,"id":"3fdcb85f_fef7b14c","line":318,"updated":"2026-09-01 03:41:12.000000000","message":"This is a tuple, not a log message:\n\n  msg \u003d \u0027Initialize connection: ... %(volume)s.\u0027, {\u0027volume\u0027: volume_name, ...}\n  LOG.debug(msg)\n\nThe comma builds a (str, dict). LOG.debug will print the tuple; the\ninterpolated values never appear.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        \"\"\"Map a volume to a host and return target iSCSI information.\"\"\""},{"line_number":316,"context_line":"        initiator_name \u003d connector[\u0027initiator\u0027]"},{"line_number":317,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":318,"context_line":"        msg \u003d \u0027Initialize connection: volume name: %(volume)s. \u0027 \\"},{"line_number":319,"context_line":"              \u0027initiator name: %(ini)s.\u0027, {\u0027volume\u0027: volume_name,"},{"line_number":320,"context_line":"                                           \u0027ini\u0027: initiator_name}"},{"line_number":321,"context_line":"        LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":55,"id":"5b932255_b789af2e","line":318,"in_reply_to":"3fdcb85f_fef7b14c","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":370,"context_line":"        LOG.info(\u0027Terminate_connection:volume %(volume)s, \u0027"},{"line_number":371,"context_line":"                 \u0027initiator name %(ini)s.\u0027,"},{"line_number":372,"context_line":"                 {\u0027volume\u0027: volume_name, \u0027ini\u0027: map_group_name})"},{"line_number":373,"context_line":"        self.RestClient.terminate_connect(volume, map_group_name)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":376,"context_line":"        \"\"\"create a snapshot from volume\"\"\""}],"source_content_type":"text/x-python","patch_set":55,"id":"49bd60bd_403eab49","line":373,"updated":"2026-09-01 03:41:12.000000000","message":"connector\u003dNone is force-detach (see VolumeDriver.terminate_connection\ndocstring and api/contrib/admin_actions.py _force_detach).\n\nCurrent code:\n\n  initiator_name \u003d connector.get(\u0027initiator\u0027) if connector else None\n  if initiator_name is None:\n      raise VolumeDriverException(\"Failed to get initiator.\")\n\nThat makes os-force_detach and several manager cleanup paths fail.\n\nAdd a unit test: terminate_connection(volume, None) must call unmap-all\nand not raise.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        LOG.info(\u0027Terminate_connection:volume %(volume)s, \u0027"},{"line_number":371,"context_line":"                 \u0027initiator name %(ini)s.\u0027,"},{"line_number":372,"context_line":"                 {\u0027volume\u0027: volume_name, \u0027ini\u0027: map_group_name})"},{"line_number":373,"context_line":"        self.RestClient.terminate_connect(volume, map_group_name)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":376,"context_line":"        \"\"\"create a snapshot from volume\"\"\""}],"source_content_type":"text/x-python","patch_set":55,"id":"8d955603_c2c37cf9","line":373,"in_reply_to":"49bd60bd_403eab49","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":574,"context_line":"                 {\u0027info\u0027: properties})"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        res \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: properties}"},{"line_number":577,"context_line":"        return res"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":580,"context_line":"        \"\"\"Delete map between a volume and a host.\"\"\""}],"source_content_type":"text/x-python","patch_set":55,"id":"b91446f6_cc7b5f45","line":577,"updated":"2026-09-01 03:41:12.000000000","message":"FC initialize_connection returns only target_wwn / target_lun /\nvolume_id. Cinder\u0027s FC zone manager needs initiator_target_map\n(and typically target_discovered True after lookup).\n\nWithout that map, attach in a zoned fabric will fail or depend on\npre-zoning. Please build initiator_target_map from connector[\u0027wwpns\u0027]\nand tgt_wwpns (see Pure/Hitachi/Nimble). Also consider\nfczmutils.add_fc_zone.\n\nhost_id \u003d \"\" looks unfinished — if the backend ignores it, drop it.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                 {\u0027info\u0027: properties})"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"        res \u003d {\u0027driver_volume_type\u0027: \u0027fibre_channel\u0027, \u0027data\u0027: properties}"},{"line_number":577,"context_line":"        return res"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":580,"context_line":"        \"\"\"Delete map between a volume and a host.\"\"\""}],"source_content_type":"text/x-python","patch_set":55,"id":"f8e3374d_44ab5423","line":577,"in_reply_to":"b91446f6_cc7b5f45","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":642,"context_line":"        #     except Exception as metro_e:"},{"line_number":643,"context_line":"        #         LOG.error(\u0027Operation failed on primary and metro backend. \u0027"},{"line_number":644,"context_line":"        #                   \u0027Metro error: %s\u0027, str(metro_e))"},{"line_number":645,"context_line":"        #         raise metro_e"},{"line_number":646,"context_line":"        return getattr(super(), method)(*args, **kwargs)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":55,"id":"8d72dda3_71407b41","line":645,"updated":"2026-09-01 03:41:12.000000000","message":"_management_active_active is a stub: the whole primary-then-metro\nfailover is commented out, then you always call getattr(super(), method).\n\nPlease delete the commented block. If Metro management failover is not\nsupported, do not imply it in docs or by constructing MetroRestClient\nthat is never used for I/O.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":642,"context_line":"        #     except Exception as metro_e:"},{"line_number":643,"context_line":"        #         LOG.error(\u0027Operation failed on primary and metro backend. \u0027"},{"line_number":644,"context_line":"        #                   \u0027Metro error: %s\u0027, str(metro_e))"},{"line_number":645,"context_line":"        #         raise metro_e"},{"line_number":646,"context_line":"        return getattr(super(), method)(*args, **kwargs)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":55,"id":"a70f9a9d_68d3f16d","line":645,"in_reply_to":"8d72dda3_71407b41","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":658,"context_line":"        # if not self._stats.get(\"pools\"):"},{"line_number":659,"context_line":"        #     self._stats \u003d self.metro_driver._stats"},{"line_number":660,"context_line":"        #     self._stats[\"volume_backend_name\"] \u003d self.configuration.safe_get("},{"line_number":661,"context_line":"        #         \u0027volume_backend_name\u0027)"},{"line_number":662,"context_line":"        for pool in self._stats[\"pools\"]:"},{"line_number":663,"context_line":"            pool[vstorage_pub.REPORT_METRO_CAPABILITY] \u003d True"},{"line_number":664,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"913600b3_e2997be9","line":661,"updated":"2026-09-01 03:41:12.000000000","message":"Please look at comment #645","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":658,"context_line":"        # if not self._stats.get(\"pools\"):"},{"line_number":659,"context_line":"        #     self._stats \u003d self.metro_driver._stats"},{"line_number":660,"context_line":"        #     self._stats[\"volume_backend_name\"] \u003d self.configuration.safe_get("},{"line_number":661,"context_line":"        #         \u0027volume_backend_name\u0027)"},{"line_number":662,"context_line":"        for pool in self._stats[\"pools\"]:"},{"line_number":663,"context_line":"            pool[vstorage_pub.REPORT_METRO_CAPABILITY] \u003d True"},{"line_number":664,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"57a42045_e7f9f6bb","line":661,"in_reply_to":"913600b3_e2997be9","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":214,"context_line":"            provisioned_capacity_gb\u003dround("},{"line_number":215,"context_line":"                float(pool_data[\u0027data\u0027][\u0027allocated_capacity\u0027]) / 1024, 1),"},{"line_number":216,"context_line":"            QoS_support\u003dTrue,"},{"line_number":217,"context_line":"            multiattach\u003dTrue,"},{"line_number":218,"context_line":"            storage_usage_alarm_threshold\u003dself.storage_usage_alarm_threshold,"},{"line_number":219,"context_line":"            thin_provisioning_support\u003dTrue,"},{"line_number":220,"context_line":"            thick_provisioning_support\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":59,"id":"980a8d5c_677a8777","line":217,"updated":"2026-09-21 04:27:01.000000000","message":"multiattach\u003dTrue is reported here, but initialize_connection / terminate_connection / map_lun* have no @coordination.synchronized. Volume RPCs run on the backend thread pool (backend_native_threads_pool_size, default 20). Concurrent attach/detach on the same initiator group or volume can race on /cindergroups. Please lock on volume.name_id (and/or map group). Force-detach (connector\u003dNone) must use the same key, not hostname.","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            provisioned_capacity_gb\u003dround("},{"line_number":215,"context_line":"                float(pool_data[\u0027data\u0027][\u0027allocated_capacity\u0027]) / 1024, 1),"},{"line_number":216,"context_line":"            QoS_support\u003dTrue,"},{"line_number":217,"context_line":"            multiattach\u003dTrue,"},{"line_number":218,"context_line":"            storage_usage_alarm_threshold\u003dself.storage_usage_alarm_threshold,"},{"line_number":219,"context_line":"            thin_provisioning_support\u003dTrue,"},{"line_number":220,"context_line":"            thick_provisioning_support\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":59,"id":"8b26a4bc_cd9c1082","line":217,"in_reply_to":"980a8d5c_677a8777","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":358,"context_line":"        res \u003d {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: properties}"},{"line_number":359,"context_line":"        return res"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":362,"context_line":"        \"\"\"Delete map between a volume and a host.\"\"\""},{"line_number":363,"context_line":"        initiator_name \u003d connector.get(\u0027initiator\u0027) if connector else None"},{"line_number":364,"context_line":"        volume_name \u003d volume[\"name\"]"}],"source_content_type":"text/x-python","patch_set":59,"id":"7597afdb_825db8b5","line":361,"updated":"2026-09-21 04:27:01.000000000","message":"Follow-up to PS55 force-detach: the raise Failed to get initiator branch is gone, but connector\u003dNone still fails.\n\ninitiator_name \u003d connector.get(\u0027initiator\u0027) if connector else None\nmap_group_name \u003d \"group-\" + initiator_name.replace(\u0027:\u0027, \u0027-\u0027)\nos-force_detach still passes connector\u003dNone (admin_actions.py → volume_api.terminate_connection). This is now AttributeError on None.replace. NVMe _terminate_connection (L490) and FC (L576) still raise if nqn/wwpns are missing. Please unmap all groups (remove_volume_from_group already exists) and add terminate_connection(volume, None) tests for iSCSI, FC, and NVMe.","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        res \u003d {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: properties}"},{"line_number":359,"context_line":"        return res"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":362,"context_line":"        \"\"\"Delete map between a volume and a host.\"\"\""},{"line_number":363,"context_line":"        initiator_name \u003d connector.get(\u0027initiator\u0027) if connector else None"},{"line_number":364,"context_line":"        volume_name \u003d volume[\"name\"]"}],"source_content_type":"text/x-python","patch_set":59,"id":"8fa01ba3_75825cb2","line":361,"in_reply_to":"7597afdb_825db8b5","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":452,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":453,"context_line":"        nqn \u003d connector[\u0027nqn\u0027]"},{"line_number":454,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":455,"context_line":"        msg \u003d \u0027Initialize connection: volume name: %(volume)s. \u0027 \\"},{"line_number":456,"context_line":"              \u0027nqn: %(ini)s.\u0027, {\u0027volume\u0027: volume_name, \u0027ini\u0027: nqn}"},{"line_number":457,"context_line":"        LOG.info(msg)"},{"line_number":458,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"86027b18_62c5fce2","line":455,"updated":"2026-09-21 04:27:01.000000000","message":"The iSCSI LOG.debug tuple from PS55 is fixed. The same bug is now on the NVMe path:\n\nmsg \u003d \u0027Initialize connection: volume name: %(volume)s. \u0027 \\\n      \u0027nqn: %(ini)s.\u0027, {\u0027volume\u0027: volume_name, \u0027ini\u0027: nqn}\nLOG.info(msg)\nThe comma builds a (str, dict). nqn is never interpolated. Use LOG.info(\u0027... %(volume)s ... %(ini)s\u0027, {...}).","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        \"\"\"Map a volume to a host and return target nvme information.\"\"\""},{"line_number":453,"context_line":"        nqn \u003d connector[\u0027nqn\u0027]"},{"line_number":454,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":455,"context_line":"        msg \u003d \u0027Initialize connection: volume name: %(volume)s. \u0027 \\"},{"line_number":456,"context_line":"              \u0027nqn: %(ini)s.\u0027, {\u0027volume\u0027: volume_name, \u0027ini\u0027: nqn}"},{"line_number":457,"context_line":"        LOG.info(msg)"},{"line_number":458,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"1676ac56_b48d9309","line":455,"in_reply_to":"86027b18_62c5fce2","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":534,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":535,"context_line":"        if refresh:"},{"line_number":536,"context_line":"            self._update_volume_status()"},{"line_number":537,"context_line":"            self._stats[\u0027storage_protocol\u0027] \u003d \u0027nvmeof-rdma\u0027"},{"line_number":538,"context_line":"        return self._stats"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"ad5adb81_b9421be9","line":537,"updated":"2026-09-21 04:27:01.000000000","message":"self._stats[\u0027storage_protocol\u0027] \u003d \u0027nvmeof-rdma\u0027\nThat is not a Cinder protocol constant. Use constants.NVMEOF_ROCE (\u0027NVMe-RoCE\u0027). Scheduler extra specs on storage_protocol will not match this backend. (Separate from Simon’s PS41 question about the \"RoCEv2\" portal transport string.)","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":535,"context_line":"        if refresh:"},{"line_number":536,"context_line":"            self._update_volume_status()"},{"line_number":537,"context_line":"            self._stats[\u0027storage_protocol\u0027] \u003d \u0027nvmeof-rdma\u0027"},{"line_number":538,"context_line":"        return self._stats"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"4a17b34b_8cea973c","line":537,"in_reply_to":"ad5adb81_b9421be9","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"}],"cinder/volume/drivers/zte/vstorage/vstorage_client.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":131,"context_line":"                         \"url:%(url)s\")"},{"line_number":132,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: request.url})"},{"line_number":133,"context_line":"            LOG.error(err_msg)"},{"line_number":134,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _restful_get(self, url, token, timeout\u003d300):"},{"line_number":137,"context_line":"        \"\"\"get api by method GET\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"23ff7cd3_fc63b4a9","line":134,"range":{"start_line":134,"start_character":28,"end_line":134,"end_character":43},"updated":"2026-03-04 18:12:46.000000000","message":"Should raise VolumeDriverException here instead of CinderException, CinderException is too broad.","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                         \"url:%(url)s\")"},{"line_number":132,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: request.url})"},{"line_number":133,"context_line":"            LOG.error(err_msg)"},{"line_number":134,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _restful_get(self, url, token, timeout\u003d300):"},{"line_number":137,"context_line":"        \"\"\"get api by method GET\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"977a4f2b_444b59e7","line":134,"range":{"start_line":134,"start_character":28,"end_line":134,"end_character":43},"in_reply_to":"23ff7cd3_fc63b4a9","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                         \"url:%(url)s\")"},{"line_number":132,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: request.url})"},{"line_number":133,"context_line":"            LOG.error(err_msg)"},{"line_number":134,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _restful_get(self, url, token, timeout\u003d300):"},{"line_number":137,"context_line":"        \"\"\"get api by method GET\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"672a59f1_fe1c7b4d","line":134,"range":{"start_line":134,"start_character":28,"end_line":134,"end_character":43},"in_reply_to":"23ff7cd3_fc63b4a9","updated":"2026-03-20 08:47:58.000000000","message":"Thank you again. The relevant exception has been modified to VolumeDriverException as per your suggestion","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":146,"context_line":"                           % {\u0027code\u0027: ret[\"ret\"],"},{"line_number":147,"context_line":"                              \u0027msg\u0027: ret[\"err_msg\"]})"},{"line_number":148,"context_line":"                LOG.error(err_msg)"},{"line_number":149,"context_line":"                raise exception.CinderException(err_msg)"},{"line_number":150,"context_line":"            return ret"},{"line_number":151,"context_line":"        except Exception as err:"},{"line_number":152,"context_line":"            err_msg \u003d (_(\"Get Request error: %(err)s, \""}],"source_content_type":"text/x-python","patch_set":15,"id":"52d21b31_0b48abaa","line":149,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                           % {\u0027code\u0027: ret[\"ret\"],"},{"line_number":147,"context_line":"                              \u0027msg\u0027: ret[\"err_msg\"]})"},{"line_number":148,"context_line":"                LOG.error(err_msg)"},{"line_number":149,"context_line":"                raise exception.CinderException(err_msg)"},{"line_number":150,"context_line":"            return ret"},{"line_number":151,"context_line":"        except Exception as err:"},{"line_number":152,"context_line":"            err_msg \u003d (_(\"Get Request error: %(err)s, \""}],"source_content_type":"text/x-python","patch_set":15,"id":"0ff00392_c8e86282","line":149,"in_reply_to":"52d21b31_0b48abaa","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                           % {\u0027code\u0027: ret[\"ret\"],"},{"line_number":147,"context_line":"                              \u0027msg\u0027: ret[\"err_msg\"]})"},{"line_number":148,"context_line":"                LOG.error(err_msg)"},{"line_number":149,"context_line":"                raise exception.CinderException(err_msg)"},{"line_number":150,"context_line":"            return ret"},{"line_number":151,"context_line":"        except Exception as err:"},{"line_number":152,"context_line":"            err_msg \u003d (_(\"Get Request error: %(err)s, \""}],"source_content_type":"text/x-python","patch_set":15,"id":"7f42118f_17c6b852","line":149,"in_reply_to":"52d21b31_0b48abaa","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":153,"context_line":"                         \"url:%(url)s, res: %(res)s\") % {"},{"line_number":154,"context_line":"                \u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":155,"context_line":"            LOG.error(err_msg)"},{"line_number":156,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _restful_get_no_raise(self, url, token, timeout\u003d300):"},{"line_number":159,"context_line":"        \"\"\"get api by method GET\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"949aaeac_90515996","line":156,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                         \"url:%(url)s, res: %(res)s\") % {"},{"line_number":154,"context_line":"                \u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":155,"context_line":"            LOG.error(err_msg)"},{"line_number":156,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _restful_get_no_raise(self, url, token, timeout\u003d300):"},{"line_number":159,"context_line":"        \"\"\"get api by method GET\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"9ea176b0_77bb1eb3","line":156,"in_reply_to":"949aaeac_90515996","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                         \"url:%(url)s, res: %(res)s\") % {"},{"line_number":154,"context_line":"                \u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":155,"context_line":"            LOG.error(err_msg)"},{"line_number":156,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _restful_get_no_raise(self, url, token, timeout\u003d300):"},{"line_number":159,"context_line":"        \"\"\"get api by method GET\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"f7cb3238_bda89135","line":156,"in_reply_to":"949aaeac_90515996","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":168,"context_line":"            err_msg \u003d (_(\"Get Request error: %(err)s, \""},{"line_number":169,"context_line":"                         \"url:%(url)s\") % {\u0027err\u0027: err, \u0027url\u0027: url})"},{"line_number":170,"context_line":"            LOG.error(err_msg)"},{"line_number":171,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _restful_post(self, url, token, values, timeout\u003d300):"},{"line_number":174,"context_line":"        \"\"\"get api by method POST\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"5bd77263_e43b2dec","line":171,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            err_msg \u003d (_(\"Get Request error: %(err)s, \""},{"line_number":169,"context_line":"                         \"url:%(url)s\") % {\u0027err\u0027: err, \u0027url\u0027: url})"},{"line_number":170,"context_line":"            LOG.error(err_msg)"},{"line_number":171,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _restful_post(self, url, token, values, timeout\u003d300):"},{"line_number":174,"context_line":"        \"\"\"get api by method POST\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"c4c760b8_22ca8208","line":171,"in_reply_to":"5bd77263_e43b2dec","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            err_msg \u003d (_(\"Get Request error: %(err)s, \""},{"line_number":169,"context_line":"                         \"url:%(url)s\") % {\u0027err\u0027: err, \u0027url\u0027: url})"},{"line_number":170,"context_line":"            LOG.error(err_msg)"},{"line_number":171,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _restful_post(self, url, token, values, timeout\u003d300):"},{"line_number":174,"context_line":"        \"\"\"get api by method POST\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"e69561d7_9780a856","line":171,"in_reply_to":"5bd77263_e43b2dec","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":184,"context_line":"                         \"url:%(url)s, res:%(res)s\")"},{"line_number":185,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":186,"context_line":"            LOG.error(err_msg)"},{"line_number":187,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _restful_delete(self, url, token, timeout\u003d300):"},{"line_number":190,"context_line":"        \"\"\"get api by method DELETE\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"c9a51115_5d3a000d","line":187,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                         \"url:%(url)s, res:%(res)s\")"},{"line_number":185,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":186,"context_line":"            LOG.error(err_msg)"},{"line_number":187,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _restful_delete(self, url, token, timeout\u003d300):"},{"line_number":190,"context_line":"        \"\"\"get api by method DELETE\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"3066c1e8_9fa3972e","line":187,"in_reply_to":"c9a51115_5d3a000d","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                         \"url:%(url)s, res:%(res)s\")"},{"line_number":185,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":186,"context_line":"            LOG.error(err_msg)"},{"line_number":187,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _restful_delete(self, url, token, timeout\u003d300):"},{"line_number":190,"context_line":"        \"\"\"get api by method DELETE\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"5aea6cc5_6ce41b87","line":187,"in_reply_to":"c9a51115_5d3a000d","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":199,"context_line":"                         \"url:%(url)s, res:%(res)s\")"},{"line_number":200,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":201,"context_line":"            LOG.error(err_msg)"},{"line_number":202,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _restful_put(self, url, token, values, timeout\u003d300):"},{"line_number":205,"context_line":"        \"\"\"get api by method PUT \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"d154d059_cfcaa45f","line":202,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                         \"url:%(url)s, res:%(res)s\")"},{"line_number":200,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":201,"context_line":"            LOG.error(err_msg)"},{"line_number":202,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _restful_put(self, url, token, values, timeout\u003d300):"},{"line_number":205,"context_line":"        \"\"\"get api by method PUT \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"7698cb60_635d15ac","line":202,"in_reply_to":"d154d059_cfcaa45f","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                         \"url:%(url)s, res:%(res)s\")"},{"line_number":200,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url, \u0027res\u0027: str(response)})"},{"line_number":201,"context_line":"            LOG.error(err_msg)"},{"line_number":202,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _restful_put(self, url, token, values, timeout\u003d300):"},{"line_number":205,"context_line":"        \"\"\"get api by method PUT \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"845180ae_30961645","line":202,"in_reply_to":"d154d059_cfcaa45f","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":214,"context_line":"                         \"url:%(url)s\")"},{"line_number":215,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url})"},{"line_number":216,"context_line":"            LOG.error(err_msg)"},{"line_number":217,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _get_map_group_info(self, map_group_name):"},{"line_number":220,"context_line":"        get_url \u003d (self.URL_PREFIX_V2 +"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a289409_9a1bd1a0","line":217,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                         \"url:%(url)s\")"},{"line_number":215,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url})"},{"line_number":216,"context_line":"            LOG.error(err_msg)"},{"line_number":217,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _get_map_group_info(self, map_group_name):"},{"line_number":220,"context_line":"        get_url \u003d (self.URL_PREFIX_V2 +"}],"source_content_type":"text/x-python","patch_set":15,"id":"4137d31e_19e7d11d","line":217,"in_reply_to":"7a289409_9a1bd1a0","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                         \"url:%(url)s\")"},{"line_number":215,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: url})"},{"line_number":216,"context_line":"            LOG.error(err_msg)"},{"line_number":217,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _get_map_group_info(self, map_group_name):"},{"line_number":220,"context_line":"        get_url \u003d (self.URL_PREFIX_V2 +"}],"source_content_type":"text/x-python","patch_set":15,"id":"c1d30f5a_a433abc0","line":217,"in_reply_to":"7a289409_9a1bd1a0","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":227,"context_line":"                          \u0027msg\u0027: group_info_ret[\"err_msg\"],"},{"line_number":228,"context_line":"                          \u0027map\u0027: map_group_name})"},{"line_number":229,"context_line":"            LOG.error(err_msg)"},{"line_number":230,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":231,"context_line":"        LOG.debug(\"Get group info:%s\", group_info_ret)"},{"line_number":232,"context_line":"        return group_info_ret"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"a3d498cc_ff52cea5","line":230,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                          \u0027msg\u0027: group_info_ret[\"err_msg\"],"},{"line_number":228,"context_line":"                          \u0027map\u0027: map_group_name})"},{"line_number":229,"context_line":"            LOG.error(err_msg)"},{"line_number":230,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":231,"context_line":"        LOG.debug(\"Get group info:%s\", group_info_ret)"},{"line_number":232,"context_line":"        return group_info_ret"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"b68d7594_c5c2f655","line":230,"in_reply_to":"a3d498cc_ff52cea5","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                          \u0027msg\u0027: group_info_ret[\"err_msg\"],"},{"line_number":228,"context_line":"                          \u0027map\u0027: map_group_name})"},{"line_number":229,"context_line":"            LOG.error(err_msg)"},{"line_number":230,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":231,"context_line":"        LOG.debug(\"Get group info:%s\", group_info_ret)"},{"line_number":232,"context_line":"        return group_info_ret"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"c35094c5_6cdf9b23","line":230,"in_reply_to":"a3d498cc_ff52cea5","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":254,"context_line":"        except Exception as err:"},{"line_number":255,"context_line":"            err_msg \u003d (_(\"Login error, req is:%s\") % err)"},{"line_number":256,"context_line":"            LOG.error(err_msg)"},{"line_number":257,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def get_gwnode_number(self):"},{"line_number":260,"context_line":"        url \u003d self.URL_PREFIX_V2 + \"/system/config\""}],"source_content_type":"text/x-python","patch_set":15,"id":"64a5ee16_1c6715c0","line":257,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        except Exception as err:"},{"line_number":255,"context_line":"            err_msg \u003d (_(\"Login error, req is:%s\") % err)"},{"line_number":256,"context_line":"            LOG.error(err_msg)"},{"line_number":257,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def get_gwnode_number(self):"},{"line_number":260,"context_line":"        url \u003d self.URL_PREFIX_V2 + \"/system/config\""}],"source_content_type":"text/x-python","patch_set":15,"id":"c795f2da_4d8d0c88","line":257,"in_reply_to":"64a5ee16_1c6715c0","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        except Exception as err:"},{"line_number":255,"context_line":"            err_msg \u003d (_(\"Login error, req is:%s\") % err)"},{"line_number":256,"context_line":"            LOG.error(err_msg)"},{"line_number":257,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def get_gwnode_number(self):"},{"line_number":260,"context_line":"        url \u003d self.URL_PREFIX_V2 + \"/system/config\""}],"source_content_type":"text/x-python","patch_set":15,"id":"e032ab2c_7f9c5a26","line":257,"in_reply_to":"64a5ee16_1c6715c0","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":574,"context_line":"                       % {\u0027code\u0027: gwnodes_info_ret[\"ret\"],"},{"line_number":575,"context_line":"                          \u0027msg\u0027: gwnodes_info_ret[\"err_msg\"]})"},{"line_number":576,"context_line":"            LOG.error(err_msg)"},{"line_number":577,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":578,"context_line":"        LOG.debug(\"Get gwnodes info:%s\", gwnodes_info_ret)"},{"line_number":579,"context_line":"        return gwnodes_info_ret[\u0027data\u0027]"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"d0d1ded2_8314caee","line":577,"updated":"2026-03-04 18:12:46.000000000","message":"VolumeDriverException","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                       % {\u0027code\u0027: gwnodes_info_ret[\"ret\"],"},{"line_number":575,"context_line":"                          \u0027msg\u0027: gwnodes_info_ret[\"err_msg\"]})"},{"line_number":576,"context_line":"            LOG.error(err_msg)"},{"line_number":577,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":578,"context_line":"        LOG.debug(\"Get gwnodes info:%s\", gwnodes_info_ret)"},{"line_number":579,"context_line":"        return gwnodes_info_ret[\u0027data\u0027]"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5cfdab05_32dc84e7","line":577,"in_reply_to":"d0d1ded2_8314caee","updated":"2026-03-20 08:47:58.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3e83ca61f4ade113094907f1fec4f097218e5799","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                       % {\u0027code\u0027: gwnodes_info_ret[\"ret\"],"},{"line_number":575,"context_line":"                          \u0027msg\u0027: gwnodes_info_ret[\"err_msg\"]})"},{"line_number":576,"context_line":"            LOG.error(err_msg)"},{"line_number":577,"context_line":"            raise exception.CinderException(err_msg)"},{"line_number":578,"context_line":"        LOG.debug(\"Get gwnodes info:%s\", gwnodes_info_ret)"},{"line_number":579,"context_line":"        return gwnodes_info_ret[\u0027data\u0027]"},{"line_number":580,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"84b68902_3574aaea","line":577,"in_reply_to":"d0d1ded2_8314caee","updated":"2026-03-05 14:50:37.000000000","message":"Done","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8080d6819bc964ba71b80f5d666c4ba6dfce7d87","unresolved":true,"context_lines":[{"line_number":684,"context_line":"        get_mgroup_name_url \u003d \"{}/fc-cindergroups?wwpn\u003d{}\u0026vol_name\u003d{}\".format("},{"line_number":685,"context_line":"            self.URL_PREFIX_V2, fc_wwpns_str, str(vol_name))"},{"line_number":686,"context_line":"        mgroup_ret \u003d self._restful_get_no_raise(get_mgroup_name_url, \u0027\u0027)"},{"line_number":687,"context_line":"        if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP:"},{"line_number":688,"context_line":"            LOG.info(_LI(\"Volume %(vol)s is not in map group, \""},{"line_number":689,"context_line":"                         \"return map group name None\"), {\u0027vol\u0027: vol_name})"},{"line_number":690,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":15,"id":"cee1933f_bb2a8a83","line":687,"range":{"start_line":687,"start_character":11,"end_line":687,"end_character":28},"updated":"2026-03-04 18:12:46.000000000","message":"The check at line 691 requires casting mgroup_ret([\"ret\"]) to an int, but this one does not? Do we know that it is always an int?","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"a610df4ec04595018540612d09667bbfc2c1d33e","unresolved":false,"context_lines":[{"line_number":684,"context_line":"        get_mgroup_name_url \u003d \"{}/fc-cindergroups?wwpn\u003d{}\u0026vol_name\u003d{}\".format("},{"line_number":685,"context_line":"            self.URL_PREFIX_V2, fc_wwpns_str, str(vol_name))"},{"line_number":686,"context_line":"        mgroup_ret \u003d self._restful_get_no_raise(get_mgroup_name_url, \u0027\u0027)"},{"line_number":687,"context_line":"        if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP:"},{"line_number":688,"context_line":"            LOG.info(_LI(\"Volume %(vol)s is not in map group, \""},{"line_number":689,"context_line":"                         \"return map group name None\"), {\u0027vol\u0027: vol_name})"},{"line_number":690,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":15,"id":"1e2b3aea_9a3c4470","line":687,"range":{"start_line":687,"start_character":11,"end_line":687,"end_character":28},"in_reply_to":"cee1933f_bb2a8a83","updated":"2026-03-20 08:47:58.000000000","message":"The exception return code has been communicated with the storage side, so there is no need to catch the exception of int type conversion","commit_id":"13e5ce833fd5ea176ee6d8cd759418b5aea1605f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d753392a790d8558b722d21aa3295b95b714a081","unresolved":true,"context_lines":[{"line_number":917,"context_line":"                         volume_metadata):"},{"line_number":918,"context_line":"        snapshot_info \u003d {\"snap_name\": snapshot_name, \"vol_name\": volume_name}"},{"line_number":919,"context_line":"        create_url \u003d self.URL_PREFIX_V2 + \"/snaps\""},{"line_number":920,"context_line":"        LOG.info(_LI(\"Create snapshot %s now.\"),"},{"line_number":921,"context_line":"                 snapshot_name)"},{"line_number":922,"context_line":"        ret \u003d self._restful_post(create_url, \u0027\u0027, snapshot_info)"},{"line_number":923,"context_line":"        if int(ret[\"ret\"]) !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":39,"id":"a13296c9_62614c05","line":920,"updated":"2026-06-02 13:27:55.000000000","message":"Many of these start/end log messages should be at debug level instead of info. This will be very noisy for anyone deploying the driver as-is.","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"e6e0a352c01d7f4a818cb6012c1710fc17f7833e","unresolved":false,"context_lines":[{"line_number":917,"context_line":"                         volume_metadata):"},{"line_number":918,"context_line":"        snapshot_info \u003d {\"snap_name\": snapshot_name, \"vol_name\": volume_name}"},{"line_number":919,"context_line":"        create_url \u003d self.URL_PREFIX_V2 + \"/snaps\""},{"line_number":920,"context_line":"        LOG.info(_LI(\"Create snapshot %s now.\"),"},{"line_number":921,"context_line":"                 snapshot_name)"},{"line_number":922,"context_line":"        ret \u003d self._restful_post(create_url, \u0027\u0027, snapshot_info)"},{"line_number":923,"context_line":"        if int(ret[\"ret\"]) !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7626de06_3f382da7","line":920,"in_reply_to":"a13296c9_62614c05","updated":"2026-06-05 06:34:39.000000000","message":"Done","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d753392a790d8558b722d21aa3295b95b714a081","unresolved":true,"context_lines":[{"line_number":939,"context_line":"        metadata[\"lun_wwn\"] \u003d ret[\"data\"][\"wwn\"]"},{"line_number":940,"context_line":"        if \u0027volname\u0027 in metadata:"},{"line_number":941,"context_line":"            metadata.pop(\u0027volname\u0027)"},{"line_number":942,"context_line":"        LOG.info(_LI(\"Create snapshot %s successfully\"), snapshot_name)"},{"line_number":943,"context_line":"        return {\"metadata\": metadata}"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def _delete_snapshot(self, snapshot_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"38b1d77f_cf2f4851","line":942,"updated":"2026-06-02 13:27:55.000000000","message":"^","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"e6e0a352c01d7f4a818cb6012c1710fc17f7833e","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        metadata[\"lun_wwn\"] \u003d ret[\"data\"][\"wwn\"]"},{"line_number":940,"context_line":"        if \u0027volname\u0027 in metadata:"},{"line_number":941,"context_line":"            metadata.pop(\u0027volname\u0027)"},{"line_number":942,"context_line":"        LOG.info(_LI(\"Create snapshot %s successfully\"), snapshot_name)"},{"line_number":943,"context_line":"        return {\"metadata\": metadata}"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def _delete_snapshot(self, snapshot_name):"}],"source_content_type":"text/x-python","patch_set":39,"id":"d0652c4c_8b55e2b6","line":942,"in_reply_to":"38b1d77f_cf2f4851","updated":"2026-06-05 06:34:39.000000000","message":"Done","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d753392a790d8558b722d21aa3295b95b714a081","unresolved":true,"context_lines":[{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def _delete_snapshot(self, snapshot_name):"},{"line_number":946,"context_line":"        delete_url \u003d self.URL_PREFIX_V2 + \"/snaps/\" + snapshot_name"},{"line_number":947,"context_line":"        LOG.info(_LI(\"Delete snapshot:%s from vsan now.\"), snapshot_name)"},{"line_number":948,"context_line":"        ret \u003d self._restful_delete(delete_url, \u0027\u0027)"},{"line_number":949,"context_line":"        if int(ret[\"ret\"]) not in [0, vstorage_pub.VOL_NOT_EXIST]:"},{"line_number":950,"context_line":"            err_msg \u003d (_(\u0027Delete snapshot %(s_name)s failed, \u0027"}],"source_content_type":"text/x-python","patch_set":39,"id":"20b0b728_7309f598","line":947,"updated":"2026-06-02 13:27:55.000000000","message":"^","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"e6e0a352c01d7f4a818cb6012c1710fc17f7833e","unresolved":false,"context_lines":[{"line_number":944,"context_line":""},{"line_number":945,"context_line":"    def _delete_snapshot(self, snapshot_name):"},{"line_number":946,"context_line":"        delete_url \u003d self.URL_PREFIX_V2 + \"/snaps/\" + snapshot_name"},{"line_number":947,"context_line":"        LOG.info(_LI(\"Delete snapshot:%s from vsan now.\"), snapshot_name)"},{"line_number":948,"context_line":"        ret \u003d self._restful_delete(delete_url, \u0027\u0027)"},{"line_number":949,"context_line":"        if int(ret[\"ret\"]) not in [0, vstorage_pub.VOL_NOT_EXIST]:"},{"line_number":950,"context_line":"            err_msg \u003d (_(\u0027Delete snapshot %(s_name)s failed, \u0027"}],"source_content_type":"text/x-python","patch_set":39,"id":"c959a6c7_34526434","line":947,"in_reply_to":"20b0b728_7309f598","updated":"2026-06-05 06:34:39.000000000","message":"Done","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d753392a790d8558b722d21aa3295b95b714a081","unresolved":true,"context_lines":[{"line_number":958,"context_line":""},{"line_number":959,"context_line":"    def revert_to_snapshot(self, snapshot_name):"},{"line_number":960,"context_line":"        revert_url \u003d self.URL_PREFIX_V2 + \"/snaps/\" + snapshot_name"},{"line_number":961,"context_line":"        LOG.info(_LI(\"Revert to snapshot: %s from vsan now.\"), snapshot_name)"},{"line_number":962,"context_line":"        ret \u003d self._restful_put(revert_url, \u0027\u0027, \u0027\u0027)"},{"line_number":963,"context_line":"        if int(ret[\"ret\"]) !\u003d 0:"},{"line_number":964,"context_line":"            err_msg \u003d (_(\u0027Revert to snapshot %(s_name)s failed, \u0027"}],"source_content_type":"text/x-python","patch_set":39,"id":"3a19239b_747ebef4","line":961,"updated":"2026-06-02 13:27:55.000000000","message":"^","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"e6e0a352c01d7f4a818cb6012c1710fc17f7833e","unresolved":false,"context_lines":[{"line_number":958,"context_line":""},{"line_number":959,"context_line":"    def revert_to_snapshot(self, snapshot_name):"},{"line_number":960,"context_line":"        revert_url \u003d self.URL_PREFIX_V2 + \"/snaps/\" + snapshot_name"},{"line_number":961,"context_line":"        LOG.info(_LI(\"Revert to snapshot: %s from vsan now.\"), snapshot_name)"},{"line_number":962,"context_line":"        ret \u003d self._restful_put(revert_url, \u0027\u0027, \u0027\u0027)"},{"line_number":963,"context_line":"        if int(ret[\"ret\"]) !\u003d 0:"},{"line_number":964,"context_line":"            err_msg \u003d (_(\u0027Revert to snapshot %(s_name)s failed, \u0027"}],"source_content_type":"text/x-python","patch_set":39,"id":"31e402e9_8d5310fc","line":961,"in_reply_to":"3a19239b_747ebef4","updated":"2026-06-05 06:34:39.000000000","message":"Done","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d753392a790d8558b722d21aa3295b95b714a081","unresolved":true,"context_lines":[{"line_number":1166,"context_line":"            \"compress\": compress,"},{"line_number":1167,"context_line":"            \"deduplication\": deduplication,"},{"line_number":1168,"context_line":"        }"},{"line_number":1169,"context_line":"        LOG.info(\"Create metro volume start: url\u003d%(url)s, body\u003d%(body)s\","},{"line_number":1170,"context_line":"                 {\u0027url\u0027: create_url, \u0027body\u0027: body})"},{"line_number":1171,"context_line":"        start_time \u003d time.time()"},{"line_number":1172,"context_line":"        create_volume_ret \u003d self._restful_post(create_url, \u0027\u0027, body)"}],"source_content_type":"text/x-python","patch_set":39,"id":"6f6bc413_adbf4a6a","line":1169,"updated":"2026-06-02 13:27:55.000000000","message":"^","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"e6e0a352c01d7f4a818cb6012c1710fc17f7833e","unresolved":false,"context_lines":[{"line_number":1166,"context_line":"            \"compress\": compress,"},{"line_number":1167,"context_line":"            \"deduplication\": deduplication,"},{"line_number":1168,"context_line":"        }"},{"line_number":1169,"context_line":"        LOG.info(\"Create metro volume start: url\u003d%(url)s, body\u003d%(body)s\","},{"line_number":1170,"context_line":"                 {\u0027url\u0027: create_url, \u0027body\u0027: body})"},{"line_number":1171,"context_line":"        start_time \u003d time.time()"},{"line_number":1172,"context_line":"        create_volume_ret \u003d self._restful_post(create_url, \u0027\u0027, body)"}],"source_content_type":"text/x-python","patch_set":39,"id":"cd907658_29cb752e","line":1169,"in_reply_to":"6f6bc413_adbf4a6a","updated":"2026-06-05 06:34:39.000000000","message":"Done","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d753392a790d8558b722d21aa3295b95b714a081","unresolved":true,"context_lines":[{"line_number":1340,"context_line":"            \"wwpn\": fc_wwpns,"},{"line_number":1341,"context_line":"        }"},{"line_number":1342,"context_line":"        add_url \u003d self.URL_PREFIX_V2 + \"/fc-cindergroups\""},{"line_number":1343,"context_line":"        LOG.info(\"Map metro lun fc start: url\u003d%(url)s, body\u003d%(body)s\","},{"line_number":1344,"context_line":"                 {\u0027url\u0027: add_url, \u0027body\u0027: lun_info})"},{"line_number":1345,"context_line":"        start_time \u003d time.time()"},{"line_number":1346,"context_line":"        map_add_lun_ret \u003d self._restful_post(add_url, \u0027\u0027, lun_info)"}],"source_content_type":"text/x-python","patch_set":39,"id":"7bd9421d_6692f8f1","line":1343,"updated":"2026-06-02 13:27:55.000000000","message":"^","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"e6e0a352c01d7f4a818cb6012c1710fc17f7833e","unresolved":false,"context_lines":[{"line_number":1340,"context_line":"            \"wwpn\": fc_wwpns,"},{"line_number":1341,"context_line":"        }"},{"line_number":1342,"context_line":"        add_url \u003d self.URL_PREFIX_V2 + \"/fc-cindergroups\""},{"line_number":1343,"context_line":"        LOG.info(\"Map metro lun fc start: url\u003d%(url)s, body\u003d%(body)s\","},{"line_number":1344,"context_line":"                 {\u0027url\u0027: add_url, \u0027body\u0027: lun_info})"},{"line_number":1345,"context_line":"        start_time \u003d time.time()"},{"line_number":1346,"context_line":"        map_add_lun_ret \u003d self._restful_post(add_url, \u0027\u0027, lun_info)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1ac86559_a24dca10","line":1343,"in_reply_to":"7bd9421d_6692f8f1","updated":"2026-06-05 06:34:39.000000000","message":"Done","commit_id":"59d7876b0f6aa5486b84b9751c8c5082d0728377"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":96,"context_line":"        start_time \u003d time.time()"},{"line_number":97,"context_line":"        verify \u003d None"},{"line_number":98,"context_line":"        cert \u003d None"},{"line_number":99,"context_line":"        if \u0027https://\u0027 in request.url:"},{"line_number":100,"context_line":"            verify \u003d False"},{"line_number":101,"context_line":"            if self.verification is True:"},{"line_number":102,"context_line":"                verify \u003d self.ca_cert_path"},{"line_number":103,"context_line":"                if self.crl_verify is True:"},{"line_number":104,"context_line":"                    verify \u003d (self.ca_cert_path, self.crl_file_path)"},{"line_number":105,"context_line":"            if self.two_way_authentication is True:"},{"line_number":106,"context_line":"                cert \u003d (self.local_cert_file_path, self.local_key_file_path)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        res \u003d requests.request("},{"line_number":109,"context_line":"            request.method, request.url, headers\u003drequest.headers,"}],"source_content_type":"text/x-python","patch_set":41,"id":"0f646ad8_350150b1","line":106,"range":{"start_line":99,"start_character":7,"end_line":106,"end_character":76},"updated":"2026-06-08 19:38:17.000000000","message":"For https:// URLs, verify defaults to False unless vstorage_verification\u003dTrue (which itself defaults False). So out-of-the-box HTTPS connections to the array do no certificate validation, and the resulting InsecureRequestWarning is not suppressed (will spam logs). Consider defaulting to secure, and document the trade-off clearly.","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        start_time \u003d time.time()"},{"line_number":97,"context_line":"        verify \u003d None"},{"line_number":98,"context_line":"        cert \u003d None"},{"line_number":99,"context_line":"        if \u0027https://\u0027 in request.url:"},{"line_number":100,"context_line":"            verify \u003d False"},{"line_number":101,"context_line":"            if self.verification is True:"},{"line_number":102,"context_line":"                verify \u003d self.ca_cert_path"},{"line_number":103,"context_line":"                if self.crl_verify is True:"},{"line_number":104,"context_line":"                    verify \u003d (self.ca_cert_path, self.crl_file_path)"},{"line_number":105,"context_line":"            if self.two_way_authentication is True:"},{"line_number":106,"context_line":"                cert \u003d (self.local_cert_file_path, self.local_key_file_path)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        res \u003d requests.request("},{"line_number":109,"context_line":"            request.method, request.url, headers\u003drequest.headers,"}],"source_content_type":"text/x-python","patch_set":41,"id":"3c9f3b83_dfefb4bf","line":106,"range":{"start_line":99,"start_character":7,"end_line":106,"end_character":76},"in_reply_to":"0f646ad8_350150b1","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":159,"context_line":"    def _restful_get_no_raise(self, url, token, timeout\u003d300):"},{"line_number":160,"context_line":"        \"\"\"get api by method GET\"\"\""},{"line_number":161,"context_line":"        request \u003d Request(\u0027GET\u0027, url, timeout)"},{"line_number":162,"context_line":"        values \u003d {\"token\": token or self.token}"},{"line_number":163,"context_line":"        request.data \u003d str(json.dumps(values)).encode(\u0027utf8\u0027)"},{"line_number":164,"context_line":"        try:"},{"line_number":165,"context_line":"            response \u003d self._http_request(request)"}],"source_content_type":"text/x-python","patch_set":41,"id":"eb436301_a6602041","line":162,"range":{"start_line":162,"start_character":8,"end_line":162,"end_character":47},"updated":"2026-06-08 19:38:17.000000000","message":"shouldn\u0027t this be the x-auth-token","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def _restful_get_no_raise(self, url, token, timeout\u003d300):"},{"line_number":160,"context_line":"        \"\"\"get api by method GET\"\"\""},{"line_number":161,"context_line":"        request \u003d Request(\u0027GET\u0027, url, timeout)"},{"line_number":162,"context_line":"        values \u003d {\"token\": token or self.token}"},{"line_number":163,"context_line":"        request.data \u003d str(json.dumps(values)).encode(\u0027utf8\u0027)"},{"line_number":164,"context_line":"        try:"},{"line_number":165,"context_line":"            response \u003d self._http_request(request)"}],"source_content_type":"text/x-python","patch_set":41,"id":"46ac9825_3367a6c0","line":162,"range":{"start_line":162,"start_character":8,"end_line":162,"end_character":47},"in_reply_to":"eb436301_a6602041","updated":"2026-06-11 05:19:52.000000000","message":"just use token","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":240,"context_line":"            login_url \u003d self.URL_PREFIX + \"/api/v1/auth/tokens/\""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            decoded_pwd \u003d base64.b64decode(self.pwd).decode(\u0027utf-8\u0027)"},{"line_number":244,"context_line":"        except Exception:"},{"line_number":245,"context_line":"            err_msg \u003d (_(\"Decode pwd failed\"))"},{"line_number":246,"context_line":"            LOG.error(err_msg)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f60817a_8f9778a1","line":243,"range":{"start_line":243,"start_character":12,"end_line":243,"end_character":68},"updated":"2026-06-08 19:38:17.000000000","message":"see comment in vstorage.py","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            login_url \u003d self.URL_PREFIX + \"/api/v1/auth/tokens/\""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            decoded_pwd \u003d base64.b64decode(self.pwd).decode(\u0027utf-8\u0027)"},{"line_number":244,"context_line":"        except Exception:"},{"line_number":245,"context_line":"            err_msg \u003d (_(\"Decode pwd failed\"))"},{"line_number":246,"context_line":"            LOG.error(err_msg)"}],"source_content_type":"text/x-python","patch_set":41,"id":"857d42c7_5d2ccca1","line":243,"range":{"start_line":243,"start_character":12,"end_line":243,"end_character":68},"in_reply_to":"3f60817a_8f9778a1","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def resize(self, volume, **kwargs):"},{"line_number":512,"context_line":"        \"\"\"Resize an existing volume\"\"\""},{"line_number":513,"context_line":"        size \u003d kwargs.get(\u0027size\u0027, 0)"},{"line_number":514,"context_line":"        if size \u003c\u003d 0:"},{"line_number":515,"context_line":"            return {\"ret\": 0}"},{"line_number":516,"context_line":"        body \u003d {\"capacity\": int(size) * 1024}"},{"line_number":517,"context_line":"        extend_url \u003d (self.URL_PREFIX_V2 +"},{"line_number":518,"context_line":"                      \"/vols/\" + volume[\"name\"] + \"/capacity\")"},{"line_number":519,"context_line":"        LOG.info(_LI(\"Resize volume:%s from vsan\"), volume[\"name\"])"},{"line_number":520,"context_line":"        resize_ret \u003d self._restful_put(extend_url, \u0027\u0027, body)"},{"line_number":521,"context_line":"        if int(resize_ret[\"ret\"]) !\u003d 0:"},{"line_number":522,"context_line":"            err_msg \u003d (_(\"Resize volume %(vol)s failed, \""},{"line_number":523,"context_line":"                         \"return %(code)s: %(msg)s\")"}],"source_content_type":"text/x-python","patch_set":41,"id":"050a24ba_c0c24dac","line":520,"range":{"start_line":513,"start_character":0,"end_line":520,"end_character":60},"updated":"2026-06-08 19:38:17.000000000","message":"this is confusing, espeically when looks at from the extend_volume call in the vstorage.py code","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def resize(self, volume, **kwargs):"},{"line_number":512,"context_line":"        \"\"\"Resize an existing volume\"\"\""},{"line_number":513,"context_line":"        size \u003d kwargs.get(\u0027size\u0027, 0)"},{"line_number":514,"context_line":"        if size \u003c\u003d 0:"},{"line_number":515,"context_line":"            return {\"ret\": 0}"},{"line_number":516,"context_line":"        body \u003d {\"capacity\": int(size) * 1024}"},{"line_number":517,"context_line":"        extend_url \u003d (self.URL_PREFIX_V2 +"},{"line_number":518,"context_line":"                      \"/vols/\" + volume[\"name\"] + \"/capacity\")"},{"line_number":519,"context_line":"        LOG.info(_LI(\"Resize volume:%s from vsan\"), volume[\"name\"])"},{"line_number":520,"context_line":"        resize_ret \u003d self._restful_put(extend_url, \u0027\u0027, body)"},{"line_number":521,"context_line":"        if int(resize_ret[\"ret\"]) !\u003d 0:"},{"line_number":522,"context_line":"            err_msg \u003d (_(\"Resize volume %(vol)s failed, \""},{"line_number":523,"context_line":"                         \"return %(code)s: %(msg)s\")"}],"source_content_type":"text/x-python","patch_set":41,"id":"3b3c6659_d60094bb","line":520,"range":{"start_line":513,"start_character":0,"end_line":520,"end_character":60},"in_reply_to":"050a24ba_c0c24dac","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def get_tgt_info(self, map_grp_name):"},{"line_number":537,"context_line":"        \"\"\"combine ip and iqn to tgt_info \"\"\""},{"line_number":538,"context_line":"        iqn \u003d \"iqn.2016-06.io.spdk:\" + map_grp_name"},{"line_number":539,"context_line":"        gwnodes_info \u003d self._get_gwnodes_info()"},{"line_number":540,"context_line":"        tgt_info \u003d []"},{"line_number":541,"context_line":"        if not gwnodes_info:"}],"source_content_type":"text/x-python","patch_set":41,"id":"26f1fdb5_d80c6af7","line":538,"range":{"start_line":538,"start_character":15,"end_line":538,"end_character":36},"updated":"2026-06-08 19:38:17.000000000","message":"define this as a constant as you are using it multiple times","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def get_tgt_info(self, map_grp_name):"},{"line_number":537,"context_line":"        \"\"\"combine ip and iqn to tgt_info \"\"\""},{"line_number":538,"context_line":"        iqn \u003d \"iqn.2016-06.io.spdk:\" + map_grp_name"},{"line_number":539,"context_line":"        gwnodes_info \u003d self._get_gwnodes_info()"},{"line_number":540,"context_line":"        tgt_info \u003d []"},{"line_number":541,"context_line":"        if not gwnodes_info:"}],"source_content_type":"text/x-python","patch_set":41,"id":"d8ba4663_cda799ee","line":538,"range":{"start_line":538,"start_character":15,"end_line":538,"end_character":36},"in_reply_to":"26f1fdb5_d80c6af7","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":550,"context_line":"        return tgt_info"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def construct_tgt_info(self, map_grp_name, gwnodes_ip):"},{"line_number":553,"context_line":"        iqn \u003d \"iqn.2016-06.io.spdk:\" + map_grp_name"},{"line_number":554,"context_line":"        tgt_info \u003d []"},{"line_number":555,"context_line":"        for ip in gwnodes_ip:"},{"line_number":556,"context_line":"            iscsi_ip \u003d self._deal_ipv6(ip)"}],"source_content_type":"text/x-python","patch_set":41,"id":"1bce261b_a42a9c5e","line":553,"range":{"start_line":553,"start_character":14,"end_line":553,"end_character":35},"updated":"2026-06-08 19:38:17.000000000","message":"define this as a constant as you are using it multiple times","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        return tgt_info"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def construct_tgt_info(self, map_grp_name, gwnodes_ip):"},{"line_number":553,"context_line":"        iqn \u003d \"iqn.2016-06.io.spdk:\" + map_grp_name"},{"line_number":554,"context_line":"        tgt_info \u003d []"},{"line_number":555,"context_line":"        for ip in gwnodes_ip:"},{"line_number":556,"context_line":"            iscsi_ip \u003d self._deal_ipv6(ip)"}],"source_content_type":"text/x-python","patch_set":41,"id":"8a34aee2_dc66b34c","line":553,"range":{"start_line":553,"start_character":14,"end_line":553,"end_character":35},"in_reply_to":"1bce261b_a42a9c5e","updated":"2026-06-11 05:19:52.000000000","message":"Done","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@everpuredata.com","username":"sdodsley"},"change_message_id":"32624365ad85887b55ab33d5e96804246bc5ec13","unresolved":true,"context_lines":[{"line_number":693,"context_line":"        get_mgroup_name_url \u003d \"{}/fc-cindergroups?wwpn\u003d{}\u0026vol_name\u003d{}\".format("},{"line_number":694,"context_line":"            self.URL_PREFIX_V2, fc_wwpns_str, str(vol_name))"},{"line_number":695,"context_line":"        mgroup_ret \u003d self._restful_get_no_raise(get_mgroup_name_url, \u0027\u0027)"},{"line_number":696,"context_line":"        if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP:"},{"line_number":697,"context_line":"            LOG.info(_LI(\"Volume %(vol)s is not in map group, \""},{"line_number":698,"context_line":"                         \"return map group name None\"), {\u0027vol\u0027: vol_name})"},{"line_number":699,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":41,"id":"944b5476_07c64d2e","line":696,"range":{"start_line":696,"start_character":7,"end_line":696,"end_character":62},"updated":"2026-06-08 19:38:17.000000000","message":"inconsistent ret code comparison with using int() as is done in line 700.\nIf the backend ever returns a string this will silently fail and a \"not in group\" volume will be treated as an error","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"dbd20437da7064b78fcb7a09b0c6025a908edfb8","unresolved":false,"context_lines":[{"line_number":693,"context_line":"        get_mgroup_name_url \u003d \"{}/fc-cindergroups?wwpn\u003d{}\u0026vol_name\u003d{}\".format("},{"line_number":694,"context_line":"            self.URL_PREFIX_V2, fc_wwpns_str, str(vol_name))"},{"line_number":695,"context_line":"        mgroup_ret \u003d self._restful_get_no_raise(get_mgroup_name_url, \u0027\u0027)"},{"line_number":696,"context_line":"        if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP:"},{"line_number":697,"context_line":"            LOG.info(_LI(\"Volume %(vol)s is not in map group, \""},{"line_number":698,"context_line":"                         \"return map group name None\"), {\u0027vol\u0027: vol_name})"},{"line_number":699,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":41,"id":"9541c3f8_5d270b08","line":696,"range":{"start_line":696,"start_character":7,"end_line":696,"end_character":62},"in_reply_to":"944b5476_07c64d2e","updated":"2026-06-11 05:19:52.000000000","message":"Benchmark self-developed storage device, return code has been agreed upon","commit_id":"e11a94aadcb58dd1ed6f3657b29241da00456bc6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"206ce7ed071b6e09d9353bccdd1f5e9d3c8c29e9","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def _update_cluster_name(self):"},{"line_number":289,"context_line":"        if not self.pool:"},{"line_number":290,"context_line":"            LOG.error(_(\"Configuration: vstorage_pool_name cannot be empty!\"))"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        url \u003d self.URL_PREFIX_V3 + \"clusters/pools\""},{"line_number":293,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":42,"id":"e634e1ca_20155f6b","line":290,"updated":"2026-06-11 08:32:04.000000000","message":"pep8: C312: Log messages should not be translated!","commit_id":"5ecbedbc05a7110061ecede7966606cf8054e44e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        if hasattr(requests, \u0027packages\u0027):"},{"line_number":91,"context_line":"            requests.packages.urllib3.disable_warnings("},{"line_number":92,"context_line":"                requests.packages.urllib3.exceptions.InsecureRequestWarning)"},{"line_number":93,"context_line":"            requests.packages.urllib3.disable_warnings("},{"line_number":94,"context_line":"                requests.packages.urllib3.exceptions.InsecurePlatformWarning)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _requests_request(self, request):"}],"source_content_type":"text/x-python","patch_set":55,"id":"194352e7_c0630df9","line":93,"updated":"2026-09-01 03:41:12.000000000","message":"Unconditionally disabling InsecureRequestWarning hides the fact that\nverify defaults to False. Do not disable these warnings globally for\nthe process (it affects other urllib3 users in the same service).","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if hasattr(requests, \u0027packages\u0027):"},{"line_number":91,"context_line":"            requests.packages.urllib3.disable_warnings("},{"line_number":92,"context_line":"                requests.packages.urllib3.exceptions.InsecureRequestWarning)"},{"line_number":93,"context_line":"            requests.packages.urllib3.disable_warnings("},{"line_number":94,"context_line":"                requests.packages.urllib3.exceptions.InsecurePlatformWarning)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _requests_request(self, request):"}],"source_content_type":"text/x-python","patch_set":55,"id":"690807e7_80b09c6e","line":93,"in_reply_to":"194352e7_c0630df9","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        res \u003d requests.request("},{"line_number":110,"context_line":"            request.method, request.url, headers\u003drequest.headers,"},{"line_number":111,"context_line":"            data\u003drequest.data, timeout\u003drequest.timeout,"},{"line_number":112,"context_line":"            verify\u003dverify, cert\u003dcert)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        over_time \u003d time.time()"},{"line_number":115,"context_line":"        total_time \u003d (over_time - start_time)"}],"source_content_type":"text/x-python","patch_set":55,"id":"97afd157_6db8b951","line":112,"updated":"2026-09-01 03:41:12.000000000","message":"For https, verify starts as False and only becomes a CA path if\nvstorage_verification is True (default False). Out of the box this\ndriver does not authenticate the array.\n\nPlease default vstorage_verification to True when SSL is enabled, or\ndefault use_ssl to False and require operators to opt into insecure\nHTTPS explicitly (and log a warning once).\n\nAlso handle non-2xx HTTP with an HTML body will fail in response.json()\ninside the callers. Check res.status_code here and raise\nVolumeBackendAPIException with status + body snippet","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        res \u003d requests.request("},{"line_number":110,"context_line":"            request.method, request.url, headers\u003drequest.headers,"},{"line_number":111,"context_line":"            data\u003drequest.data, timeout\u003drequest.timeout,"},{"line_number":112,"context_line":"            verify\u003dverify, cert\u003dcert)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        over_time \u003d time.time()"},{"line_number":115,"context_line":"        total_time \u003d (over_time - start_time)"}],"source_content_type":"text/x-python","patch_set":55,"id":"fad47a33_433324fd","line":112,"in_reply_to":"97afd157_6db8b951","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":128,"context_line":"                request.headers[\u0027X-Auth-Token\u0027] \u003d self.token"},{"line_number":129,"context_line":"                res \u003d self._requests_request(request)"},{"line_number":130,"context_line":"            return res"},{"line_number":131,"context_line":"        except Exception as err:"},{"line_number":132,"context_line":"            err_msg \u003d (_(\"Http Request error: %(err)s, \""},{"line_number":133,"context_line":"                         \"url:%(url)s\")"},{"line_number":134,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: request.url})"}],"source_content_type":"text/x-python","patch_set":55,"id":"92ba23b2_93031938","line":131,"updated":"2026-09-01 03:41:12.000000000","message":"except Exception is too broad and double-wraps VolumeDriverException\nfrom the inner call (401 retry, json decode, etc.). Catch\nrequests.RequestException / ValueError, and do not catch-and-rewrap\nCinderException.\n\n_restful_get_no_raise still raises VolumeDriverException on any error\ndespite the name — please rename or actually return the error dict.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                request.headers[\u0027X-Auth-Token\u0027] \u003d self.token"},{"line_number":129,"context_line":"                res \u003d self._requests_request(request)"},{"line_number":130,"context_line":"            return res"},{"line_number":131,"context_line":"        except Exception as err:"},{"line_number":132,"context_line":"            err_msg \u003d (_(\"Http Request error: %(err)s, \""},{"line_number":133,"context_line":"                         \"url:%(url)s\")"},{"line_number":134,"context_line":"                       % {\u0027err\u0027: err, \u0027url\u0027: request.url})"}],"source_content_type":"text/x-python","patch_set":55,"id":"897fab80_ee712e24","line":131,"in_reply_to":"92ba23b2_93031938","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":241,"context_line":"            login_url \u003d self.URL_PREFIX + \"/api/v1/auth/tokens/\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        try:"},{"line_number":244,"context_line":"            decoded_pwd \u003d base64.b64decode(self.pwd).decode(\u0027utf-8\u0027)"},{"line_number":245,"context_line":"        except Exception:"},{"line_number":246,"context_line":"            err_msg \u003d (_(\"Decode pwd failed\"))"},{"line_number":247,"context_line":"            LOG.error(err_msg)"}],"source_content_type":"text/x-python","patch_set":55,"id":"6220fd2c_8c51df2c","line":244,"updated":"2026-09-01 03:41:12.000000000","message":"Requiring a Base64 password in cinder.conf is unusual.\nStoring pwd on the client object is OK if it is the oslo secret? do\nnot put it in exception messages","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            login_url \u003d self.URL_PREFIX + \"/api/v1/auth/tokens/\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        try:"},{"line_number":244,"context_line":"            decoded_pwd \u003d base64.b64decode(self.pwd).decode(\u0027utf-8\u0027)"},{"line_number":245,"context_line":"        except Exception:"},{"line_number":246,"context_line":"            err_msg \u003d (_(\"Decode pwd failed\"))"},{"line_number":247,"context_line":"            LOG.error(err_msg)"}],"source_content_type":"text/x-python","patch_set":55,"id":"8a396170_29185bdd","line":244,"in_reply_to":"6220fd2c_8c51df2c","updated":"2026-09-04 03:41:46.000000000","message":"The password is encrypted in two layers, first using base64 encoding, and then using AES encryption. The password has already been decrypted in the first layer of AES when executing \u0027self.configuration.safe_get\u0027","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":526,"context_line":"                          \u0027vol\u0027: volume[\"name\"]})"},{"line_number":527,"context_line":"            LOG.error(err_msg)"},{"line_number":528,"context_line":"            raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":529,"context_line":"        return resize_ret"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def _deal_ipv6(self, ip):"},{"line_number":532,"context_line":"        if \":\" in ip and \"[\" not in ip:"}],"source_content_type":"text/x-python","patch_set":55,"id":"07ff45d3_95f013de","line":529,"updated":"2026-09-01 03:41:12.000000000","message":"resize() posts {\"capacity\": int(size) * 1024} where size is the delta\nfrom extend_volume. create_volume uses the same field as an absolute\nsize. This is the extend bug. Name the REST parameter clearly\n(new_capacity vs add_capacity) and unit-test 10-\u003e20 GB with the exact\nJSON body you send.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":526,"context_line":"                          \u0027vol\u0027: volume[\"name\"]})"},{"line_number":527,"context_line":"            LOG.error(err_msg)"},{"line_number":528,"context_line":"            raise exception.VolumeDriverException(message\u003derr_msg)"},{"line_number":529,"context_line":"        return resize_ret"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def _deal_ipv6(self, ip):"},{"line_number":532,"context_line":"        if \":\" in ip and \"[\" not in ip:"}],"source_content_type":"text/x-python","patch_set":55,"id":"794da2a9_16874f15","line":529,"in_reply_to":"07ff45d3_95f013de","updated":"2026-09-04 03:41:46.000000000","message":"When creating a volume, the resize interface is not called directly. Instead, the image is copied first, then the extend_volume interface is invoked to expand the volume, and finally the resize interface is called with the delta as the argument.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":570,"context_line":"                if ip:"},{"line_number":571,"context_line":"                    ip \u003d self._deal_ipv6(ip)"},{"line_number":572,"context_line":"                    portals.append(ip)"},{"line_number":573,"context_line":"        return portals"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    def _get_gwnodes_info(self):"},{"line_number":576,"context_line":"        \"\"\"get the ip and ipn of gwnodes\"\"\""}],"source_content_type":"text/x-python","patch_set":55,"id":"a4504352_e6aeee5c","line":573,"updated":"2026-09-01 03:41:12.000000000","message":"get_nvme_portals() uses gwnode_info.get(\"iscsi_ip\") from /nodes-iscsiip.\nNVMe-TCP/RDMA often use different addresses than iSCSI. If the array\nhas a dedicated NVMe portal list, use it. Otherwise document that NVMe\nand iSCSI share the same IPs.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                if ip:"},{"line_number":571,"context_line":"                    ip \u003d self._deal_ipv6(ip)"},{"line_number":572,"context_line":"                    portals.append(ip)"},{"line_number":573,"context_line":"        return portals"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    def _get_gwnodes_info(self):"},{"line_number":576,"context_line":"        \"\"\"get the ip and ipn of gwnodes\"\"\""}],"source_content_type":"text/x-python","patch_set":55,"id":"27cf8ecb_036b3248","line":573,"in_reply_to":"a4504352_e6aeee5c","updated":"2026-09-04 03:41:46.000000000","message":"There are issues with the parameter naming of the interfaces defined on the storage side. We will consider further optimization in the future. Thank you very much for your professional guidance.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":693,"context_line":"        get_mgroup_name_url \u003d \"{}/fc-cindergroups?wwpn\u003d{}\u0026vol_name\u003d{}\".format("},{"line_number":694,"context_line":"            self.URL_PREFIX_V2, fc_wwpns_str, str(vol_name))"},{"line_number":695,"context_line":"        mgroup_ret \u003d self._restful_get_no_raise(get_mgroup_name_url, \u0027\u0027)"},{"line_number":696,"context_line":"        if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP:"},{"line_number":697,"context_line":"            LOG.info(\"Volume %(vol)s is not in map group, \""},{"line_number":698,"context_line":"                     \"return map group name None\", {\u0027vol\u0027: vol_name})"},{"line_number":699,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":55,"id":"c8f69888_a4d8f0ec","line":696,"updated":"2026-09-01 03:41:12.000000000","message":"if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP and\n  elif int(mgroup_ret[\"ret\"]) !\u003d 0:\n\nInconsistent int()... If ret is the string\n\"16851012\" this branch never matches and a not-in-group volume becomes\nan error. Always int() and handle missing/non-int ret","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":693,"context_line":"        get_mgroup_name_url \u003d \"{}/fc-cindergroups?wwpn\u003d{}\u0026vol_name\u003d{}\".format("},{"line_number":694,"context_line":"            self.URL_PREFIX_V2, fc_wwpns_str, str(vol_name))"},{"line_number":695,"context_line":"        mgroup_ret \u003d self._restful_get_no_raise(get_mgroup_name_url, \u0027\u0027)"},{"line_number":696,"context_line":"        if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP:"},{"line_number":697,"context_line":"            LOG.info(\"Volume %(vol)s is not in map group, \""},{"line_number":698,"context_line":"                     \"return map group name None\", {\u0027vol\u0027: vol_name})"},{"line_number":699,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":55,"id":"84e0fc72_b7e81b4e","line":696,"in_reply_to":"c8f69888_a4d8f0ec","updated":"2026-09-04 03:41:46.000000000","message":"The exception return code has been communicated with the storage side, so there is no need to catch the exception of int type conversion","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":838,"context_line":"        try:"},{"line_number":839,"context_line":"            vol_info \u003d self.get_volume(volume)"},{"line_number":840,"context_line":"        except exception.VolumeDriverException as e:"},{"line_number":841,"context_line":"            if vstorage_pub.VOL_NOT_EXIST \u003d\u003d e.kwargs.get(\u0027code\u0027):"},{"line_number":842,"context_line":"                return"},{"line_number":843,"context_line":"            raise"},{"line_number":844,"context_line":"        if vol_info and vol_info.get(\u0027qos_stgy\u0027):"}],"source_content_type":"text/x-python","patch_set":55,"id":"b8a2e168_a04201b9","line":841,"updated":"2026-09-01 03:41:12.000000000","message":"This only works when get_volume passed code\u003d into VolumeDriverException.\n_restful_get wraps errors without that kwarg, so some \"not found\"\npaths will not be idempotent.\n\nCompare the backend ret before wrapping, or use a small helper\n_is_not_found(ret). Do not overload CinderException\u0027s code kwarg\n(that field is the HTTP status on the base class).","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":838,"context_line":"        try:"},{"line_number":839,"context_line":"            vol_info \u003d self.get_volume(volume)"},{"line_number":840,"context_line":"        except exception.VolumeDriverException as e:"},{"line_number":841,"context_line":"            if vstorage_pub.VOL_NOT_EXIST \u003d\u003d e.kwargs.get(\u0027code\u0027):"},{"line_number":842,"context_line":"                return"},{"line_number":843,"context_line":"            raise"},{"line_number":844,"context_line":"        if vol_info and vol_info.get(\u0027qos_stgy\u0027):"}],"source_content_type":"text/x-python","patch_set":55,"id":"da60325a_b8083c3d","line":841,"in_reply_to":"b8a2e168_a04201b9","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":852,"context_line":"                        \" deleting volume: %s, try times: %s\","},{"line_number":853,"context_line":"                        volume[\"name\"], retries)"},{"line_number":854,"context_line":"            time.sleep(5)"},{"line_number":855,"context_line":"            retries +\u003d 1"},{"line_number":856,"context_line":"            delete_volume_ret \u003d self._delete_volume(volume, force_flag)"},{"line_number":857,"context_line":"        if int(delete_volume_ret[\"ret\"]) in [vstorage_pub.VOL_IN_GROUP,"},{"line_number":858,"context_line":"                                             vstorage_pub.CLONE_VOL_IN_GROUP,"}],"source_content_type":"text/x-python","patch_set":55,"id":"a19c5756_e90f90a6","line":855,"updated":"2026-09-01 03:41:12.000000000","message":"Retry loop: time.sleep(5) up to MAX_WAIT_SYNCING_TIMES (60) blocks a\ncinder-volume worker for ~5 minutes. Please use a shorter cap, backoff,\nand LOG.debug (not WARNING) for a retry that is expected.\n\nThis also has no lock, so parallel delete+clone of the same linked\nsource can livelock on SYNCING_TASK_EXIST.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":852,"context_line":"                        \" deleting volume: %s, try times: %s\","},{"line_number":853,"context_line":"                        volume[\"name\"], retries)"},{"line_number":854,"context_line":"            time.sleep(5)"},{"line_number":855,"context_line":"            retries +\u003d 1"},{"line_number":856,"context_line":"            delete_volume_ret \u003d self._delete_volume(volume, force_flag)"},{"line_number":857,"context_line":"        if int(delete_volume_ret[\"ret\"]) in [vstorage_pub.VOL_IN_GROUP,"},{"line_number":858,"context_line":"                                             vstorage_pub.CLONE_VOL_IN_GROUP,"}],"source_content_type":"text/x-python","patch_set":55,"id":"550017b8_6cb2bf77","line":855,"in_reply_to":"a19c5756_e90f90a6","updated":"2026-09-04 03:41:46.000000000","message":"The clone split operation on the storage side takes a relatively long time. We will not modify the waiting timeout for now. Thank you for your review.","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"96e2cfd097907d5422644f5e41801a26c7eae680","unresolved":false,"context_lines":[{"line_number":692,"context_line":"        fc_wwpns_str \u003d str(fc_wwpns_st).replace(\" \", \"\").replace(\"\u0027\", \u0027\"\u0027)"},{"line_number":693,"context_line":"        get_mgroup_name_url \u003d \"{}/fc-cindergroups?wwpn\u003d{}\u0026vol_name\u003d{}\".format("},{"line_number":694,"context_line":"            self.URL_PREFIX_V2, fc_wwpns_str, str(vol_name))"},{"line_number":695,"context_line":"        mgroup_ret \u003d self._restful_get_not_check_result(get_mgroup_name_url, \u0027\u0027)"},{"line_number":696,"context_line":"        if mgroup_ret[\"ret\"] \u003d\u003d vstorage_pub.VOL_NOT_IN_GROUP:"},{"line_number":697,"context_line":"            LOG.info(\"Volume %(vol)s is not in map group, \""},{"line_number":698,"context_line":"                     \"return map group name None\", {\u0027vol\u0027: vol_name})"}],"source_content_type":"text/x-python","patch_set":56,"id":"64656fe6_2ce4fb0b","line":695,"updated":"2026-09-04 05:58:32.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"12c3db963bd294bcd385f1b58299065284b9bb41"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":252,"context_line":"            req \u003d self._restful_post(login_url, \u0027\u0027, body)"},{"line_number":253,"context_line":"            token \u003d req.get(\"data\").get(\"token\")"},{"line_number":254,"context_line":"            if token:"},{"line_number":255,"context_line":"                self.token \u003d token"},{"line_number":256,"context_line":"                self._update_cluster_name()"},{"line_number":257,"context_line":"                self.URL_PREFIX_V2 \u003d (self.URL_PREFIX +"},{"line_number":258,"context_line":"                                      \"/api/v2/clusters/\" + self.cluster)"}],"source_content_type":"text/x-python","patch_set":59,"id":"d5f41476_9448b8c7","line":255,"updated":"2026-09-21 04:27:01.000000000","message":"user_login() writes self.token with no lock. _http_request (L125) retries 401 by calling user_login() again. Concurrent requests on the backend thread pool can clobber the token. Please synchronize login + token publish.","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            req \u003d self._restful_post(login_url, \u0027\u0027, body)"},{"line_number":253,"context_line":"            token \u003d req.get(\"data\").get(\"token\")"},{"line_number":254,"context_line":"            if token:"},{"line_number":255,"context_line":"                self.token \u003d token"},{"line_number":256,"context_line":"                self._update_cluster_name()"},{"line_number":257,"context_line":"                self.URL_PREFIX_V2 \u003d (self.URL_PREFIX +"},{"line_number":258,"context_line":"                                      \"/api/v2/clusters/\" + self.cluster)"}],"source_content_type":"text/x-python","patch_set":59,"id":"fcbf5c12_9b99348b","line":255,"in_reply_to":"d5f41476_9448b8c7","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"}],"doc/source/configuration/block-storage/drivers/zte-vstorage-driver.rst":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"1428558969246f8936745a4dbb0945a70743a781","unresolved":true,"context_lines":[{"line_number":41,"context_line":"   .. code-block:: ini"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"      [zte_vstorage]"},{"line_number":44,"context_line":"      volume_driver \u003d common_driver.vstorage.VstorageDriver"},{"line_number":45,"context_line":"      volume_backend_name \u003d ZTE_vStorage"},{"line_number":46,"context_line":"      vstorage_manage_ip \u003d XXX"},{"line_number":47,"context_line":"      vstorage_pool_name \u003d pool_01"}],"source_content_type":"text/x-rst","patch_set":59,"id":"face63bf_22f19133","line":44,"updated":"2026-09-21 04:27:01.000000000","message":"volume_driver \u003d common_driver.vstorage.VstorageDriver\nvstorage_pwd \u003d XXX\nlinked_clone \u003d True\nThis does not match the code. There is no common_driver module. The class is cinder.volume.drivers.zte.vstorage.vstorage.VstorageDriver. Options are vstorage_password and vstorage_linked_clone (vstorage.py L47, L82). Same mismatch on the FC/NVMe examples and the parameter table (vstorage_pwd / linked_clone). Operators following this RST cannot start the driver.","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"605279e5e98ac6844118e160b91f798e0dfef026","unresolved":false,"context_lines":[{"line_number":41,"context_line":"   .. code-block:: ini"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"      [zte_vstorage]"},{"line_number":44,"context_line":"      volume_driver \u003d common_driver.vstorage.VstorageDriver"},{"line_number":45,"context_line":"      volume_backend_name \u003d ZTE_vStorage"},{"line_number":46,"context_line":"      vstorage_manage_ip \u003d XXX"},{"line_number":47,"context_line":"      vstorage_pool_name \u003d pool_01"}],"source_content_type":"text/x-rst","patch_set":59,"id":"90c39443_c02d2429","line":44,"in_reply_to":"face63bf_22f19133","updated":"2026-09-23 02:45:06.000000000","message":"Done","commit_id":"d36fe7028d32823108ce2a96740a6944425f6685"}],"doc/source/reference/support-matrix.ini":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6357000697790a147a60452e0bf8f4c1bdacbb88","unresolved":true,"context_lines":[{"line_number":240,"context_line":"[driver.zadara]"},{"line_number":241,"context_line":"title\u003dZadara Storage Driver (iSCSI, NFS)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"[driver.zte_vstorage]"},{"line_number":244,"context_line":"title\u003dZTE vStorage Driver (iSCSI, FC, NVMe-TCP, NVMe-RDMA)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"#####################################################################"}],"source_content_type":"text/x-properties","patch_set":55,"id":"ee903fbe_0e61a3d7","line":243,"updated":"2026-09-01 03:41:12.000000000","message":"These are marked complete but the driver does not implement\nfailover/replication, CG/group APIs, or migrate_volume only find multi-attach / online extend implementations complete. Am i missing something?","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"},{"author":{"_account_id":38618,"name":"mengxiangzhi","email":"meng.xiangzhi@zte.com.cn","username":"mengxiangzhi10326440"},"change_message_id":"50994caa6eed67c51eccdbeba76547af159d729d","unresolved":false,"context_lines":[{"line_number":240,"context_line":"[driver.zadara]"},{"line_number":241,"context_line":"title\u003dZadara Storage Driver (iSCSI, NFS)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"[driver.zte_vstorage]"},{"line_number":244,"context_line":"title\u003dZTE vStorage Driver (iSCSI, FC, NVMe-TCP, NVMe-RDMA)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"#####################################################################"}],"source_content_type":"text/x-properties","patch_set":55,"id":"22896f2b_b2fe16ef","line":243,"in_reply_to":"ee903fbe_0e61a3d7","updated":"2026-09-04 03:41:46.000000000","message":"Done","commit_id":"6a18b4d95b1084e3ce1a3404307bfe51ff42a85a"}]}
