Deletion of in-progress stack

Unlike in legacy engine case, the stack in in-progress state couldn't be
deleted in convergence. This patch fixes this issue so that the
behaviour is compatible.

Change-Id: I79bb14d5d7744ba2a012e23e690608dc7db1fbc5
Closes-Bug: #1545063
Closes-Bug: #1592374
This commit is contained in:
Anant Patil 2016-09-06 13:28:53 +05:30 committed by Thomas Herve
parent 0f48b1d66c
commit 6dc3ab9b01
4 changed files with 17 additions and 6 deletions

View File

@ -1357,10 +1357,14 @@ class EngineService(service.Service):
self.resource_enforcer.enforce_stack(stack)
if stack.convergence and cfg.CONF.convergence_engine:
template = templatem.Template.create_empty_template(
from_template=stack.t)
stack.thread_group_mgr = self.thread_group_mgr
stack.converge_stack(template=template, action=stack.DELETE)
def convergence_delete():
stack.thread_group_mgr = self.thread_group_mgr
self.worker_service.stop_all_workers(stack)
template = templatem.Template.create_empty_template(
from_template=stack.t)
stack.converge_stack(template=template, action=stack.DELETE)
self.thread_group_mgr.start(stack.id, convergence_delete)
return
lock = stack_lock.StackLock(cnxt, stack.id, self.engine_id)

View File

@ -41,8 +41,9 @@ class Engine(message_processor.MessageProcessor):
queue = message_queue.MessageQueue('engine')
def __init__(self):
def __init__(self, worker):
super(Engine, self).__init__('engine')
self.worker = worker
def scenario_template_to_hot(self, scenario_tmpl):
"""Converts the scenario template into hot template."""
@ -75,6 +76,7 @@ class Engine(message_processor.MessageProcessor):
cnxt = utils.dummy_context()
srv = service.EngineService("host", "engine")
srv.thread_group_mgr = SynchronousThreadGroupManager()
srv.worker_service = self.worker
hot_tmpl = self.scenario_template_to_hot(scenario_tmpl)
srv.create_stack(cnxt, stack_name, hot_tmpl,
params={}, files={}, environment_files=None, args={})
@ -85,6 +87,7 @@ class Engine(message_processor.MessageProcessor):
db_stack = db_api.stack_get_by_name(cnxt, stack_name)
srv = service.EngineService("host", "engine")
srv.thread_group_mgr = SynchronousThreadGroupManager()
srv.worker_service = self.worker
hot_tmpl = self.scenario_template_to_hot(scenario_tmpl)
stack_identity = {'stack_name': stack_name,
'stack_id': db_stack.id,
@ -103,6 +106,7 @@ class Engine(message_processor.MessageProcessor):
'path': ''}
srv = service.EngineService("host", "engine")
srv.thread_group_mgr = SynchronousThreadGroupManager()
srv.worker_service = self.worker
srv.delete_stack(cnxt, stack_identity)
@message_processor.asynchronous

View File

@ -28,8 +28,8 @@ class Processes(object):
global worker
global event_loop
engine = engine_wrapper.Engine()
worker = worker_wrapper.Worker()
engine = engine_wrapper.Engine(worker)
event_loop = event_loop_module.EventLoop(engine, worker)

View File

@ -35,3 +35,6 @@ class Worker(message_processor.MessageProcessor):
current_traversal,
data, is_update,
adopt_stack_data)
def stop_all_workers(self, current_stack):
pass