From 128c025fc10e315df486729becdb9cd04b0c5f1e Mon Sep 17 00:00:00 2001 From: Ruby Loo Date: Mon, 17 Oct 2016 15:37:50 -0400 Subject: [PATCH] Remove 'agent_last_heartbeat' from node.driver_internal_info node.driver_internal_info['agent_last_heartbeat'] was not being used by ironic, and Ic198f6a952ed135099bcc525ef548a4aea005056 removed the code that sets that value. However, for existing nodes, driver_internal_info['agent_last_heartbeat'] may already exist, so we need to delete it. This patch does that. In addition, a LOG line was moved (and a nit addressed) to make the code a bit easier to read. This is a followup to Ic198f6a952ed135099bcc525ef548a4aea005056. Change-Id: I194d22c0e605b187823ceebae94d3ef895fb91f5 Related-Bug: #1602410 --- ironic/drivers/modules/agent_base_vendor.py | 9 ++++++- .../drivers/modules/test_agent_base_vendor.py | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/ironic/drivers/modules/agent_base_vendor.py b/ironic/drivers/modules/agent_base_vendor.py index 34ee9156c3..9873020a12 100644 --- a/ironic/drivers/modules/agent_base_vendor.py +++ b/ironic/drivers/modules/agent_base_vendor.py @@ -450,10 +450,17 @@ class AgentDeployMixin(object): task.upgrade_lock() node = task.node + LOG.debug('Heartbeat from node %s', node.uuid) + driver_internal_info = node.driver_internal_info - LOG.debug('Heartbeat from node %s' % node.uuid) driver_internal_info['agent_url'] = callback_url + # TODO(rloo): 'agent_last_heartbeat' was deprecated since it wasn't + # being used so remove that entry if it exists. + # Hopefully all nodes will have been updated by Pike, so + # we can delete this code then. + driver_internal_info.pop('agent_last_heartbeat', None) + node.driver_internal_info = driver_internal_info node.save() diff --git a/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py b/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py index 994d77d78f..985aa4b51b 100644 --- a/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py +++ b/ironic/tests/unit/drivers/modules/test_agent_base_vendor.py @@ -551,6 +551,31 @@ class TestHeartbeat(AgentDeployMixinBaseTest): mock_continue.assert_called_once_with(mock.ANY, task) self.assertFalse(mock_handler.called) + @mock.patch.object(agent_base_vendor.AgentDeployMixin, 'continue_deploy', + autospec=True) + @mock.patch.object(agent_base_vendor.AgentDeployMixin, + 'reboot_to_instance', autospec=True) + @mock.patch.object(agent_base_vendor, '_notify_conductor_resume_clean', + autospec=True) + def test_heartbeat_no_agent_last_heartbeat(self, ncrc_mock, rti_mock, + cd_mock): + """node.driver_internal_info doesn't have 'agent_last_heartbeat'.""" + node = self.node + node.maintenance = True + node.provision_state = states.AVAILABLE + driver_internal_info = {'agent_last_heartbeat': 'time'} + node.driver_internal_info = driver_internal_info + node.save() + with task_manager.acquire( + self.context, node['uuid'], shared=False) as task: + self.deploy.heartbeat(task, 'http://127.0.0.1:8080') + + self.assertEqual(0, ncrc_mock.call_count) + self.assertEqual(0, rti_mock.call_count) + self.assertEqual(0, cd_mock.call_count) + node.refresh() + self.assertNotIn('agent_last_heartbeat', node.driver_internal_info) + @mock.patch.object(agent_base_vendor.AgentDeployMixin, 'continue_deploy', autospec=True) @mock.patch.object(agent_base_vendor.AgentDeployMixin,