mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
Merge pull request #2366 from haircommander/dont-start-started-deps
Don't start running dependencies
This commit is contained in:
@ -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
|
||||||
|
Reference in New Issue
Block a user