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:
Csaba Henk 2015-07-21 23:27:19 +02:00
parent c98d1c2be8
commit 26ff88ca9f
3 changed files with 13 additions and 11 deletions

View File

@ -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])

View File

@ -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:

View File

@ -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'],