Fix check_for_setup_error for sheepdog driver

Current implementation of check_for_setup_error() of sheepdog driver
cannot work correctly with the latest version of sheepdog cluster.
This patch fixes it and adds tests for both old and new version.

Fixes: bug #1195098
Change-Id: Ia710789e4bedd7c83cd47eff6b2fc532af39d94a
This commit is contained in:
Kai Zhang
2013-06-27 00:31:36 -07:00
parent 5b7ff48903
commit 039dce71d4
2 changed files with 31 additions and 1 deletions

View File

@@ -24,6 +24,24 @@ COLLIE_NODE_INFO = """
Total 107287605248 3623897354 3% 54760833024
"""
COLLIE_CLUSTER_INFO_0_5 = """
Cluster status: running
Cluster created at Tue Jun 25 19:51:41 2013
Epoch Time Version
2013-06-25 19:51:41 1 [127.0.0.1:7000, 127.0.0.1:7001, 127.0.0.1:7002]
"""
COLLIE_CLUSTER_INFO_0_6 = """
Cluster status: running, auto-recovery enabled
Cluster created at Tue Jun 25 19:51:41 2013
Epoch Time Version
2013-06-25 19:51:41 1 [127.0.0.1:7000, 127.0.0.1:7001, 127.0.0.1:7002]
"""
class SheepdogTestCase(test.TestCase):
@@ -62,3 +80,15 @@ class SheepdogTestCase(test.TestCase):
QoS_support=False)
actual = self.driver.get_volume_stats(True)
self.assertDictMatch(expected, actual)
def test_check_for_setup_error_0_5(self):
def fake_stats(*args):
return COLLIE_CLUSTER_INFO_0_5, ''
self.stubs.Set(self.driver, '_execute', fake_stats)
self.driver.check_for_setup_error()
def test_check_for_setup_error_0_6(self):
def fake_stats(*args):
return COLLIE_CLUSTER_INFO_0_6, ''
self.stubs.Set(self.driver, '_execute', fake_stats)
self.driver.check_for_setup_error()

View File

@@ -43,7 +43,7 @@ class SheepdogDriver(driver.VolumeDriver):
# gives short output, but for compatibility reason we won't
# use it and just check if 'running' is in the output.
(out, err) = self._execute('collie', 'cluster', 'info')
if 'running' not in out.split():
if 'status: running' not in out:
exception_message = (_("Sheepdog is not working: %s") % out)
raise exception.VolumeBackendAPIException(
data=exception_message)