diff options
author | Zuul <zuul@review.opendev.org> | 2022-03-09 15:50:41 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-03-09 15:50:41 +0000 |
commit | e3221673eee64b7b2851cb99529a28f671a513a0 (patch) | |
tree | ce06370b0d9f18941fbab4e57a60529c3fa68b61 | |
parent | cdf05bd0d7c339e14ceac8af3dcabf378d490544 (diff) | |
parent | d0f61e949320e1c281746f9f6b8974c085cbe46a (diff) | |
download | ironic-e3221673eee64b7b2851cb99529a28f671a513a0.tar.gz |
Merge "Ignore fake nodes in the power sync loop"
-rw-r--r-- | ironic/conductor/manager.py | 6 | ||||
-rw-r--r-- | ironic/tests/unit/conductor/test_manager.py | 9 |
2 files changed, 13 insertions, 2 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index 9b1c20d9b..2c7dca18f 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -3653,7 +3653,8 @@ def do_sync_power_state(task, count): # Also make sure to cache the current boot_mode and secure_boot states utils.node_cache_boot_mode(task) - if node.power_state and node.power_state == power_state: + if ((node.power_state and node.power_state == power_state) + or (node.power_state is None and power_state is None)): # No action is needed return 0 @@ -3663,7 +3664,8 @@ def do_sync_power_state(task, count): node = task.node # Repeat all checks with exclusive lock to avoid races - if node.power_state and node.power_state == power_state: + if ((node.power_state and node.power_state == power_state) + or (node.power_state is None and power_state is None)): # Node power state was updated to the correct value return 0 elif node.provision_state in SYNC_EXCLUDED_STATES or node.maintenance: diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py index 7016576b7..6102c3f71 100644 --- a/ironic/tests/unit/conductor/test_manager.py +++ b/ironic/tests/unit/conductor/test_manager.py @@ -4992,6 +4992,15 @@ class ManagerDoSyncPowerStateTestCase(db_base.DbTestCase): self.assertFalse(node_power_action.called) self.assertFalse(self.task.upgrade_lock.called) + def test_state_unchanged_for_fake_node(self, node_power_action): + self._do_sync_power_state(None, None) + + self.power.validate.assert_called_once_with(self.task) + self.power.get_power_state.assert_called_once_with(self.task) + self.assertIsNone(self.node.power_state) + self.assertFalse(node_power_action.called) + self.assertFalse(self.task.upgrade_lock.called) + @mock.patch.object(nova, 'power_update', autospec=True) def test_state_not_set(self, mock_power_update, node_power_action): self._do_sync_power_state(None, states.POWER_ON) |