Merge "Minor changes to state model"

This commit is contained in:
Jenkins
2015-01-09 21:58:53 +00:00
committed by Gerrit Code Review
4 changed files with 26 additions and 17 deletions

View File

@@ -175,6 +175,7 @@ class FSM(object):
raise excp.InvalidState(_("Can not start from a terminal"
" state '%s'") % (state))
self._current = _Jump(state, None, None)
self._target_state = self._states[state]['target']
def copy(self, shallow=False):
"""Copies the current state machine (shallow or deep).

View File

@@ -136,15 +136,17 @@ machine.add_state(ACTIVE, **watchers)
machine.add_state(ERROR, **watchers)
# Add deploy* states
machine.add_state(DEPLOYDONE, target=ACTIVE, **watchers)
machine.add_state(DEPLOYING, target=DEPLOYDONE, **watchers)
machine.add_state(DEPLOYWAIT, **watchers)
machine.add_state(DEPLOYFAIL, **watchers)
# NOTE(deva): Juno shows a target_provision_state of DEPLOYDONE
# this is changed in Kilo to ACTIVE
machine.add_state(DEPLOYING, target=ACTIVE, **watchers)
machine.add_state(DEPLOYWAIT, target=ACTIVE, **watchers)
machine.add_state(DEPLOYFAIL, target=ACTIVE, **watchers)
# Add delete* states
machine.add_state(DELETED, target=NOSTATE, **watchers)
machine.add_state(DELETING, target=DELETED, **watchers)
# NOTE(deva): Juno shows a target_provision_state of DELETED
# this is changed in Kilo to AVAILABLE
# TODO(deva): change NOSTATE to AVAILABLE here
machine.add_state(DELETING, target=NOSTATE, **watchers)
# From NOSTATE, a deployment may be started
machine.add_transition(NOSTATE, DEPLOYING, 'deploy')

View File

@@ -1132,8 +1132,9 @@ class TestPut(api_base.FunctionalTest):
def test_provision_already_in_progress(self):
node = obj_utils.create_test_node(self.context,
uuid=utils.generate_uuid(),
target_provision_state=states.ACTIVE)
uuid=utils.generate_uuid(),
provision_state=states.DEPLOYING,
target_provision_state=states.ACTIVE)
ret = self.put_json('/nodes/%s/states/provision' % node.uuid,
{'target': states.ACTIVE},
expect_errors=True)
@@ -1143,7 +1144,7 @@ class TestPut(api_base.FunctionalTest):
node = obj_utils.create_test_node(
self.context, uuid=utils.generate_uuid(),
provision_state=states.DEPLOYWAIT,
target_provision_state=states.DEPLOYDONE)
target_provision_state=states.ACTIVE)
ret = self.put_json('/nodes/%s/states/provision' % node.uuid,
{'target': states.DELETED})
self.assertEqual(202, ret.status_code)

View File

@@ -926,7 +926,8 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
# test when driver.deploy.deploy raises an exception
mock_deploy.side_effect = exception.InstanceDeployFailure('test')
node = obj_utils.create_test_node(self.context, driver='fake',
provision_state=states.DEPLOYING)
provision_state=states.DEPLOYING,
target_provision_state=states.ACTIVE)
task = task_manager.TaskManager(self.context, node.uuid)
self.assertRaises(exception.InstanceDeployFailure,
@@ -934,7 +935,10 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
self.service.conductor.id)
node.refresh()
self.assertEqual(states.DEPLOYFAIL, node.provision_state)
self.assertEqual(states.NOSTATE, node.target_provision_state)
# NOTE(deva): failing a deploy does not clear the target state
# any longer. Instead, it is cleared when the instance
# is deleted.
self.assertEqual(states.ACTIVE, node.target_provision_state)
self.assertIsNotNone(node.last_error)
mock_deploy.assert_called_once_with(mock.ANY)
@@ -944,7 +948,8 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
# test when driver.deploy.deploy returns DEPLOYDONE
mock_deploy.return_value = states.DEPLOYDONE
node = obj_utils.create_test_node(self.context, driver='fake',
provision_state=states.DEPLOYING)
provision_state=states.DEPLOYING,
target_provision_state=states.ACTIVE)
task = task_manager.TaskManager(self.context, node.uuid)
manager.do_node_deploy(task,
@@ -968,7 +973,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
self.service._worker_pool.waitall()
node.refresh()
self.assertEqual(states.DEPLOYING, node.provision_state)
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
self.assertEqual(states.ACTIVE, node.target_provision_state)
# This is a sync operation last_error should be None.
self.assertIsNone(node.last_error)
# Verify reservation has been cleared.
@@ -986,7 +991,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
self.service._worker_pool.waitall()
node.refresh()
self.assertEqual(states.DEPLOYING, node.provision_state)
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
self.assertEqual(states.ACTIVE, node.target_provision_state)
# last_error should be None.
self.assertIsNone(node.last_error)
# Verify reservation has been cleared.
@@ -1004,7 +1009,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
self.service._worker_pool.waitall()
node.refresh()
self.assertEqual(states.DEPLOYING, node.provision_state)
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
self.assertEqual(states.ACTIVE, node.target_provision_state)
# last_error should be None.
self.assertIsNone(node.last_error)
# Verify reservation has been cleared.
@@ -1022,7 +1027,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
self.service._worker_pool.waitall()
node.refresh()
self.assertEqual(states.DEPLOYING, node.provision_state)
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
self.assertEqual(states.ACTIVE, node.target_provision_state)
# last_error should be None.
self.assertIsNone(node.last_error)
# Verify reservation has been cleared.