Merge "Fix metadata retrieval in GPFS driver"

This commit is contained in:
Jenkins 2015-11-24 19:10:18 +00:00 committed by Gerrit Code Review
commit 993aaa4c6a
2 changed files with 55 additions and 34 deletions

View File

@ -688,23 +688,23 @@ class GPFSDriverTestCase(test.TestCase):
@mock.patch('cinder.volume.drivers.ibm.gpfs.GPFSDriver.'
'_gpfs_change_attributes')
def test_set_volume_attributes(self, mock_change_attributes, mock_mkfs):
metadata = [{'key': 'data_pool_name', 'value': 'test'},
{'key': 'replicas', 'value': 'test'},
{'key': 'dio', 'value': 'test'},
{'key': 'write_affinity_depth', 'value': 'test'},
{'key': 'block_group_factor', 'value': 'test'},
{'key': 'write_affinity_failure_group', 'value': 'test'},
{'key': 'test', 'value': 'test'},
{'key': 'fstype', 'value': 'test'},
{'key': 'fslabel', 'value': 'test'},
{'key': 'test', 'value': 'test'}]
metadata = {'data_pool_name': 'test',
'replicas': 'test',
'dio': 'test',
'write_affinity_depth': 'test',
'block_group_factor': 'test',
'write_affinity_failure_group': 'test',
'test': 'test',
'fstype': 'test',
'fslabel': 'test',
'test': 'test'}
self.driver._set_volume_attributes('', '', metadata)
@mock.patch('cinder.volume.drivers.ibm.gpfs.GPFSDriver.'
'_gpfs_change_attributes')
def test_set_volume_attributes_no_attributes(self, mock_change_attributes):
metadata = []
metadata = {}
org_value = self.driver.configuration.gpfs_storage_pool
self.flags(volume_driver=self.driver_name, gpfs_storage_pool='system')
self.driver._set_volume_attributes('', '', metadata)
@ -714,13 +714,26 @@ class GPFSDriverTestCase(test.TestCase):
@mock.patch('cinder.volume.drivers.ibm.gpfs.GPFSDriver.'
'_gpfs_change_attributes')
def test_set_volume_attributes_no_options(self, mock_change_attributes):
metadata = []
metadata = {}
org_value = self.driver.configuration.gpfs_storage_pool
self.flags(volume_driver=self.driver_name, gpfs_storage_pool='')
self.driver._set_volume_attributes('', '', metadata)
self.flags(volume_driver=self.driver_name,
gpfs_storage_pool=org_value)
def test_get_volume_metadata(self):
volume = self._fake_volume()
volume['volume_metadata'] = [{'key': 'fake_key',
'value': 'fake_value'}]
expected_metadata = {'fake_key': 'fake_value'}
v_metadata = self.driver._get_volume_metadata(volume)
self.assertEqual(expected_metadata, v_metadata)
volume.pop('volume_metadata')
volume['metadata'] = {'key': 'value'}
expected_metadata = {'key': 'value'}
v_metadata = self.driver._get_volume_metadata(volume)
self.assertEqual(expected_metadata, v_metadata)
@mock.patch('cinder.utils.execute')
@mock.patch('cinder.volume.drivers.ibm.gpfs.GPFSDriver.'
'_allocate_file_blocks')
@ -808,7 +821,7 @@ class GPFSDriverTestCase(test.TestCase):
value = {}
value['value'] = 'test'
mock_set_volume_attributes.return_value = True
metadata = [{'key': 'fake_key', 'value': 'fake_value'}]
metadata = {'fake_key': 'fake_value'}
org_value = self.driver.configuration.gpfs_sparse_volumes
self.flags(volume_driver=self.driver_name, gpfs_sparse_volumes=False)
@ -875,7 +888,7 @@ class GPFSDriverTestCase(test.TestCase):
snapshot = self._fake_snapshot()
mock_snapshot_path.return_value = "/tmp/fakepath"
mock_set_volume_attributes.return_value = True
metadata = [{'key': 'fake_key', 'value': 'fake_value'}]
metadata = {'fake_key': 'fake_value'}
self.assertTrue(self.driver._set_volume_attributes(volume, 'test',
metadata))
@ -927,7 +940,7 @@ class GPFSDriverTestCase(test.TestCase):
volume = self._fake_volume()
src_volume = self._fake_volume()
mock_set_volume_attributes.return_value = True
metadata = [{'key': 'fake_key', 'value': 'fake_value'}]
metadata = {'fake_key': 'fake_value'}
self.assertTrue(self.driver._set_volume_attributes(volume, 'test',
metadata))

