Merge "Calculate convergence required_by from graph in Stack"
This commit is contained in:
commit
418ef9c4a2
|
@ -761,8 +761,8 @@ class Resource(status.ResourceStatus):
|
|||
reqd_by = self.stack.dependencies.required_by(self)
|
||||
except KeyError:
|
||||
if self.stack.convergence:
|
||||
# for convergence, fall back to building from needed_by
|
||||
needed_by_ids = self.needed_by or set()
|
||||
# for convergence, fall back to building from node graph
|
||||
needed_by_ids = self.stack.dependent_resource_ids(self.id)
|
||||
reqd_by = [r for r in self.stack.resources.values()
|
||||
if r.id in needed_by_ids]
|
||||
else:
|
||||
|
|
|
@ -1516,6 +1516,22 @@ class Stack(collections.Mapping):
|
|||
|
||||
return self._convg_deps
|
||||
|
||||
def dependent_resource_ids(self, resource_id):
|
||||
"""Return a set of resource IDs that are dependent on another.
|
||||
|
||||
Given a resource ID, return a set of all other resource IDs that are
|
||||
dependent on that one - that is to say, those that must be cleaned up
|
||||
before the given resource is cleaned up.
|
||||
"""
|
||||
assert self.convergence, 'Invalid call for non-convergence stack'
|
||||
clean_node = ConvergenceNode(resource_id, False)
|
||||
deps = self.convergence_dependencies
|
||||
if clean_node not in deps:
|
||||
return set()
|
||||
# Looking for the cleanup node, so use requires instead of required_by
|
||||
dep_nodes = deps.requires(clean_node)
|
||||
return set(n.rsrc_id for n in dep_nodes if not n.is_update)
|
||||
|
||||
def reset_stack_and_resources_in_progress(self, reason):
|
||||
for name, rsrc in six.iteritems(self.resources):
|
||||
if rsrc.status == rsrc.IN_PROGRESS:
|
||||
|
|
Loading…
Reference in New Issue