Merge "Support extend_share in Huawei driver"

This commit is contained in:
Jenkins 2015-06-17 15:33:05 +00:00 committed by Gerrit Code Review
commit 99f5809326
5 changed files with 84 additions and 10 deletions

View File

@ -51,6 +51,10 @@ class HuaweiBase(object):
def deny_access(self, share, access, share_server):
"""Deny access to the share."""
@abc.abstractmethod
def extend_share(self, share, new_size, share_server):
"""Extends size of existing share."""
@abc.abstractmethod
def get_network_allocations_number(self):
"""Get number of network interfaces to be created."""

View File

@ -98,6 +98,10 @@ class HuaweiNasDriver(driver.ShareDriver):
location = self.plugin.create_share(share, share_server)
return location
def extend_share(self, share, new_size, share_server=None):
LOG.debug("Extend a share.")
self.plugin.extend_share(share, new_size, share_server)
def create_share_from_snapshot(self, context, share, snapshot,
share_server=None):
"""Is called to create share from snapshot."""

View File

@ -92,6 +92,24 @@ class V3StorageConnection(driver.HuaweiBase):
location = self._get_location_path(share_name, share_proto)
return location
def extend_share(self, share, new_size, share_server):
share_proto = share['share_proto']
share_name = share['name']
# The unit is the sectors.
size = new_size * units.Mi * 2
share_type = self.helper._get_share_type(share_proto)
share = self.helper._get_share_by_name(share_name, share_type)
if not share:
err_msg = (_("Can not get share ID by share %s.")
% share_name)
LOG.error(err_msg)
raise exception.InvalidShareAccess(reason=err_msg)
fsid = share['FSID']
self.helper._extend_share(fsid, size)
def check_fs_status(self, health_status, running_status):
if (health_status == constants.STATUS_FS_HEALTH
and running_status == constants.STATUS_FS_RUNNING):

View File

@ -548,3 +548,17 @@ class RestHelper(object):
snapshot_id = (fs_id + "@" + "share_snapshot_"
+ snap_name.replace("-", "_"))
return snapshot_id
def _extend_share(self, fsid, new_size):
url = self.url + "/filesystem/%s" % fsid
capacityinfo = {
"CAPACITY": new_size,
}
data = jsonutils.dumps(capacityinfo)
result = self.call(url, data, "PUT")
msg = "Extend a share error!"
self._assert_rest_result(result, msg)
self._assert_data_in_result(result, msg)

View File

@ -49,20 +49,28 @@ def data_session(url):
return data
def filesystem(method, fs_status_flag):
if method == "DELETE":
def filesystem(method, data, fs_status_flag):
extend_share_flag = False
if method == "PUT":
if data == """{"CAPACITY": 8388608}""":
data = """{"error":{"code":0},
"data":{"ID":"4",
"CAPACITY":"8388608"}}"""
extend_share_flag = True
elif method == "DELETE":
data = """{"error":{"code":0}}"""
if method == "GET":
elif method == "GET":
if fs_status_flag:
data = """{"error":{"code":0},
"data":{"HEALTHSTATUS":"1",
"RUNNINGSTATUS":"27"}}"""
"data":{"HEALTHSTATUS":"1",
"RUNNINGSTATUS":"27"}}"""
else:
data = """{"error":{"code":0},
"data":{"HEALTHSTATUS":"0",
"RUNNINGSTATUS":"27"}}"""
return data
else:
data = '{"error":{"code":31755596}}'
return (data, extend_share_flag)
class FakeHuaweiNasHelper(helper.RestHelper):
@ -83,6 +91,7 @@ class FakeHuaweiNasHelper(helper.RestHelper):
self.share_exist = True
self.service_nfs_status_flag = True
self.create_share_data_flag = False
self.extend_share_flag = False
def _change_file_mode(self, filepath):
pass
@ -90,7 +99,6 @@ class FakeHuaweiNasHelper(helper.RestHelper):
def call(self, url, data=None, method=None):
url = url.replace('http://100.115.10.69:8082/deviceManager/rest', '')
url = url.replace('/210235G7J20000000000/', '')
data = None
if self.test_normal:
if url == "/xx/sessions" or url == "sessions":
@ -167,7 +175,7 @@ class FakeHuaweiNasHelper(helper.RestHelper):
data = '{"error":{"code":1073754118}}'
self.delete_flag = True
if url == "FSSNAPSHOT/3" or url == "filesystem/4":
if url == "FSSNAPSHOT/3":
data = """{"error":{"code":0}}"""
self.delete_flag = True
@ -249,7 +257,8 @@ class FakeHuaweiNasHelper(helper.RestHelper):
"NAME":"share_fake_uuid"}]}"""
if url == "filesystem/4":
data = filesystem(method, self.fs_status_flag)
data, self.extend_share_flag = filesystem(method, data,
self.fs_status_flag)
self.delete_flag = True
else:
@ -508,6 +517,31 @@ class HuaweiShareDriverTestCase(test.TestCase):
self.share_server)
self.assertEqual("100.115.10.68:/share_fake_uuid", location)
def test_extend_share_success(self):
self.driver.plugin.helper.extend_share_flag = False
self.driver.plugin.helper.login()
self.driver.extend_share(self.share_nfs, 4,
self.share_server)
self.assertTrue(self.driver.plugin.helper.extend_share_flag)
def test_extend_share_fail(self):
self.driver.plugin.helper.login()
self.driver.plugin.helper.test_normal = False
self.assertRaises(exception.InvalidShare,
self.driver.extend_share,
self.share_nfs,
4,
self.share_server)
def test_extend_share_not_exist(self):
self.driver.plugin.helper.login()
self.driver.plugin.helper.share_exist = False
self.assertRaises(exception.InvalidShareAccess,
self.driver.extend_share,
self.share_nfs,
4,
self.share_server)
def test_create_share_nfs_success(self):
self.driver.plugin.helper.login()
location = self.driver.create_share(self._context, self.share_nfs,