From 3f5a7e1bc84f0c202487955d8587ba041dcc1450 Mon Sep 17 00:00:00 2001 From: Tom Swanson Date: Thu, 10 Nov 2016 12:02:22 -0600 Subject: [PATCH] Dell SC: Reject thaw call when backend is failed over Implements thaw_backend function. Driver has limited support in a failed over state so thaw_backend has been implemented to reject the thaw call when in such a state. Change-Id: I3552f67f0c39c1d1e77e4fa8111ae7a4be165b0d --- .../unit/volume/drivers/dell/test_dellsc.py | 17 +++++++++++++++ .../drivers/dell/dell_storagecenter_common.py | 21 +++++++++++++++++++ ...Dell-SC-thaw_backend-b9362d381fabd4c9.yaml | 5 +++++ 3 files changed, 43 insertions(+) create mode 100644 releasenotes/notes/Dell-SC-thaw_backend-b9362d381fabd4c9.yaml diff --git a/cinder/tests/unit/volume/drivers/dell/test_dellsc.py b/cinder/tests/unit/volume/drivers/dell/test_dellsc.py index 2350e0a213c..af7c0f87f48 100644 --- a/cinder/tests/unit/volume/drivers/dell/test_dellsc.py +++ b/cinder/tests/unit/volume/drivers/dell/test_dellsc.py @@ -4003,3 +4003,20 @@ class DellSCSanISCSIDriverTestCase(test.TestCase): ret = self.driver._get_qos(12345) self.assertEqual('cinderqos', ret) self.driver.backends = backends + + def test_thaw_backend(self, + mock_close_connection, + mock_open_connection, + mock_init): + self.driver.failed_over = False + ret = self.driver.thaw_backend(self._context) + self.assertTrue(ret) + + def test_thaw_backend_failed_over(self, + mock_close_connection, + mock_open_connection, + mock_init): + self.driver.failed_over = True + self.assertRaises(exception.Invalid, + self.driver.thaw_backend, + self._context) diff --git a/cinder/volume/drivers/dell/dell_storagecenter_common.py b/cinder/volume/drivers/dell/dell_storagecenter_common.py index 0df2364279a..55be19586b0 100644 --- a/cinder/volume/drivers/dell/dell_storagecenter_common.py +++ b/cinder/volume/drivers/dell/dell_storagecenter_common.py @@ -1730,3 +1730,24 @@ class DellCommonDriver(driver.ConsistencyGroupVD, driver.ManageableVD, # Free our snapshot. api.unmanage_replay(screplay) # Do not check our result. + + def thaw_backend(self, context): + """Notify the backend that it's unfrozen/thawed. + + This is a gate. We do not allow the backend to be thawed if + it is still failed over. + + :param context: security context + :response: True on success + :raises Invalid: if it cannot be thawed. + """ + # We shouldn't be called if we are not failed over. + if self.failed_over: + msg = _('The Dell SC array does not support thawing a failed over' + ' replication. Please migrate volumes to an operational ' + 'back-end or resolve primary system issues and ' + 'fail back to reenable full functionality.') + LOG.error(msg) + raise exception.Invalid(reason=msg) + + return True diff --git a/releasenotes/notes/Dell-SC-thaw_backend-b9362d381fabd4c9.yaml b/releasenotes/notes/Dell-SC-thaw_backend-b9362d381fabd4c9.yaml new file mode 100644 index 00000000000..a131b6d0a3d --- /dev/null +++ b/releasenotes/notes/Dell-SC-thaw_backend-b9362d381fabd4c9.yaml @@ -0,0 +1,5 @@ +--- +issues: + - Dell SC Cinder driver has limited support in a failed + over state so thaw_backend has been implemented to + reject the thaw call when in such a state. \ No newline at end of file