From b78fb081ac1be228cecebff2a49131accfe4525c Mon Sep 17 00:00:00 2001 From: Larry Matter Date: Thu, 28 Mar 2013 16:29:38 -0700 Subject: [PATCH] REST session validity not checked in get_volume_info The fix for bug 1157242 introduced a new bug in Coraid cinder driver _get_volume_info that the login session is not checked for validity/timeout. This change addressesthat issue for all methods in the CoraidRESTClient class. Fixes bug 1160459 Change-Id: Ib2d7ebbf3ef8ec35071f51c6168eb9b3af9405e6 --- cinder/tests/test_coraid.py | 8 ++++---- cinder/volume/drivers/coraid.py | 19 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cinder/tests/test_coraid.py b/cinder/tests/test_coraid.py index 52297d746..cda121b28 100644 --- a/cinder/tests/test_coraid.py +++ b/cinder/tests/test_coraid.py @@ -183,14 +183,14 @@ class TestCoraidRESTClient(test.TestCase): def test__set_group(self): setattr(self.rest_mock, '_set_group', lambda *_: fake_group_id) - self.stubs.Set(CoraidRESTClient, '_esm', + self.stubs.Set(CoraidRESTClient, '_admin_esm_cmd', lambda *_: fake_login_reply) self.drv._set_group(fake_login_reply) def test__set_group_fails_no_group(self): setattr(self.rest_mock, '_set_group', lambda *_: False) - self.stubs.Set(CoraidRESTClient, '_esm', + self.stubs.Set(CoraidRESTClient, '_admin_esm_cmd', lambda *_: fake_login_reply_group_fail) self.assertRaises(CoraidESMException, self.drv._set_group, @@ -199,14 +199,14 @@ class TestCoraidRESTClient(test.TestCase): def test__configure(self): setattr(self.rest_mock, '_configure', lambda *_: True) - self.stubs.Set(CoraidRESTClient, '_esm', + self.stubs.Set(CoraidRESTClient, '_esm_cmd', lambda *_: fake_esm_success) self.drv._configure(fake_configure_data) def test__get_volume_info(self): setattr(self.rest_mock, '_get_volume_info', lambda *_: fake_volume_info) - self.stubs.Set(CoraidRESTClient, '_esm', + self.stubs.Set(CoraidRESTClient, '_esm_cmd', lambda *_: fake_esm_fetch) self.drv._get_volume_info(fake_volume_name) diff --git a/cinder/volume/drivers/coraid.py b/cinder/volume/drivers/coraid.py index d95024f16..3c0616b83 100644 --- a/cinder/volume/drivers/coraid.py +++ b/cinder/volume/drivers/coraid.py @@ -95,7 +95,7 @@ class CoraidRESTClient(object): url = ('admin?op=login&username=%s&password=%s' % (self.user, self.password)) data = 'Login' - reply = self._esm(url, data) + reply = self._admin_esm_cmd(url, data) if reply.get('state') == 'adminSucceed': self.session = time.time() + 1100 msg = _('Update session cookie %(session)s') @@ -116,7 +116,7 @@ class CoraidRESTClient(object): if groupId: url = ('admin?op=setRbacGroup&groupId=%s' % (groupId)) data = 'Group' - reply = self._esm(url, data) + reply = self._admin_esm_cmd(url, data) if reply.get('state') == 'adminSucceed': return True else: @@ -139,10 +139,14 @@ class CoraidRESTClient(object): return kid['groupId'] return False - def _esm(self, url=False, data=None): + def _esm_cmd(self, url=False, data=None): + self._login() + return self._admin_esm_cmd(url, data) + + def _admin_esm_cmd(self, url=False, data=None): """ - _esm represent the entry point to send requests to ESM Appliance. - Send the HTTPS call, get response in JSON + _admin_esm_cmd represent the entry point to send requests to ESM + Appliance. Send the HTTPS call, get response in JSON convert response into Python Object and return it. """ if url: @@ -166,10 +170,9 @@ class CoraidRESTClient(object): def _configure(self, data): """In charge of all commands into 'configure'.""" - self._login() url = 'configure' LOG.debug(_('Configure data : %s'), data) - response = self._esm(url, data) + response = self._esm_cmd(url, data) LOG.debug(_("Configure response : %s"), response) if response: if response.get('configState') == 'completedSuccessfully': @@ -184,7 +187,7 @@ class CoraidRESTClient(object): """Retrive volume informations for a given volume name.""" url = 'fetch?shelf=cms&orchStrRepo&lv=%s' % (volume_name) try: - response = self._esm(url) + response = self._esm_cmd(url) info = response[0][1]['reply'][0] return {"pool": info['lv']['containingPool'], "repo": info['repoName'], -- 2.45.2