Browse Source

Merge "Clean up nodes in DELETING on conductor restart" into stable/ussuri

changes/53/741853/1
Zuul 2 weeks ago
committed by Gerrit Code Review
parent
commit
c3b6ff60da
5 changed files with 9 additions and 4 deletions
  1. +2
    -2
      ironic/common/states.py
  2. +1
    -1
      ironic/conductor/manager.py
  3. +1
    -0
      ironic/tests/unit/conductor/test_base_manager.py
  4. +1
    -1
      ironic/tests/unit/conductor/test_manager.py
  5. +4
    -0
      releasenotes/notes/deleting-dcdb9cf0d2a6a1a6.yaml

+ 2
- 2
ironic/common/states.py View File

@@ -235,7 +235,7 @@ UNSTABLE_STATES = (DEPLOYING, DEPLOYWAIT, CLEANING, CLEANWAIT, VERIFYING,
"""States that can be changed without external request."""

STUCK_STATES_TREATED_AS_FAIL = (DEPLOYING, CLEANING, VERIFYING, INSPECTING,
ADOPTING, RESCUING, UNRESCUING)
ADOPTING, RESCUING, UNRESCUING, DELETING)
"""States that cannot be resumed once a conductor dies.

If a node gets stuck with one of these states for some reason
@@ -384,7 +384,7 @@ machine.add_transition(DEPLOYWAIT, DELETING, 'delete')
machine.add_transition(DEPLOYFAIL, DELETING, 'delete')

# This state can also transition to error
machine.add_transition(DELETING, ERROR, 'error')
machine.add_transition(DELETING, ERROR, 'fail')

# When finished deleting, a node will begin cleaning
machine.add_transition(DELETING, CLEANING, 'clean')


+ 1
- 1
ironic/conductor/manager.py View File

@@ -1011,7 +1011,7 @@ class ConductorManager(base_manager.BaseConductorManager):
LOG.exception('Error in tear_down of node %(node)s: %(err)s',
{'node': node.uuid, 'err': e})
node.last_error = _("Failed to tear down. Error: %s") % e
task.process_event('error')
task.process_event('fail')
else:
# NOTE(tenbrae): When tear_down finishes, the deletion is done,
# cleaning will start next


+ 1
- 0
ironic/tests/unit/conductor/test_base_manager.py View File

@@ -230,6 +230,7 @@ class StartStopTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
(states.ADOPTING, states.ADOPTFAIL),
(states.RESCUING, states.RESCUEFAIL),
(states.UNRESCUING, states.UNRESCUEFAIL),
(states.DELETING, states.ERROR),
]
nodes = [obj_utils.create_test_node(self.context, uuid=uuid.uuid4(),
driver='fake-hardware',


+ 1
- 1
ironic/tests/unit/conductor/test_manager.py View File

@@ -2507,7 +2507,7 @@ class DoNodeCleanTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
def test_continue_node_clean_wrong_state(self, mock_spawn):
# Test the appropriate exception is raised if node isn't already
# in CLEANWAIT state
prv_state = states.DELETING
prv_state = states.ACTIVE
tgt_prv_state = states.AVAILABLE
node = obj_utils.create_test_node(self.context, driver='fake-hardware',
provision_state=prv_state,


+ 4
- 0
releasenotes/notes/deleting-dcdb9cf0d2a6a1a6.yaml View File

@@ -0,0 +1,4 @@
---
fixes:
- |
Cleans up nodes stuck in the ``deleting`` state on conductor restart.

Loading…
Cancel
Save