Example #1
0
 def setUp(self):
     super(HostManagerTestCase, self).setUp()
     self.host_manager = host_manager.HostManager()
     self.fake_hosts = [host_manager.HostState('fake_host%s' % x)
                        for x in range(1, 5)]
     # For a second scheduler service.
     self.host_manager_1 = host_manager.HostManager()
    def test_get_filtered_objects_info_and_debug_log_none_returned(self):

        all_filters = [FilterA, FilterA, FilterB]
        fake_hosts = [
            host_manager.HostState('fake_host%s' % x) for x in range(1, 4)
        ]

        filt_props = {
            "request_spec": {
                'volume_id': fake.VOLUME_ID,
                'volume_properties': {
                    'project_id': fake.PROJECT_ID,
                    'size': 2048,
                    'host': 'host4'
                }
            }
        }
        with mock.patch.object(base_filter, 'LOG') as mock_log:
            result = self.handler.get_filtered_objects(all_filters, fake_hosts,
                                                       filt_props)
            self.assertFalse(result)
            msg = "with volume ID '%s'" % fake.VOLUME_ID
            # FilterA should leave Host1 and Host2; FilterB should leave None.
            exp_output = ("FilterA: (start: 3, end: 2), "
                          "FilterA: (start: 2, end: 1)")
            cargs = mock_log.info.call_args[0][0]
            self.assertIn(msg, cargs)
            self.assertIn(exp_output, cargs)

            exp_output = ("[('FilterA', ['fake_host2', 'fake_host3']), "
                          "('FilterA', ['fake_host3']), " +
                          "('FilterB', None)]")
            cargs = mock_log.debug.call_args[0][0]
            self.assertIn(msg, cargs)
            self.assertIn(exp_output, cargs)
Example #3
0
    def test_update_from_volume_capability_nopool(self):
        fake_host = host_manager.HostState('host1')
        self.assertIsNone(fake_host.free_capacity_gb)

        volume_capability = {
            'total_capacity_gb': 1024,
            'free_capacity_gb': 512,
            'provisioned_capacity_gb': 512,
            'reserved_percentage': 0,
            'timestamp': None
        }

        fake_host.update_from_volume_capability(volume_capability)
        # Backend level stats remain uninitialized
        self.assertEqual(0, fake_host.total_capacity_gb)
        self.assertIsNone(fake_host.free_capacity_gb)
        # Pool stats has been updated
        self.assertEqual(1024, fake_host.pools['_pool0'].total_capacity_gb)
        self.assertEqual(512, fake_host.pools['_pool0'].free_capacity_gb)
        self.assertEqual(512,
                         fake_host.pools['_pool0'].provisioned_capacity_gb)

        # Test update for existing host state
        volume_capability.update(dict(total_capacity_gb=1000))
        fake_host.update_from_volume_capability(volume_capability)
        self.assertEqual(1000, fake_host.pools['_pool0'].total_capacity_gb)

        # Test update for existing host state with different backend name
        volume_capability.update(dict(volume_backend_name='magic'))
        fake_host.update_from_volume_capability(volume_capability)
        self.assertEqual(1000, fake_host.pools['magic'].total_capacity_gb)
        self.assertEqual(512, fake_host.pools['magic'].free_capacity_gb)
        self.assertEqual(512, fake_host.pools['magic'].provisioned_capacity_gb)
        # 'pool0' becomes nonactive pool, and is deleted
        self.assertRaises(KeyError, lambda: fake_host.pools['pool0'])
Example #4
0
 def test_use_of_chance_weigher_via_host_manager(self):
     # ensure we don't lose any hosts when weighing with
     # the ChanceWeigher
     hm = host_manager.HostManager()
     fake_hosts = [host_manager.HostState('fake_host%s' % x)
                   for x in range(1, 5)]
     weighed_hosts = hm.get_weighed_hosts(fake_hosts, {}, 'ChanceWeigher')
     self.assertEqual(4, len(weighed_hosts))
    def test_update_from_volume_capability(self):
        fake_host = host_manager.HostState('host1')
        self.assertIsNone(fake_host.free_capacity_gb)

        volume_capability = {'total_capacity_gb': 1024,
                             'free_capacity_gb': 512,
                             'reserved_percentage': 0,
                             'timestamp': None}

        fake_host.update_from_volume_capability(volume_capability)
        self.assertEqual(fake_host.free_capacity_gb, 512)
Example #6
0
    def test_update_from_empty_volume_capability(self):
        fake_host = host_manager.HostState('host1')

        vol_cap = {'timestamp': None}

        fake_host.update_from_volume_capability(vol_cap)
        self.assertEqual(fake_host.total_capacity_gb, 0)
        self.assertEqual(fake_host.free_capacity_gb, None)
        # Pool stats has been updated
        self.assertEqual(fake_host.pools['_pool0'].total_capacity_gb, 0)
        self.assertEqual(fake_host.pools['_pool0'].free_capacity_gb, 0)
    def test_update_from_volume_unknown_capability(self):
        fake_host = host_manager.HostState('host1')
        self.assertIsNone(fake_host.free_capacity_gb)

        volume_capability = {'total_capacity_gb': 'infinite',
                             'free_capacity_gb': 'unknown',
                             'reserved_percentage': 0,
                             'timestamp': None}

        fake_host.update_from_volume_capability(volume_capability)
        self.assertEqual(fake_host.total_capacity_gb, 'infinite')
        self.assertEqual(fake_host.free_capacity_gb, 'unknown')
