コード例 #1
0
    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)
コード例 #2
0
    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')