View File

@ -478,20 +478,20 @@ class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD,
set_pool = False
options = []
for item in metadata:
if item['key'] == 'data_pool_name':
options.extend(['-P', item['value']])
if item == 'data_pool_name':
options.extend(['-P', metadata[item]])
set_pool = True
elif item['key'] == 'replicas':
options.extend(['-r', item['value'], '-m', item['value']])
elif item['key'] == 'dio':
options.extend(['-D', item['value']])
elif item['key'] == 'write_affinity_depth':
options.extend(['--write-affinity-depth', item['value']])
elif item['key'] == 'block_group_factor':
options.extend(['--block-group-factor', item['value']])
elif item['key'] == 'write_affinity_failure_group':
elif item == 'replicas':
options.extend(['-r', metadata[item], '-m', metadata[item]])
elif item == 'dio':
options.extend(['-D', metadata[item]])
elif item == 'write_affinity_depth':
options.extend(['--write-affinity-depth', metadata[item]])
elif item == 'block_group_factor':
options.extend(['--block-group-factor', metadata[item]])
elif item == 'write_affinity_failure_group':
options.extend(['--write-affinity-failure-group',
item['value']])
metadata[item]])
# metadata value has precedence over value set in volume type
if self.configuration.gpfs_storage_pool and not set_pool:
@ -503,13 +503,21 @@ class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD,
fstype = None
fslabel = None
for item in metadata:
if item['key'] == 'fstype':
fstype = item['value']
elif item['key'] == 'fslabel':
fslabel = item['value']
if item == 'fstype':
fstype = metadata[item]
elif item == 'fslabel':
fslabel = metadata[item]
if fstype:
self._mkfs(volume, fstype, fslabel)
def _get_volume_metadata(self, volume):
volume_metadata = {}
if 'volume_metadata' in volume:
for metadata in volume['volume_metadata']:
volume_metadata[metadata['key']] = metadata['value']
return volume_metadata
return volume['metadata'] if 'metadata' in volume else {}
def create_volume(self, volume):
"""Creates a GPFS volume."""
# Check if GPFS is mounted
@ -523,7 +531,7 @@ class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD,
self._set_rw_permission(volume_path)
# Set the attributes prior to allocating any blocks so that
# they are allocated according to the policy
v_metadata = volume.get('volume_metadata')
v_metadata = self._get_volume_metadata(volume)
self._set_volume_attributes(volume, volume_path, v_metadata)
if not self.configuration.gpfs_sparse_volumes:
@ -548,7 +556,7 @@ class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD,
self._gpfs_full_copy(snapshot_path, volume_path)
self._set_rw_permission(volume_path)
v_metadata = volume.get('volume_metadata')
v_metadata = self._get_volume_metadata(volume)
self._set_volume_attributes(volume, volume_path, v_metadata)
def create_volume_from_snapshot(self, volume, snapshot):
@ -568,7 +576,7 @@ class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD,
else:
self._gpfs_full_copy(src, dest)
self._set_rw_permission(dest)
v_metadata = volume.get('volume_metadata')
v_metadata = self._get_volume_metadata(volume)
self._set_volume_attributes(volume, dest, v_metadata)
def create_cloned_volume(self, volume, src_vref):