Example #8
0
    def test_post_select_populate(self):
        # Test addition of certain filter props after a node is selected.
        retry = {'hosts': [], 'num_attempts': 1}
        filter_properties = {'retry': retry}
        sched = fakes.FakeFilterScheduler()

        host_state = host_manager.HostState('host')
        host_state.total_capacity_gb = 1024
        sched._post_select_populate_filter_properties(filter_properties,
                                                      host_state)

        self.assertEqual('host', filter_properties['retry']['hosts'][0])

        self.assertEqual(1024, host_state.total_capacity_gb)
Example #9
0
    def test_update_from_volume_unknown_capability(self):
        fake_host = host_manager.HostState('host1')
        self.assertIsNone(fake_host.free_capacity_gb)

        volume_capability = {'total_capacity_gb': 'infinite',
                             'free_capacity_gb': 'unknown',
                             'reserved_percentage': 0,
                             'timestamp': None}

        fake_host.update_from_volume_capability(volume_capability)
        # Backend level stats remain uninitialized
        self.assertEqual(fake_host.total_capacity_gb, 0)
        self.assertEqual(fake_host.free_capacity_gb, None)
        # Pool stats has been updated
        self.assertEqual(fake_host.pools['_pool0'].total_capacity_gb,
                         'infinite')
        self.assertEqual(fake_host.pools['_pool0'].free_capacity_gb,
                         'unknown')
Example #10
0
    def test_update_from_volume_capability_with_pools(self):
        fake_host = host_manager.HostState('host1')
        self.assertIsNone(fake_host.free_capacity_gb)
        capability = {
            'volume_backend_name':
            'Local iSCSI',
            'vendor_name':
            'OpenStack',
            'driver_version':
            '1.0.1',
            'storage_protocol':
            'iSCSI',
            'pools': [{
                'pool_name': '1st pool',
                'total_capacity_gb': 500,
                'free_capacity_gb': 230,
                'allocated_capacity_gb': 270,
                'provisioned_capacity_gb': 270,
                'QoS_support': 'False',
                'reserved_percentage': 0,
                'dying_disks': 100,
                'super_hero_1': 'spider-man',
                'super_hero_2': 'flash',
                'super_hero_3': 'neoncat',
            }, {
                'pool_name': '2nd pool',
                'total_capacity_gb': 1024,
                'free_capacity_gb': 1024,
                'allocated_capacity_gb': 0,
                'provisioned_capacity_gb': 0,
                'QoS_support': 'False',
                'reserved_percentage': 0,
                'dying_disks': 200,
                'super_hero_1': 'superman',
                'super_hero_2': 'Hulk',
            }],
            'timestamp':
            None,
        }

        fake_host.update_from_volume_capability(capability)

        self.assertEqual('Local iSCSI', fake_host.volume_backend_name)
        self.assertEqual('iSCSI', fake_host.storage_protocol)
        self.assertEqual('OpenStack', fake_host.vendor_name)
        self.assertEqual('1.0.1', fake_host.driver_version)

        # Backend level stats remain uninitialized
        self.assertEqual(0, fake_host.total_capacity_gb)
        self.assertIsNone(fake_host.free_capacity_gb)
        # Pool stats has been updated
        self.assertEqual(2, len(fake_host.pools))

        self.assertEqual(500, fake_host.pools['1st pool'].total_capacity_gb)
        self.assertEqual(230, fake_host.pools['1st pool'].free_capacity_gb)
        self.assertEqual(270,
                         fake_host.pools['1st pool'].provisioned_capacity_gb)
        self.assertEqual(1024, fake_host.pools['2nd pool'].total_capacity_gb)
        self.assertEqual(1024, fake_host.pools['2nd pool'].free_capacity_gb)
        self.assertEqual(0,
                         fake_host.pools['2nd pool'].provisioned_capacity_gb)

        capability = {
            'volume_backend_name':
            'Local iSCSI',
            'vendor_name':
            'OpenStack',
            'driver_version':
            '1.0.2',
            'storage_protocol':
            'iSCSI',
            'pools': [
                {
                    'pool_name': '3rd pool',
                    'total_capacity_gb': 10000,
                    'free_capacity_gb': 10000,
                    'allocated_capacity_gb': 0,
                    'provisioned_capacity_gb': 0,
                    'QoS_support': 'False',
                    'reserved_percentage': 0,
                },
            ],
            'timestamp':
            None,
        }

        # test update HostState Record
        fake_host.update_from_volume_capability(capability)

        self.assertEqual('1.0.2', fake_host.driver_version)

        # Non-active pool stats has been removed
        self.assertEqual(1, len(fake_host.pools))

        self.assertRaises(KeyError, lambda: fake_host.pools['1st pool'])
        self.assertRaises(KeyError, lambda: fake_host.pools['2nd pool'])

        self.assertEqual(10000, fake_host.pools['3rd pool'].total_capacity_gb)
        self.assertEqual(10000, fake_host.pools['3rd pool'].free_capacity_gb)
        self.assertEqual(0,
                         fake_host.pools['3rd pool'].provisioned_capacity_gb)
Example #11
0
 def setUp(self):
     super(HostManagerTestCase, self).setUp()
     self.host_manager = host_manager.HostManager()
     self.fake_hosts = [
         host_manager.HostState('fake_host%s' % x) for x in range(1, 5)
     ]