Allow HostState to handle empty capabilities

In some cases, where the capabilities reported from driver is
emtpy, scheduler would raise exception thus unable to correctly
handle scheduling request even when other backend candidates are
able to fulfill the request.  This change does some modifications
to HostState so that it is able to handle empty capabilities.

Change-Id: Icb6522852d427dea3fbd1ec4b4cc94a184d3669d
Fixes-bug: #1398875
This commit is contained in:
Zhiteng Huang 2014-12-05 18:01:53 +08:00
parent 18a7f13d38
commit 6ac5054ceb
2 changed files with 17 additions and 3 deletions

View File

@ -300,12 +300,12 @@ class PoolState(HostState):
return
self.update_backend(capability)
self.total_capacity_gb = capability['total_capacity_gb']
self.free_capacity_gb = capability['free_capacity_gb']
self.total_capacity_gb = capability.get('total_capacity_gb', 0)
self.free_capacity_gb = capability.get('free_capacity_gb', 0)
self.allocated_capacity_gb = capability.get(
'allocated_capacity_gb', 0)
self.QoS_support = capability.get('QoS_support', False)
self.reserved_percentage = capability['reserved_percentage']
self.reserved_percentage = capability.get('reserved_percentage', 0)
def update_pools(self, capability):
# Do nothing, since we don't have pools within pool, yet

View File

@ -427,6 +427,20 @@ class HostStateTestCase(test.TestCase):
self.assertEqual(fake_host.pools['_pool0'].free_capacity_gb,
'unknown')
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)
class PoolStateTestCase(test.TestCase):
"""Test case for HostState class."""