def test_set_and_get_config_params(self): """ Test the set_config_params functionality by validation through the get_config_params functionality - Verify default configuration for newly created vDisk - Attempt to set disallowed values - Attempt to sync and async mode without specifying DTL target - Set SCO size """ structure = DalHelper.build_dal_structure({ 'vpools': [1], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1)], # (<id>, <vpool_id>, <storagerouter_id>) 'mds_services': [(1, 1)] } # (<id>, <storagedriver_id>) ) storagedrivers = structure['storagedrivers'] # Create vDisk and validate default configuration vdisk_1 = VDisk( VDiskController.create_new( volume_name='vdisk_1', volume_size=1024**3, storagedriver_guid=storagedrivers[1].guid)) configuration = VDiskController.get_config_params( vdisk_guid=vdisk_1.guid) expected_keys = { 'sco_size', 'dtl_mode', 'write_buffer', 'dtl_target', 'pagecache_ratio', 'cache_quota' } self.assertEqual( first=expected_keys, second=set(configuration.keys()), msg= 'Keys returned by get_config_params do not match the expected keys' ) tlog_multiplier = vdisk_1.storagedriver_client.get_tlog_multiplier( vdisk_1.volume_id) default_sco_size = vdisk_1.storagedriver_client.get_sco_multiplier( vdisk_1.volume_id) / 1024 * 4 non_disposable_sco_factor = vdisk_1.storagedriver_client.get_sco_cache_max_non_disposable_factor( vdisk_1.volume_id) default_values = { 'sco_size': default_sco_size, 'dtl_mode': StorageDriverClient.FRAMEWORK_DTL_NO_SYNC, 'dtl_target': [], 'cache_quota': { 'fragment': None, 'block': None }, 'write_buffer': int(tlog_multiplier * default_sco_size * non_disposable_sco_factor), 'pagecache_ratio': 1.0 } for key, value in default_values.iteritems(): self.assertEqual( first=configuration[key], second=value, msg= 'Value for "{0}" does not match expected default value: {1} vs {2}' .format(key, configuration[key], value)) # Attempt to set incorrect values new_config_params = { 'dtl_mode': StorageDriverClient.FRAMEWORK_DTL_NO_SYNC, 'sco_size': 4, 'dtl_target': [], 'cache_quota': { 'fragment': 5 * 1024**3, 'block': 1024**3 }, 'write_buffer': 128 } for key, values in { 'dtl_mode': ['unknown', StorageDriverClient.VOLDRV_DTL_ASYNC], 'sco_size': list(set(range(257)).difference({4, 8, 16, 32, 64, 128})) + [-1], 'dtl_target': [{}, (), 0], 'cache_quota': [{ 'fragment': -1 }, { 'fragment': 1 * 1024.0**3 - 1 }, { 'fragment': 1024**4 + 1 }, { 'block': -1 }, { 'block': 0.1 * 1024.0**3 - 1 }, { 'block': 1024.0**4 + 1 }], 'write_buffer': [-1] + range(128) + range(10241, 10300), 'pagecache_ratio': [-0.1, 0, 1.1] }.iteritems(): for value in values: config_params = copy.deepcopy(new_config_params) config_params[key] = value with self.assertRaises(RuntimeError): VDiskController.set_config_params( vdisk_guid=vdisk_1.guid, new_config_params=config_params) # Set SCO size set_config = copy.deepcopy(new_config_params) set_config['sco_size'] = 32 VDiskController.set_config_params(vdisk_guid=vdisk_1.guid, new_config_params=set_config) get_config = VDiskController.get_config_params(vdisk_guid=vdisk_1.guid) for key in set_config.iterkeys(): self.assertEqual( first=set_config[key], second=get_config[key], msg= 'Actual value for key "{0}" differs from expected. Expected: {1} - Actual: {2}' .format(key, set_config[key], get_config[key])) # Verify cache_quota vdisk_1.discard() self.assertEqual(first={ 'fragment': 5 * 1024.0**3, 'block': 1024.0**3 }, second=vdisk_1.cache_quota) # Restore default cache_quota again new_config_params['cache_quota'] = None VDiskController.set_config_params(vdisk_guid=vdisk_1.guid, new_config_params=new_config_params) vdisk_1.discard() self.assertIsNone(vdisk_1.cache_quota) # Set pagecache_ratio capacity = vdisk_1.storagedriver_client.get_metadata_cache_capacity( str(vdisk_1.volume_id)) self.assertEqual(capacity, 8192) # 1GiB volume has by default 8192 pages cached set_config = copy.deepcopy(new_config_params) set_config['pagecache_ratio'] = 0.5 VDiskController.set_config_params(vdisk_guid=vdisk_1.guid, new_config_params=set_config) get_config = VDiskController.get_config_params(vdisk_guid=vdisk_1.guid) self.assertEqual(get_config['pagecache_ratio'], 0.5) capacity = vdisk_1.storagedriver_client.get_metadata_cache_capacity( str(vdisk_1.volume_id)) self.assertEqual(capacity, 4096) # Small volumes and pagecache_ratio vdisk_small = VDisk( VDiskController.create_new( volume_name='vdisk_small', volume_size=1024 * 8, storagedriver_guid=storagedrivers[1].guid)) capacity = vdisk_small.storagedriver_client.get_metadata_cache_capacity( str(vdisk_small.volume_id)) self.assertEqual(capacity, 1)
def test_folder_renames(self): """ Validates whether folder renames are correctly processed """ structure = DalHelper.build_dal_structure({ 'vpools': [1], 'storagerouters': [1], 'storagedrivers': [(1, 1, 1)], # (<id>, <vpool_id>, <storagerouter_id>) 'mds_services': [(1, 1)] } # (<id>, <storagedriver_id>) ) storagedriver = structure['storagedrivers'][1] vdisk1 = VDisk( VDiskController.create_new('foo/one.raw', 1024**3, storagedriver.guid)) vdisk2 = VDisk( VDiskController.create_new('bar/two.raw', 1024**3, storagedriver.guid)) vdisk3 = VDisk( VDiskController.create_new('three.raw', 1024**3, storagedriver.guid)) VDiskController.rename_from_voldrv( old_path='/thr', new_path='/test', storagedriver_id=storagedriver.storagedriver_id) vdisk1.discard() vdisk2.discard() vdisk3.discard() self.assertEqual(vdisk1.devicename, '/foo/one.raw') self.assertEqual(vdisk2.devicename, '/bar/two.raw') self.assertEqual(vdisk3.devicename, '/three.raw') VDiskController.rename_from_voldrv( old_path='/foo', new_path='/bar', storagedriver_id=storagedriver.storagedriver_id) vdisk1.discard() vdisk2.discard() vdisk3.discard() self.assertEqual(vdisk1.devicename, '/bar/one.raw') self.assertEqual(vdisk2.devicename, '/bar/two.raw') self.assertEqual(vdisk3.devicename, '/three.raw') VDiskController.rename_from_voldrv( old_path='/bar', new_path='/foo', storagedriver_id=storagedriver.storagedriver_id) vdisk1.discard() vdisk2.discard() vdisk3.discard() self.assertEqual(vdisk1.devicename, '/foo/one.raw') self.assertEqual(vdisk2.devicename, '/foo/two.raw') self.assertEqual(vdisk3.devicename, '/three.raw')