Do not delete deployment tasks in case of redeploy
From this moment Nailgun aslo do not delete, but mark as deleted such tasks: - reset - network - stop - dump - update_dnsmasq - capacity_log It will delete from DB only after 2 actions: - cluster reset; - cluster deletion; Change-Id: I7f1e4c15fba97c5de031e0728f21841eb75861f8 Closes-Bug: #1564966
This commit is contained in:
parent
7e1d537e8e
commit
e51e237e55
|
@ -94,8 +94,9 @@ class TaskManager(object):
|
|||
if task.status == "running":
|
||||
raise errors.TaskAlreadyRunning()
|
||||
elif task.status in ("ready", "error"):
|
||||
db().delete(task)
|
||||
db().commit()
|
||||
objects.Task.delete(task)
|
||||
|
||||
db().flush()
|
||||
|
||||
def serialize_network_cfg(self, cluster):
|
||||
serializer = {'nova_network': NovaNetworkConfigurationSerializer,
|
||||
|
@ -137,8 +138,12 @@ class ApplyChangesTaskManager(TaskManager, DeploymentCheckMixin):
|
|||
deployment_type = consts.TASK_NAMES.deploy
|
||||
|
||||
def _remove_obsolete_tasks(self):
|
||||
current_tasks = objects.TaskCollection.get_cluster_tasks(
|
||||
cluster_id=self.cluster.id, names=(consts.TASK_NAMES.deploy,))
|
||||
cluster_tasks = objects.TaskCollection.get_cluster_tasks(
|
||||
cluster_id=self.cluster.id)
|
||||
|
||||
current_tasks = objects.TaskCollection.filter_by(
|
||||
cluster_tasks,
|
||||
name=consts.TASK_NAMES.deploy)
|
||||
|
||||
# locking cluster
|
||||
objects.Cluster.get_by_uid(
|
||||
|
@ -150,17 +155,17 @@ class ApplyChangesTaskManager(TaskManager, DeploymentCheckMixin):
|
|||
for task in current_tasks:
|
||||
if task.status in (consts.TASK_STATUSES.ready,
|
||||
consts.TASK_STATUSES.error):
|
||||
db().delete(task)
|
||||
objects.Task.delete(task)
|
||||
db().flush()
|
||||
|
||||
obsolete_tasks = objects.TaskCollection.filter_by_list(
|
||||
current_tasks,
|
||||
cluster_tasks,
|
||||
'name',
|
||||
(consts.TASK_NAMES.stop_deployment,
|
||||
consts.TASK_NAMES.reset_environment)
|
||||
)
|
||||
for task in obsolete_tasks:
|
||||
db().delete(task)
|
||||
objects.Task.delete(task)
|
||||
db().flush()
|
||||
|
||||
def execute(self, nodes_to_provision_deploy=None, deployment_tasks=None,
|
||||
|
|
|
@ -1197,6 +1197,7 @@ class TestUpdateDnsmasqTaskManagers(BaseIntegrationTest):
|
|||
self.db.refresh(update_task)
|
||||
self.assertEqual(update_task.status, consts.TASK_STATUSES.ready)
|
||||
self.assertEqual(update_task.message, update_dnsmasq_msg['msg'])
|
||||
self.assertIsNone(update_task.deleted_at)
|
||||
|
||||
# run it one more time
|
||||
self.change_ip_range()
|
||||
|
@ -1206,8 +1207,10 @@ class TestUpdateDnsmasqTaskManagers(BaseIntegrationTest):
|
|||
name=consts.TASK_NAMES.update_dnsmasq)
|
||||
new_tasks = update_tasks.filter_by(status=consts.TASK_STATUSES.running)
|
||||
self.assertEqual(new_tasks.count(), 1)
|
||||
# old task was deleted
|
||||
self.assertEqual(update_tasks.count(), 1)
|
||||
# old task was marked as deleted
|
||||
self.assertEqual(update_tasks.count(), 2)
|
||||
self.db.refresh(update_task)
|
||||
self.assertIsNotNone(update_task.deleted_at)
|
||||
|
||||
@mock.patch('nailgun.task.task.rpc.cast')
|
||||
def test_update_dnsmasq_started_and_failed(self, mocked_rpc):
|
||||
|
@ -1227,6 +1230,7 @@ class TestUpdateDnsmasqTaskManagers(BaseIntegrationTest):
|
|||
self.db.refresh(update_task)
|
||||
self.assertEqual(update_task.status, consts.TASK_STATUSES.error)
|
||||
self.assertEqual(update_task.message, update_dnsmasq_msg['error'])
|
||||
self.assertIsNone(update_task.deleted_at)
|
||||
|
||||
# run it one more time
|
||||
self.change_ip_range()
|
||||
|
@ -1236,8 +1240,10 @@ class TestUpdateDnsmasqTaskManagers(BaseIntegrationTest):
|
|||
name=consts.TASK_NAMES.update_dnsmasq)
|
||||
new_tasks = update_tasks.filter_by(status=consts.TASK_STATUSES.running)
|
||||
self.assertEqual(new_tasks.count(), 1)
|
||||
# old task was deleted
|
||||
self.assertEqual(update_tasks.count(), 1)
|
||||
# old task was marked as deleted
|
||||
self.assertEqual(update_tasks.count(), 2)
|
||||
self.db.refresh(update_task)
|
||||
self.assertIsNotNone(update_task.deleted_at)
|
||||
|
||||
@mock.patch('nailgun.task.task.rpc.cast')
|
||||
def test_update_admin_failed_while_previous_in_progress(self, mocked_rpc):
|
||||
|
|
Loading…
Reference in New Issue