Merge "Guard against failed cache refresh during inventory"

This commit is contained in:
Jenkins 2016-09-15 19:08:40 +00:00 committed by Gerrit Code Review
commit b63f65f3f3
2 changed files with 12 additions and 3 deletions

View File

@ -320,6 +320,14 @@ class SchedulerReportClient(object):
@safe_connect
def _update_inventory(self, compute_node):
for attempt in (1, 2, 3):
if compute_node.uuid not in self._resource_providers:
# NOTE(danms): Either we failed to fetch/create the RP
# on our first attempt, or a previous attempt had to
# invalidate the cache, and we were unable to refresh
# it. Bail and try again next time.
LOG.warning(_LW(
'Unable to refresh my resource provider record'))
return False
if self._update_inventory_attempt(compute_node):
return True
time.sleep(1)
@ -333,8 +341,7 @@ class SchedulerReportClient(object):
compute_node.save()
self._ensure_resource_provider(compute_node.uuid,
compute_node.hypervisor_hostname)
if compute_node.uuid in self._resource_providers:
self._update_inventory(compute_node)
self._update_inventory(compute_node)
def _allocations(self, instance):
# NOTE(danms): Boot-from-volume instances consume no local disk

View File

@ -573,6 +573,7 @@ class SchedulerReportClientTestCase(test.NoDBTestCase):
cn = mock.MagicMock()
mock_update.side_effect = (False, True)
self.client._resource_providers[cn.uuid] = True
result = self.client._update_inventory(cn)
self.assertTrue(result)
@ -591,6 +592,7 @@ class SchedulerReportClientTestCase(test.NoDBTestCase):
cn = mock.MagicMock()
mock_update.side_effect = (False, False, False)
self.client._resource_providers[cn.uuid] = True
result = self.client._update_inventory(cn)
self.assertFalse(result)
@ -607,7 +609,7 @@ class SchedulerReportClientTestCase(test.NoDBTestCase):
@mock.patch('nova.scheduler.client.report.SchedulerReportClient.'
'_ensure_resource_provider')
@mock.patch('nova.scheduler.client.report.SchedulerReportClient.'
'_update_inventory')
'_update_inventory_attempt')
def test_update_resource_stats_rp_fail(self, mock_ui, mock_erp):
cn = mock.MagicMock()
self.client.update_resource_stats(cn)