Don't log warning for missing resource_versions
Since mitaka, agents can send a new report about the resource versions they know about, and subscribe via rpc callback push mechanisms. Some agents don't depend on versioned objects via push, and therefore don't need to update neutron-server about such details, anyway server side was complaining when that dictionary was missing on the state report. This patch avoids the warning log for missing 'resource_versions' field in the agent status report. Change-Id: Ief5186871515a5700afb56ac5e3fe493b4a05e8e Closes-Bug: 1571544
This commit is contained in:
parent
4d7409bb8e
commit
b64b0c762b
@ -220,15 +220,18 @@ class AgentDbMixin(ext_agent.AgentPluginBase, AgentAvailabilityZoneMixin):
|
||||
def get_configuration_dict(self, agent_db):
|
||||
return self._get_dict(agent_db, 'configurations')
|
||||
|
||||
def _get_dict(self, agent_db, dict_name):
|
||||
def _get_dict(self, agent_db, dict_name, ignore_missing=False):
|
||||
json_value = None
|
||||
try:
|
||||
conf = jsonutils.loads(getattr(agent_db, dict_name))
|
||||
json_value = getattr(agent_db, dict_name)
|
||||
conf = jsonutils.loads(json_value)
|
||||
except Exception:
|
||||
msg = _LW('Dictionary %(dict_name)s for agent %(agent_type)s on '
|
||||
'host %(host)s is invalid.')
|
||||
LOG.warning(msg, {'dict_name': dict_name,
|
||||
'agent_type': agent_db.agent_type,
|
||||
'host': agent_db.host})
|
||||
if json_value or not ignore_missing:
|
||||
msg = _LW('Dictionary %(dict_name)s for agent %(agent_type)s '
|
||||
'on host %(host)s is invalid.')
|
||||
LOG.warning(msg, {'dict_name': dict_name,
|
||||
'agent_type': agent_db.agent_type,
|
||||
'host': agent_db.host})
|
||||
conf = {}
|
||||
return conf
|
||||
|
||||
@ -249,7 +252,8 @@ class AgentDbMixin(ext_agent.AgentPluginBase, AgentAvailabilityZoneMixin):
|
||||
if k not in ['alive', 'configurations'])
|
||||
res['alive'] = not self.is_agent_down(res['heartbeat_timestamp'])
|
||||
res['configurations'] = self._get_dict(agent, 'configurations')
|
||||
res['resource_versions'] = self._get_dict(agent, 'resource_versions')
|
||||
res['resource_versions'] = self._get_dict(agent, 'resource_versions',
|
||||
ignore_missing=True)
|
||||
res['availability_zone'] = agent['availability_zone']
|
||||
return self._fields(res, fields)
|
||||
|
||||
@ -371,7 +375,7 @@ class AgentDbMixin(ext_agent.AgentPluginBase, AgentAvailabilityZoneMixin):
|
||||
# _update_local_agent_resource_versions() will call
|
||||
# version_manager and bring it up to date
|
||||
agent_state['resource_versions'] = self._get_dict(
|
||||
agent_db, 'resource_versions')
|
||||
agent_db, 'resource_versions', ignore_missing=True)
|
||||
res['heartbeat_timestamp'] = current_time
|
||||
if agent_state.get('start_flag'):
|
||||
res['started_at'] = current_time
|
||||
|
@ -196,12 +196,33 @@ class TestAgentsDbMixin(TestAgentsDbBase):
|
||||
" DHCP Agent 2015-05-06 22:40:40.432295 some.node"}
|
||||
)
|
||||
|
||||
def test_get_dict(self):
|
||||
def test__get_dict(self):
|
||||
db_obj = mock.Mock(conf1='{"test": "1234"}')
|
||||
conf1 = self.plugin._get_dict(db_obj, 'conf1')
|
||||
self.assertIn('test', conf1)
|
||||
self.assertEqual("1234", conf1['test'])
|
||||
|
||||
def test__get_dict_missing(self):
|
||||
with mock.patch.object(agents_db.LOG, 'warning') as warn:
|
||||
db_obj = mock.Mock(spec=['agent_type', 'host'])
|
||||
self.plugin._get_dict(db_obj, 'missing_conf')
|
||||
self.assertTrue(warn.called)
|
||||
|
||||
def test__get_dict_ignore_missing(self):
|
||||
with mock.patch.object(agents_db.LOG, 'warning') as warn:
|
||||
db_obj = mock.Mock(spec=['agent_type', 'host'])
|
||||
missing_conf = self.plugin._get_dict(db_obj, 'missing_conf',
|
||||
ignore_missing=True)
|
||||
self.assertEqual({}, missing_conf)
|
||||
warn.assert_not_called()
|
||||
|
||||
def test__get_dict_broken(self):
|
||||
with mock.patch.object(agents_db.LOG, 'warning') as warn:
|
||||
db_obj = mock.Mock(conf1='{"test": BROKEN')
|
||||
conf1 = self.plugin._get_dict(db_obj, 'conf1', ignore_missing=True)
|
||||
self.assertEqual({}, conf1)
|
||||
self.assertTrue(warn.called)
|
||||
|
||||
def get_configurations_dict(self):
|
||||
db_obj = mock.Mock(configurations='{"cfg1": "val1"}')
|
||||
cfg = self.plugin.get_configuration_dict(db_obj)
|
||||
|
Loading…
Reference in New Issue
Block a user