diff --git a/cinder/scheduler/host_manager.py b/cinder/scheduler/host_manager.py index 9563ea17216..ace38eb043d 100644 --- a/cinder/scheduler/host_manager.py +++ b/cinder/scheduler/host_manager.py @@ -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 diff --git a/cinder/tests/scheduler/test_host_manager.py b/cinder/tests/scheduler/test_host_manager.py index 3f51d4bbd96..aaa4bf54987 100644 --- a/cinder/tests/scheduler/test_host_manager.py +++ b/cinder/tests/scheduler/test_host_manager.py @@ -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."""