Merge pull request #2366 from haircommander/dont-start-started-deps

Don't start running dependencies
This commit is contained in:
OpenShift Merge Robot
2019-02-19 16:43:27 +01:00
committed by GitHub

View File

@ -652,16 +652,19 @@ func (c *Container) startDependencies(ctx context.Context) error {
return errors.Wrapf(err, "error generating dependency graph for container %s", c.ID()) return errors.Wrapf(err, "error generating dependency graph for container %s", c.ID())
} }
ctrErrors := make(map[string]error)
// reset ctrsVisisted for next round of recursion
ctrsVisited := make(map[string]bool)
// If there are no containers without dependencies, we can't start // If there are no containers without dependencies, we can't start
// Error out // Error out
if len(graph.noDepNodes) == 0 { if len(graph.noDepNodes) == 0 {
// we have no dependencies that need starting, go ahead and return
if len(graph.nodes) == 0 {
return nil
}
return errors.Wrapf(ErrNoSuchCtr, "All dependencies have dependencies of %s", c.ID()) return errors.Wrapf(ErrNoSuchCtr, "All dependencies have dependencies of %s", c.ID())
} }
ctrErrors := make(map[string]error)
ctrsVisited := make(map[string]bool)
// Traverse the graph beginning at nodes with no dependencies // Traverse the graph beginning at nodes with no dependencies
for _, node := range graph.noDepNodes { for _, node := range graph.noDepNodes {
startNode(ctx, node, false, ctrErrors, ctrsVisited, true) startNode(ctx, node, false, ctrErrors, ctrsVisited, true)
@ -698,10 +701,18 @@ func (c *Container) getAllDependencies(visited map[string]*Container) error {
if err != nil { if err != nil {
return err return err
} }
visited[depID] = dep status, err := dep.State()
if err := dep.getAllDependencies(visited); err != nil { if err != nil {
return err return err
} }
// if the dependency is already running, we can assume its dependencies are also running
// so no need to add them to those we need to start
if status != ContainerStateRunning {
visited[depID] = dep
if err := dep.getAllDependencies(visited); err != nil {
return err
}
}
} }
} }
return nil return nil