From f73338c995c184fdd3762ee0bb168c5e77df8773 Mon Sep 17 00:00:00 2001 From: Julia Kreger Date: Wed, 17 Jun 2020 06:18:37 -0700 Subject: [PATCH] Minor agent token log handling Agent token heartbeat failures can return InvalidParameterValue which was missed as an expected exception of the heartbeat action. This change adds the exception to the expected list so oslo_messaging doesn't generate a backtrace in the conductor log. Change-Id: Ia3dd7bb19cbdc325acc8445c7308843067b51a2b --- ironic/conductor/manager.py | 1 + ironic/conductor/rpcapi.py | 1 + ironic/tests/unit/conductor/test_manager.py | 32 ++++++++++++--------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index b960336416..7598bec35f 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -3068,6 +3068,7 @@ class ConductorManager(base_manager.BaseConductorManager): return raid_iface.get_logical_disk_properties() @METRICS.timer('ConductorManager.heartbeat') + @messaging.expected_exceptions(exception.InvalidParameterValue) @messaging.expected_exceptions(exception.NoFreeConductorWorker) def heartbeat(self, context, node_id, callback_url, agent_version=None, agent_token=None): diff --git a/ironic/conductor/rpcapi.py b/ironic/conductor/rpcapi.py index 64447b61a2..8752914acc 100644 --- a/ironic/conductor/rpcapi.py +++ b/ironic/conductor/rpcapi.py @@ -907,6 +907,7 @@ class ConductorAPI(object): :param topic: RPC topic. Defaults to self.topic. :param agent_token: randomly generated validation token. :param agent_version: the version of the agent that is heartbeating + :raises: InvalidParameterValue if an invalid agent token is received. """ new_kws = {} version = '1.34' diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py index fe51497f7a..f2bbec6dc5 100644 --- a/ironic/tests/unit/conductor/test_manager.py +++ b/ironic/tests/unit/conductor/test_manager.py @@ -7031,9 +7031,10 @@ class DoNodeAdoptionTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase): mock_spawn.side_effect = self._fake_spawn - self.assertRaises( - exception.InvalidParameterValue, self.service.heartbeat, + exc = self.assertRaises( + messaging.rpc.ExpectedException, self.service.heartbeat, self.context, node.uuid, 'http://callback', agent_token=None) + self.assertEqual(exception.InvalidParameterValue, exc.exc_info[0]) self.assertFalse(mock_heartbeat.called) @mock.patch('ironic.drivers.modules.fake.FakeDeploy.heartbeat', @@ -7106,10 +7107,11 @@ class DoNodeAdoptionTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase): mock_spawn.side_effect = self._fake_spawn - self.assertRaises(exception.InvalidParameterValue, - self.service.heartbeat, self.context, - node.uuid, 'http://callback', - agent_token='evil', agent_version='5.0.0b23') + exc = self.assertRaises(messaging.rpc.ExpectedException, + self.service.heartbeat, self.context, + node.uuid, 'http://callback', + agent_token='evil', agent_version='5.0.0b23') + self.assertEqual(exception.InvalidParameterValue, exc.exc_info[0]) self.assertFalse(mock_heartbeat.called) @mock.patch('ironic.drivers.modules.fake.FakeDeploy.heartbeat', @@ -7133,10 +7135,11 @@ class DoNodeAdoptionTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase): mock_spawn.side_effect = self._fake_spawn # Intentionally sending an older client in case something fishy # occurs. - self.assertRaises(exception.InvalidParameterValue, - self.service.heartbeat, self.context, - node.uuid, 'http://callback', - agent_token='evil', agent_version='4.0.0') + exc = self.assertRaises(messaging.rpc.ExpectedException, + self.service.heartbeat, self.context, + node.uuid, 'http://callback', + agent_token='evil', agent_version='4.0.0') + self.assertEqual(exception.InvalidParameterValue, exc.exc_info[0]) self.assertFalse(mock_heartbeat.called) @mock.patch('ironic.drivers.modules.fake.FakeDeploy.heartbeat', @@ -7158,10 +7161,11 @@ class DoNodeAdoptionTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase): mock_spawn.side_effect = self._fake_spawn - self.assertRaises(exception.InvalidParameterValue, - self.service.heartbeat, self.context, - node.uuid, 'http://callback', - agent_token=None, agent_version='6.1.5') + exc = self.assertRaises(messaging.rpc.ExpectedException, + self.service.heartbeat, self.context, + node.uuid, 'http://callback', + agent_token=None, agent_version='6.1.5') + self.assertEqual(exception.InvalidParameterValue, exc.exc_info[0]) self.assertFalse(mock_heartbeat.called)