GlusterFS: fix retrieval of management address of GlusterFS volumes
We need the so-called management address of a GlusterFS volume (ssh address of its management node) at a few places for bookkeping reasons (certain data like GlusterFS version is stored in management address-keyed dicts). So far it was available only through ad-hoc mangling of various attributes of a GlusterManager instance that represents the volume. Now we make it available directly from GlusterManager as an attribute. Also fix an occurrence of ad-hoc mangling going wrong, ie. where a wrongly constructed address is attempted to be used as dict key. Change-Id: Ic5a96bc99943dda3592372512916257d53f61b80 Closes-Bug: #1476710
This commit is contained in:
parent
c98d1c2be8
commit
26ff88ca9f
|
@ -120,6 +120,8 @@ class GlusterManager(object):
|
|||
_('Invalid gluster address %s.') % address)
|
||||
self.remote_user = m.group('user')
|
||||
self.host = m.group('host')
|
||||
self.management_address = '@'.join(
|
||||
filter(None, (self.remote_user, self.host)))
|
||||
self.qualified = address
|
||||
if self.volume:
|
||||
self.export = ':/'.join([self.host, self.volume])
|
||||
|
|
|
@ -508,11 +508,6 @@ class GlusterfsNativeShareDriver(driver.ExecuteMixin, driver.ShareDriver):
|
|||
shutil.rmtree(tmpdir, ignore_errors=True)
|
||||
raise
|
||||
|
||||
# extracting Gluster server address, i.e.,'[remote_user]@host' from the
|
||||
# GlusterManager object.
|
||||
srvaddr = re.sub(':/' + gluster_mgr.volume + '$', '',
|
||||
gluster_mgr.qualified)
|
||||
|
||||
# Delete the contents of a GlusterFS volume that is temporarily
|
||||
# mounted.
|
||||
# From GlusterFS version 3.7, two directories, '.trashcan' at the root
|
||||
|
@ -521,6 +516,7 @@ class GlusterfsNativeShareDriver(driver.ExecuteMixin, driver.ShareDriver):
|
|||
# GlusterFS does not allow unlink(2) of the two directories. So do not
|
||||
# delete the paths of the two directories, but delete their contents
|
||||
# along with the rest of the contents of the volume.
|
||||
srvaddr = gluster_mgr.management_address
|
||||
if glusterfs.GlusterManager.numreduct(self.glusterfs_versions[srvaddr]
|
||||
) < (3, 7):
|
||||
cmd = ['find', tmpdir, '-mindepth', '1', '-delete']
|
||||
|
@ -628,11 +624,11 @@ class GlusterfsNativeShareDriver(driver.ExecuteMixin, driver.ShareDriver):
|
|||
"""Creates a snapshot."""
|
||||
|
||||
vol = snapshot['share']['export_location']
|
||||
gluster_mgr = self.gluster_used_vols_dict[vol]
|
||||
if vol in self.gluster_nosnap_vols_dict:
|
||||
opret, operrno = -1, 0
|
||||
operrstr = self.gluster_nosnap_vols_dict[vol]
|
||||
else:
|
||||
gluster_mgr = self.gluster_used_vols_dict[vol]
|
||||
args = ('--xml', 'snapshot', 'create', 'manila-' + snapshot['id'],
|
||||
gluster_mgr.volume)
|
||||
try:
|
||||
|
@ -654,7 +650,7 @@ class GlusterfsNativeShareDriver(driver.ExecuteMixin, driver.ShareDriver):
|
|||
operrstr = outxml.find('opErrstr').text
|
||||
|
||||
if opret == -1:
|
||||
vers = self.glusterfs_versions[vol]
|
||||
vers = self.glusterfs_versions[gluster_mgr.management_address]
|
||||
if glusterfs.GlusterManager.numreduct(vers) > (3, 6):
|
||||
# This logic has not yet been implemented in GlusterFS 3.6
|
||||
if operrno == 0:
|
||||
|
|
|
@ -776,7 +776,7 @@ class GlusterfsNativeShareDriverTestCase(test.TestCase):
|
|||
|
||||
def test_create_snapshot(self):
|
||||
self._driver.gluster_nosnap_vols_dict = {}
|
||||
self._driver.glusterfs_versions = {self.glusterfs_target1: ('3', '6')}
|
||||
self._driver.glusterfs_versions = {self.glusterfs_server1: ('3', '6')}
|
||||
|
||||
gmgr = glusterfs.GlusterManager
|
||||
gmgr1 = gmgr(self.glusterfs_target1, self._execute, None, None)
|
||||
|
@ -798,7 +798,7 @@ class GlusterfsNativeShareDriverTestCase(test.TestCase):
|
|||
|
||||
def test_create_snapshot_error(self):
|
||||
self._driver.gluster_nosnap_vols_dict = {}
|
||||
self._driver.glusterfs_versions = {self.glusterfs_target1: ('3', '6')}
|
||||
self._driver.glusterfs_versions = {self.glusterfs_server1: ('3', '6')}
|
||||
|
||||
gmgr = glusterfs.GlusterManager
|
||||
gmgr1 = gmgr(self.glusterfs_target1, self._execute, None, None)
|
||||
|
@ -826,7 +826,7 @@ class GlusterfsNativeShareDriverTestCase(test.TestCase):
|
|||
def test_create_snapshot_no_snap(self, vers_minor, exctype):
|
||||
self._driver.gluster_nosnap_vols_dict = {}
|
||||
self._driver.glusterfs_versions = {
|
||||
self.glusterfs_target1: ('3', vers_minor)}
|
||||
self.glusterfs_server1: ('3', vers_minor)}
|
||||
|
||||
gmgr = glusterfs.GlusterManager
|
||||
gmgr1 = gmgr(self.glusterfs_target1, self._execute, None, None)
|
||||
|
@ -854,8 +854,12 @@ class GlusterfsNativeShareDriverTestCase(test.TestCase):
|
|||
self._driver.gluster_nosnap_vols_dict = {
|
||||
self.share1['export_location']: 'fake error'}
|
||||
self._driver.glusterfs_versions = {
|
||||
self.glusterfs_target1: ('3', vers_minor)}
|
||||
self.glusterfs_server1: ('3', vers_minor)}
|
||||
|
||||
gmgr = glusterfs.GlusterManager
|
||||
gmgr1 = gmgr(self.glusterfs_target1, self._execute, None, None)
|
||||
|
||||
self._driver.gluster_used_vols_dict = {self.glusterfs_target1: gmgr1}
|
||||
snapshot = {
|
||||
'id': 'fake_snap_id',
|
||||
'share_id': self.share1['id'],
|
||||
|
|
Loading…
Reference in New Issue