)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"3404386a3d8a06624b94dfa380078cab7400a61b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"916e501d_537caad9","updated":"2025-12-16 10:37:21.000000000","message":"Need to add UT code","commit_id":"e77818d2711975435cd4cee010de0c71803477a5"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"2507dc1c757cb4f432af3022d1c0f3b3e9b352d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f0bf694e_b51062c9","updated":"2025-12-17 14:34:02.000000000","message":"Few unit tests are pending","commit_id":"49913713d3d30bc797ab2160614610c1e7d497af"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"940ad3cd0b1baf9fc56ff4851c1efaf453293de0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"52abf219_88d4e869","updated":"2026-01-20 21:09:33.000000000","message":"I think this mostly looks OK, but see my question in do_setup().  I also find the unit test changes kind of obscure.","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"d3271085764beaf551257f23ff5adb7a9cc00934","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"59c70f3b_60548774","updated":"2026-01-21 12:57:39.000000000","message":"Thank you Brian. i will check the comments.","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"90fd906664266d5eec074d6273ca38b4d3e8b8df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"704944c4_606816f2","updated":"2026-01-13 10:09:41.000000000","message":"Thank you Cyril","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"551a0feae52dfd73d5ceb1f5e1ef4133e2499e0d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c1c430ff_66912880","updated":"2026-01-29 19:48:54.000000000","message":"Looks okay to me.","commit_id":"d5094f72f9a635b786a7b1070558c613be4438cc"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"bea0ea48576a4c963a24d1fad9feee5e362a8337","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8cbf94d9_e888d2f4","updated":"2026-01-30 15:32:57.000000000","message":"Revisions LGTM.","commit_id":"d5094f72f9a635b786a7b1070558c613be4438cc"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"63aa9d68ff350fc02c6ccd0596e5dc3462b3134d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"03e23f56_c5ca77ac","updated":"2026-01-30 15:55:28.000000000","message":"Thank you Brian","commit_id":"d5094f72f9a635b786a7b1070558c613be4438cc"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"ac22b989140a5ccb23fa1ea72c067ea0fb789ef7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d503a56e_4ecd4e33","updated":"2026-01-30 03:31:38.000000000","message":"Thank you Jon","commit_id":"d5094f72f9a635b786a7b1070558c613be4438cc"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"061f3eff2ab6007f80096034d55ac5683b340d7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7f75c385_2468dee8","updated":"2026-01-27 12:47:59.000000000","message":"Thanks Brian. Tried to address review comments. Please find replies inline.","commit_id":"d5094f72f9a635b786a7b1070558c613be4438cc"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"2512403471c3e2df016ba6c9eaf7cbd505c1bad8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bca4e275_8483f708","updated":"2026-01-27 15:29:53.000000000","message":"recheck cinder-plugin-ceph-tempest failed","commit_id":"d5094f72f9a635b786a7b1070558c613be4438cc"}],"cinder/tests/unit/volume/drivers/hpe/test_hpe3par.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"940ad3cd0b1baf9fc56ff4851c1efaf453293de0","unresolved":true,"context_lines":[{"line_number":700,"context_line":"                           \u0027build\u0027: 40600052,"},{"line_number":701,"context_line":"                           \u0027minor\u0027: 10,"},{"line_number":702,"context_line":"                           \u0027revision\u0027: 0}"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"    # Use this to point to default version of wsapi"},{"line_number":705,"context_line":"    wsapi_version_default \u003d wsapi_version_for_compression"},{"line_number":706,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"a29b9634_b0ba824e","line":703,"updated":"2026-01-20 21:09:33.000000000","message":"I\u0027m confused about lines 705 and 707, and in general, what the point is of the changes you\u0027ve made to have a client and client_other, and a driver and driver_other.  Maybe you could add some comments explaining what their use is?","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"061f3eff2ab6007f80096034d55ac5683b340d7e","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                           \u0027build\u0027: 40600052,"},{"line_number":701,"context_line":"                           \u0027minor\u0027: 10,"},{"line_number":702,"context_line":"                           \u0027revision\u0027: 0}"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"    # Use this to point to default version of wsapi"},{"line_number":705,"context_line":"    wsapi_version_default \u003d wsapi_version_for_compression"},{"line_number":706,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"49a29eb6_bbb1995a","line":703,"in_reply_to":"a29b9634_b0ba824e","updated":"2026-01-27 12:47:59.000000000","message":"Removed redundant line 707.\n\nRemoved function setup_mock_client_other(). Kept only one function setup_mock_client() and added flag \u0027login\u0027.\n\nAdded few lines of comments before functions setup_driver_other() and setup_driver().","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"940ad3cd0b1baf9fc56ff4851c1efaf453293de0","unresolved":true,"context_lines":[{"line_number":825,"context_line":"            conf \u003d self.setup_configuration()"},{"line_number":826,"context_line":"        self.driver \u003d driver(configuration\u003dconf)"},{"line_number":827,"context_line":"        self.driver.do_setup(None)"},{"line_number":828,"context_line":"        if wsapi_version \u003d\u003d self.wsapi_version_default:"},{"line_number":829,"context_line":"            self.driver._login()"},{"line_number":830,"context_line":"        return _m_client"},{"line_number":831,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"a239e2dc_20104bc9","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":54},"updated":"2026-01-20 21:09:33.000000000","message":"Are you just checking the value here or is your intent only to login if the function was called without a wsapi_version passed in?","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"061f3eff2ab6007f80096034d55ac5683b340d7e","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            conf \u003d self.setup_configuration()"},{"line_number":826,"context_line":"        self.driver \u003d driver(configuration\u003dconf)"},{"line_number":827,"context_line":"        self.driver.do_setup(None)"},{"line_number":828,"context_line":"        if wsapi_version \u003d\u003d self.wsapi_version_default:"},{"line_number":829,"context_line":"            self.driver._login()"},{"line_number":830,"context_line":"        return _m_client"},{"line_number":831,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1d13c693_a35c9ab0","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":54},"in_reply_to":"a239e2dc_20104bc9","updated":"2026-01-27 12:47:59.000000000","message":"intent is to login if the function is called with wsapi_version_default","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"}],"cinder/volume/drivers/hpe/hpe_3par_base.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"940ad3cd0b1baf9fc56ff4851c1efaf453293de0","unresolved":true,"context_lines":[{"line_number":106,"context_line":"    def _logout(self, common):"},{"line_number":107,"context_line":"        # If replication is enabled and we do not have a client ID, we did not"},{"line_number":108,"context_line":"        # login, but can still failover. There is no need to logout."},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            if common.client is None and common._replication_enabled:"},{"line_number":111,"context_line":"                return"},{"line_number":112,"context_line":"            common.client_logout()"}],"source_content_type":"text/x-python","patch_set":4,"id":"2380918d_4933422b","line":109,"updated":"2026-01-20 21:09:33.000000000","message":"nit: I like keeping the try block as small as possible, so i would have left the \u0027if\u0027 block the way it was in the old code, and only put line 112 in the try block. The main reason is it minimizes the chance that you might catch the \"wrong\" exception.  But that\u0027s a matter of taste, i don\u0027t think it would make a difference here.","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"061f3eff2ab6007f80096034d55ac5683b340d7e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def _logout(self, common):"},{"line_number":107,"context_line":"        # If replication is enabled and we do not have a client ID, we did not"},{"line_number":108,"context_line":"        # login, but can still failover. There is no need to logout."},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            if common.client is None and common._replication_enabled:"},{"line_number":111,"context_line":"                return"},{"line_number":112,"context_line":"            common.client_logout()"}],"source_content_type":"text/x-python","patch_set":4,"id":"c27dcdf9_497b4ba8","line":109,"in_reply_to":"2380918d_4933422b","updated":"2026-01-27 12:47:59.000000000","message":"Done","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"940ad3cd0b1baf9fc56ff4851c1efaf453293de0","unresolved":true,"context_lines":[{"line_number":134,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":135,"context_line":"        # NOTE(geguileo): We don\u0027t need to login to the backed if we are not"},{"line_number":136,"context_line":"        # going to refresh the stats, furthermore if we login, then we\u0027ll"},{"line_number":137,"context_line":"        # return an empty dict, because the _login method calls calls"},{"line_number":138,"context_line":"        # _init_common which returns a new HPE3PARCommon instance each time,"},{"line_number":139,"context_line":"        # so it won\u0027t have any cached values."},{"line_number":140,"context_line":"        if not refresh:"},{"line_number":141,"context_line":"            return self._stats"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fd521c7_0a4553fb","line":138,"range":{"start_line":137,"start_character":32,"end_line":138,"end_character":75},"updated":"2026-01-20 21:09:33.000000000","message":"This isn\u0027t true any more, we may be reusing an already logged-in instance.","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"061f3eff2ab6007f80096034d55ac5683b340d7e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":135,"context_line":"        # NOTE(geguileo): We don\u0027t need to login to the backed if we are not"},{"line_number":136,"context_line":"        # going to refresh the stats, furthermore if we login, then we\u0027ll"},{"line_number":137,"context_line":"        # return an empty dict, because the _login method calls calls"},{"line_number":138,"context_line":"        # _init_common which returns a new HPE3PARCommon instance each time,"},{"line_number":139,"context_line":"        # so it won\u0027t have any cached values."},{"line_number":140,"context_line":"        if not refresh:"},{"line_number":141,"context_line":"            return self._stats"}],"source_content_type":"text/x-python","patch_set":4,"id":"2bd133fc_963c9d76","line":138,"range":{"start_line":137,"start_character":32,"end_line":138,"end_character":75},"in_reply_to":"5fd521c7_0a4553fb","updated":"2026-01-27 12:47:59.000000000","message":"Done","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"940ad3cd0b1baf9fc56ff4851c1efaf453293de0","unresolved":true,"context_lines":[{"line_number":357,"context_line":"            self._logout(common)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def do_setup(self, context):"},{"line_number":360,"context_line":"        common \u003d self._init_common()"},{"line_number":361,"context_line":"        common.do_setup(context)"},{"line_number":362,"context_line":"        self._check_flags(common)"},{"line_number":363,"context_line":"        common.check_for_setup_error()"}],"source_content_type":"text/x-python","patch_set":4,"id":"324542a4_63448027","line":360,"range":{"start_line":360,"start_character":17,"end_line":360,"end_character":36},"updated":"2026-01-20 21:09:33.000000000","message":"This function used to have the side effect of setting self.common, but in this patch, that only happens in self._login().  I\u0027m looking at all those functions in lines 160-260 that make calls on self.common ... are we sure that self.common will always be set when these are called?  Since the get stats function calls _login(), we know _login() will be periodically called, so eventually self.common will be set, but I don\u0027t think we want to rely on that.  I\u0027m probably missing something; I just want you to take a look.","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"061f3eff2ab6007f80096034d55ac5683b340d7e","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            self._logout(common)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def do_setup(self, context):"},{"line_number":360,"context_line":"        common \u003d self._init_common()"},{"line_number":361,"context_line":"        common.do_setup(context)"},{"line_number":362,"context_line":"        self._check_flags(common)"},{"line_number":363,"context_line":"        common.check_for_setup_error()"}],"source_content_type":"text/x-python","patch_set":4,"id":"b85c569f_7435b88b","line":360,"range":{"start_line":360,"start_character":17,"end_line":360,"end_character":36},"in_reply_to":"324542a4_63448027","updated":"2026-01-27 12:47:59.000000000","message":"When cinder service starts, at that time the get_volume_stats() is called;\nand later it is called periodically (default one minute).\nThus, in functions between lines 160 to 260, self.common is always set.","commit_id":"df976bca1c082baf0a38c03d16a726fcabec54aa"}]}
