Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adopt graph.InDependencyOrder #11256

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions cmd/compose/config.go
Expand Up @@ -159,10 +159,10 @@ func runServices(ctx context.Context, dockerCli command.Cli, opts configOptions)
if err != nil {
return err
}
return project.WithServices(project.ServiceNames(), func(s types.ServiceConfig) error {
fmt.Fprintln(dockerCli.Out(), s.Name)
return nil
})
for _, name := range project.ServiceNames() {
fmt.Fprintln(dockerCli.Out(), name)
}
return nil
}

func runVolumes(ctx context.Context, dockerCli command.Cli, opts configOptions) error {
Expand Down
4 changes: 2 additions & 2 deletions cmd/compose/up.go
Expand Up @@ -229,9 +229,9 @@ func runUp(
if upOptions.attachDependencies {
dependencyOpt = types.IncludeDependencies
}
if err := project.WithServices(services, func(s types.ServiceConfig) error {
if err := project.WithServices(services, func(name string, s types.ServiceConfig) error {
if s.Attach == nil || *s.Attach {
attachSet.Add(s.Name)
attachSet.Add(name)
}
return nil
}, dependencyOpt); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Expand Up @@ -6,7 +6,7 @@ require (
github.com/AlecAivazis/survey/v2 v2.3.7
github.com/Microsoft/go-winio v0.6.1
github.com/buger/goterm v1.0.4
github.com/compose-spec/compose-go/v2 v2.0.0-beta.1
github.com/compose-spec/compose-go/v2 v2.0.0-beta.2.0.20231222101101-8585af8ec50b
github.com/containerd/console v1.0.3
github.com/containerd/containerd v1.7.7
github.com/davecgh/go-spew v1.1.1
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Expand Up @@ -132,8 +132,8 @@ github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+g
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
github.com/compose-spec/compose-go/v2 v2.0.0-beta.1 h1:/A+2QMQVSsAmr9Gn5fm6YwaufjRZmWBnHYjr0oCyGiw=
github.com/compose-spec/compose-go/v2 v2.0.0-beta.1/go.mod h1:PWCgeD8cxiI/DmdpBM407CuLDrZ2W4xuS6/Z9jAi0YQ=
github.com/compose-spec/compose-go/v2 v2.0.0-beta.2.0.20231222101101-8585af8ec50b h1:GmyyxDAFejvnLyGjZ3jdx+aJGak0QsjhoVaIrihcCRw=
github.com/compose-spec/compose-go/v2 v2.0.0-beta.2.0.20231222101101-8585af8ec50b/go.mod h1:PWCgeD8cxiI/DmdpBM407CuLDrZ2W4xuS6/Z9jAi0YQ=
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
Expand Down
13 changes: 5 additions & 8 deletions pkg/compose/build.go
Expand Up @@ -23,6 +23,7 @@ import (
"os"
"path/filepath"

"github.com/compose-spec/compose-go/v2/graph"
"github.com/moby/buildkit/util/progress/progressui"

"github.com/compose-spec/compose-go/v2/types"
Expand Down Expand Up @@ -79,7 +80,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti

imageIDs := map[string]string{}
serviceToBeBuild := map[string]serviceToBuild{}
err = project.WithServices(options.Services, func(service types.ServiceConfig) error {
err = project.WithServices(options.Services, func(name string, service types.ServiceConfig) error {
if service.Build == nil {
return nil
}
Expand All @@ -88,7 +89,6 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti
if localImagePresent && service.PullPolicy != types.PullPolicyBuild {
return nil
}
name := service.Name
serviceToBeBuild[name] = serviceToBuild{name: name, service: service}
return nil
}, types.IgnoreDependencies)
Expand Down Expand Up @@ -145,15 +145,14 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti
}
return -1
}
err = InDependencyOrder(ctx, project, func(ctx context.Context, name string) error {
err = graph.InDependencyOrder(ctx, project, func(ctx context.Context, name string, service types.ServiceConfig) error {
if len(options.Services) > 0 && !utils.Contains(options.Services, name) {
return nil
}
serviceToBuild, ok := serviceToBeBuild[name]
_, ok := serviceToBeBuild[name]
if !ok {
return nil
}
service := serviceToBuild.service

if !buildkitEnabled {
id, err := s.doBuildClassic(ctx, project, service, options)
Expand Down Expand Up @@ -184,9 +183,7 @@ func (s *composeService) build(ctx context.Context, project *types.Project, opti
builtDigests[getServiceIndex(name)] = digest

return nil
}, func(traversal *graphTraversal) {
traversal.maxConcurrency = s.maxConcurrency
})
}, graph.WithMaxConcurrency(s.maxConcurrency))

// enforce all build event get consumed
if buildkitEnabled {
Expand Down
10 changes: 3 additions & 7 deletions pkg/compose/convergence.go
Expand Up @@ -26,6 +26,7 @@ import (
"sync"
"time"

"github.com/compose-spec/compose-go/v2/graph"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"

Expand Down Expand Up @@ -91,20 +92,15 @@ func newConvergence(services []string, state Containers, s *composeService) *con
}

func (c *convergence) apply(ctx context.Context, project *types.Project, options api.CreateOptions) error {
return InDependencyOrder(ctx, project, func(ctx context.Context, name string) error {
service, err := project.GetService(name)
if err != nil {
return err
}

return graph.InDependencyOrder(ctx, project, func(ctx context.Context, name string, service types.ServiceConfig) error {
return tracing.SpanWrapFunc("service/apply", tracing.ServiceOptions(service), func(ctx context.Context) error {
strategy := options.RecreateDependencies
if utils.StringContains(options.Services, name) {
strategy = options.Recreate
}
return c.ensureService(ctx, project, service, strategy, options.Inherit, options.Timeout)
})(ctx)
})
}, graph.WithMaxConcurrency(c.service.maxConcurrency))
}

var mu sync.Mutex
Expand Down