MCPcopy
hub / github.com/docker/compose / visitInDependencyOrder

Method visitInDependencyOrder

pkg/compose/reconcile.go:381–419  ·  view source on GitHub ↗

visitInDependencyOrder processes services from leaves to roots so that dependencies are reconciled before the services that depend on them.

(g *Graph)

Source from the content-addressed store, hash-verified

379// visitInDependencyOrder processes services from leaves to roots so that
380// dependencies are reconciled before the services that depend on them.
381func (r *reconciler) visitInDependencyOrder(g *Graph) error {
382 visited := map[string]bool{}
383 // Sort vertex keys for deterministic plan output in tests
384 keys := sortedKeys(g.Vertices)
385 for {
386 // Find a vertex whose all children are visited
387 var next *Vertex
388 for _, k := range keys {
389 v := g.Vertices[k]
390 if visited[v.Key] {
391 continue
392 }
393 allChildrenVisited := true
394 for _, child := range v.Children {
395 if !visited[child.Key] {
396 allChildrenVisited = false
397 break
398 }
399 }
400 if allChildrenVisited {
401 next = v
402 break
403 }
404 }
405 if next == nil {
406 break // all visited
407 }
408 visited[next.Key] = true
409
410 service, err := r.project.GetService(next.Service)
411 if err != nil {
412 return err
413 }
414 if err := r.reconcileService(service); err != nil {
415 return err
416 }
417 }
418 return nil
419}
420
421// reconcileService handles a single service: scale down, recreate diverged,
422// start stopped, scale up.

Callers 1

reconcileContainersMethod · 0.95

Calls 2

reconcileServiceMethod · 0.95
sortedKeysFunction · 0.85

Tested by

no test coverage detected