Merge "Don't set cluster in cluster deletion task"
This commit is contained in:
commit
e9d6680359
|
@ -64,16 +64,17 @@ class ClusterHandler(SingleHandler):
|
|||
"""
|
||||
cluster = self.get_object_or_404(self.single, obj_id)
|
||||
task_manager = ClusterDeletionManager(cluster_id=cluster.id)
|
||||
task = None
|
||||
try:
|
||||
logger.debug('Trying to execute cluster deletion task')
|
||||
task_manager.execute()
|
||||
task = task_manager.execute()
|
||||
except Exception as e:
|
||||
logger.warn('Error while execution '
|
||||
'cluster deletion task: %s' % str(e))
|
||||
logger.warn(traceback.format_exc())
|
||||
raise self.http(400, str(e))
|
||||
|
||||
raise self.http(202, '{}')
|
||||
raise self.http(202, objects.Task.to_json(task))
|
||||
|
||||
|
||||
class ClusterCollectionHandler(CollectionHandler):
|
||||
|
|
|
@ -86,7 +86,7 @@ class Cluster(Base):
|
|||
release_id = Column(Integer, ForeignKey('releases.id'), nullable=False)
|
||||
nodes = relationship(
|
||||
"Node", backref="cluster", cascade="delete", order_by='Node.id')
|
||||
tasks = relationship("Task", backref="cluster", cascade="delete")
|
||||
tasks = relationship("Task", backref="cluster")
|
||||
plugin_links = relationship(
|
||||
"ClusterPluginLink", backref="cluster", cascade="delete")
|
||||
attributes = relationship("Attributes", uselist=False,
|
||||
|
|
|
@ -309,9 +309,12 @@ class Task(NailgunObject):
|
|||
cls._update_parent_instance(instance.parent)
|
||||
|
||||
@classmethod
|
||||
def delete(cls, instance):
|
||||
logger.debug("Mark task as deleted: %s", instance.uuid)
|
||||
cls.update(instance, {'deleted_at': datetime.utcnow()})
|
||||
def delete(cls, instance, hard=False):
|
||||
if hard:
|
||||
super(Task, cls).delete(instance)
|
||||
else:
|
||||
logger.debug("Mark task as deleted: %s", instance.uuid)
|
||||
cls.update(instance, {'deleted_at': datetime.utcnow()})
|
||||
|
||||
@classmethod
|
||||
def bulk_delete(cls, instance_ids):
|
||||
|
|
|
@ -182,6 +182,11 @@ class NailgunReceiver(object):
|
|||
|
||||
nm = objects.Cluster.get_network_manager(cluster)
|
||||
admin_nets = nm.get_admin_networks()
|
||||
objects.Task.delete(task)
|
||||
for task_ in cluster.tasks:
|
||||
if task_ != task:
|
||||
objects.Task.delete(task_, hard=True)
|
||||
|
||||
objects.Cluster.delete(cluster)
|
||||
if admin_nets != nm.get_admin_networks():
|
||||
# import it here due to cyclic dependencies problem
|
||||
|
|
|
@ -70,15 +70,14 @@ class TestCharsetIssues(BaseIntegrationTest):
|
|||
progress=50,
|
||||
)
|
||||
|
||||
self.app.delete(
|
||||
resp = self.app.delete(
|
||||
reverse(
|
||||
'ClusterHandler',
|
||||
kwargs={'obj_id': cluster_id}),
|
||||
headers=self.default_headers
|
||||
)
|
||||
task_delete = self.db.query(models.Task).filter_by(
|
||||
cluster_id=cluster_id,
|
||||
name="cluster_deletion"
|
||||
uuid=resp.json['uuid']
|
||||
).first()
|
||||
NailgunReceiver.remove_cluster_resp(
|
||||
task_uuid=task_delete.uuid,
|
||||
|
|
|
@ -49,6 +49,13 @@ class TestTaskManagers(BaseIntegrationTest):
|
|||
def check_node_presence(self, nodes_count):
|
||||
return self.db.query(models.Node).count() == nodes_count
|
||||
|
||||
def check_cluster_deletion_task(self, task_):
|
||||
self.assertEqual(task_.name, consts.TASK_NAMES.cluster_deletion)
|
||||
self.assertEqual(task_.status, consts.TASK_STATUSES.ready)
|
||||
self.assertEqual(task_.progress, 100)
|
||||
self.assertEqual(task_.cluster_id, None)
|
||||
self.assertNotEqual(task_.deleted_at, None)
|
||||
|
||||
@fake_tasks(override_state={"progress": 100, "status": "ready"})
|
||||
def test_deployment_task_managers(self):
|
||||
cluster = self.env.create(
|
||||
|
@ -499,9 +506,9 @@ class TestTaskManagers(BaseIntegrationTest):
|
|||
self.assertIsNotNone(notification)
|
||||
|
||||
tasks = self.db.query(models.Task).all()
|
||||
# (mihgen) there is cascade removal of task when cluster is removed
|
||||
# may need a change for store-deployment-tasks-history blueprint
|
||||
self.assertEqual(tasks, [])
|
||||
self.assertEqual(len(tasks), 1)
|
||||
|
||||
self.check_cluster_deletion_task(tasks[0])
|
||||
|
||||
@fake_tasks()
|
||||
def test_deletion_cluster_task_manager(self):
|
||||
|
@ -530,7 +537,9 @@ class TestTaskManagers(BaseIntegrationTest):
|
|||
self.assertIsNone(self.db.query(models.Cluster).get(cluster_id))
|
||||
|
||||
tasks = self.db.query(models.Task).all()
|
||||
self.assertEqual(tasks, [])
|
||||
self.assertEqual(len(tasks), 1)
|
||||
|
||||
self.check_cluster_deletion_task(tasks[0])
|
||||
|
||||
@fake_tasks(tick_interval=10, tick_count=5)
|
||||
def test_deletion_clusters_one_by_one(self):
|
||||
|
@ -587,7 +596,10 @@ class TestTaskManagers(BaseIntegrationTest):
|
|||
self.assertIsNotNone(notification)
|
||||
|
||||
tasks = self.db.query(models.Task).all()
|
||||
self.assertEqual(tasks, [])
|
||||
self.assertEqual(len(tasks), 2)
|
||||
|
||||
for task_ in tasks:
|
||||
self.check_cluster_deletion_task(task_)
|
||||
|
||||
@fake_tasks(recover_nodes=False, fake_rpc=False)
|
||||
def test_deletion_during_deployment(self, mock_rpc):
|
||||
|
@ -610,15 +622,14 @@ class TestTaskManagers(BaseIntegrationTest):
|
|||
progress=50,
|
||||
)
|
||||
|
||||
self.app.delete(
|
||||
resp = self.app.delete(
|
||||
reverse(
|
||||
'ClusterHandler',
|
||||
kwargs={'obj_id': cluster_id}),
|
||||
headers=self.default_headers
|
||||
)
|
||||
task_delete = self.db.query(models.Task).filter_by(
|
||||
cluster_id=cluster_id,
|
||||
name="cluster_deletion"
|
||||
uuid=resp.json_body['uuid'],
|
||||
).first()
|
||||
NailgunReceiver.remove_cluster_resp(
|
||||
task_uuid=task_delete.uuid,
|
||||
|
@ -679,7 +690,9 @@ class TestTaskManagers(BaseIntegrationTest):
|
|||
self.assertIsNotNone(notification)
|
||||
|
||||
tasks = self.db.query(models.Task).all()
|
||||
self.assertEqual(tasks, [])
|
||||
self.assertEqual(len(tasks), 1)
|
||||
|
||||
self.check_cluster_deletion_task(tasks[0])
|
||||
|
||||
@fake_tasks()
|
||||
def test_no_node_no_cry(self):
|
||||
|
|
Loading…
Reference in New Issue