Merge "Clear out before connecting."
This commit is contained in:
@@ -97,29 +97,36 @@ class Flow(linear_flow.Flow):
|
|||||||
if self._runners:
|
if self._runners:
|
||||||
return self._runners
|
return self._runners
|
||||||
|
|
||||||
|
# Clear out all edges (since we want to do a fresh connection)
|
||||||
|
for (u, v) in self._graph.edges():
|
||||||
|
self._graph.remove_edge(u, v)
|
||||||
|
|
||||||
# Link providers to requirers.
|
# Link providers to requirers.
|
||||||
#
|
#
|
||||||
# TODO(harlowja): allow for developers to manually establish these
|
# TODO(harlowja): allow for developers to manually establish these
|
||||||
# connections instead of automatically doing it for them??
|
# connections instead of automatically doing it for them??
|
||||||
for n in self._graph.nodes_iter():
|
for n in self._graph.nodes_iter():
|
||||||
|
n_providers = {}
|
||||||
n_requires = set(utils.get_attr(n.task, 'requires', []))
|
n_requires = set(utils.get_attr(n.task, 'requires', []))
|
||||||
|
if n_requires:
|
||||||
LOG.debug("Finding providers of %s for %s", n_requires, n)
|
LOG.debug("Finding providers of %s for %s", n_requires, n)
|
||||||
for p in self._graph.nodes_iter():
|
for p in self._graph.nodes_iter():
|
||||||
if not n_requires:
|
|
||||||
break
|
|
||||||
if n is p:
|
if n is p:
|
||||||
continue
|
continue
|
||||||
p_provides = set(utils.get_attr(p.task, 'provides', []))
|
p_provides = set(utils.get_attr(p.task, 'provides', []))
|
||||||
p_satisfies = n_requires & p_provides
|
p_satisfies = n_requires & p_provides
|
||||||
if p_satisfies:
|
if p_satisfies:
|
||||||
# P produces for N so thats why we link P->N and not N->P
|
# P produces for N so thats why we link P->N
|
||||||
|
# and not N->P
|
||||||
self._add_dependency(p, n)
|
self._add_dependency(p, n)
|
||||||
for k in p_satisfies:
|
for k in p_satisfies:
|
||||||
n.providers[k] = p
|
n_providers[k] = p
|
||||||
LOG.debug("Found provider of %s from %s", p_satisfies, p)
|
LOG.debug("Found provider of %s from %s",
|
||||||
|
p_satisfies, p)
|
||||||
n_requires = n_requires - p_satisfies
|
n_requires = n_requires - p_satisfies
|
||||||
if n_requires:
|
if n_requires:
|
||||||
raise exc.MissingDependencies(n, sorted(n_requires))
|
raise exc.MissingDependencies(n, sorted(n_requires))
|
||||||
|
n.providers = n_providers
|
||||||
|
|
||||||
# Now figure out the order so that we can give the runners there
|
# Now figure out the order so that we can give the runners there
|
||||||
# optional item providers as well as figure out the topological run
|
# optional item providers as well as figure out the topological run
|
||||||
|
Reference in New Issue
Block a user