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:
Vladimir Sharshov (warpc) 2016-04-01 23:15:11 +03:00
parent 7e1d537e8e
commit e51e237e55
2 changed files with 22 additions and 11 deletions

View File

@ -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,

View File

@ -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):