)]}'
{"/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@purestorage.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@purestorage.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"}],"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@purestorage.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@purestorage.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@purestorage.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@purestorage.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@purestorage.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@purestorage.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@purestorage.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@purestorage.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"}],"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@purestorage.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@purestorage.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@purestorage.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@purestorage.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@purestorage.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@purestorage.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@purestorage.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"}]}
