Skip to content

Commit 342a2a9

Browse files
committed
Fix support for depends_on.restart in up and restart commands
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent 7814e57 commit 342a2a9

File tree

6 files changed

+32
-9
lines changed

6 files changed

+32
-9
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/Microsoft/go-winio v0.6.2
99
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
1010
github.com/buger/goterm v1.0.4
11-
github.com/compose-spec/compose-go/v2 v2.4.9
11+
github.com/compose-spec/compose-go/v2 v2.4.10-0.20250319114556-312596f4c1fe
1212
github.com/containerd/containerd/v2 v2.0.4
1313
github.com/containerd/platforms v1.0.0-rc.1
1414
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e
8383
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
8484
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
8585
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
86-
github.com/compose-spec/compose-go/v2 v2.4.9 h1:2K4TDw+1ba2idiR6empXHKRXvWYpnvAKoNQy93/sSOs=
87-
github.com/compose-spec/compose-go/v2 v2.4.9/go.mod h1:6k5l/0TxCg0/2uLEhRVEsoBWBprS2uvZi32J7xub3lo=
86+
github.com/compose-spec/compose-go/v2 v2.4.10-0.20250319114556-312596f4c1fe h1:gl5+6pDRe/b8tbqJOXvNOZWNQe4aFLymlMV0iqFp9GI=
87+
github.com/compose-spec/compose-go/v2 v2.4.10-0.20250319114556-312596f4c1fe/go.mod h1:6k5l/0TxCg0/2uLEhRVEsoBWBprS2uvZi32J7xub3lo=
8888
github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo=
8989
github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins=
9090
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=

pkg/compose/convergence.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ func (c *convergence) ensureService(ctx context.Context, project *types.Project,
225225

226226
func (c *convergence) stopDependentContainers(ctx context.Context, project *types.Project, service types.ServiceConfig) error {
227227
// Stop dependent containers, so they will be restarted after service is re-created
228-
dependents := project.GetDependentsForService(service)
228+
dependents := project.GetDependentsForService(service, func(dependency types.ServiceDependency) bool {
229+
return dependency.Restart
230+
})
229231
if len(dependents) == 0 {
230232
return nil
231233
}

pkg/compose/restart.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,19 @@ func (s *composeService) restart(ctx context.Context, projectName string, option
7777

7878
w := progress.ContextWriter(ctx)
7979
return InDependencyOrder(ctx, project, func(c context.Context, service string) error {
80+
config := project.Services[service]
81+
err = s.waitDependencies(ctx, project, service, config.DependsOn, containers, 0)
82+
if err != nil {
83+
return err
84+
}
85+
8086
eg, ctx := errgroup.WithContext(ctx)
8187
for _, ctr := range containers.filter(isService(service)) {
8288
eg.Go(func() error {
8389
eventName := getContainerProgressName(ctr)
8490
w.Event(progress.RestartingEvent(eventName))
8591
timeout := utils.DurationSecondToInt(options.Timeout)
86-
err := s.apiClient().ContainerRestart(ctx, ctr.ID, container.StopOptions{Timeout: timeout})
92+
err = s.apiClient().ContainerRestart(ctx, ctr.ID, container.StopOptions{Timeout: timeout})
8793
if err != nil {
8894
return err
8995
}

pkg/e2e/fixtures/restart-test/compose-depends-on.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
services:
22
with-restart:
3-
image: alpine
3+
image: nginx:alpine
44
init: true
55
command: tail -f /dev/null
66
depends_on:
77
nginx: {condition: service_healthy, restart: true}
88

99
no-restart:
10-
image: alpine
10+
image: nginx:alpine
1111
init: true
1212
command: tail -f /dev/null
1313
depends_on:
1414
nginx: { condition: service_healthy }
1515

1616
nginx:
1717
image: nginx:alpine
18+
labels:
19+
TEST: ${LABEL:-test}
1820
healthcheck:
1921
test: "echo | nc -w 5 localhost:80"
2022
interval: 2s

pkg/e2e/restart_test.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func TestRestart(t *testing.T) {
6565
}
6666

6767
func TestRestartWithDependencies(t *testing.T) {
68-
c := NewParallelCLI(t, WithEnv(
68+
c := NewCLI(t, WithEnv(
6969
"COMPOSE_PROJECT_NAME=e2e-restart-deps",
7070
))
7171
baseService := "nginx"
@@ -80,9 +80,22 @@ func TestRestartWithDependencies(t *testing.T) {
8080

8181
res := c.RunDockerComposeCmd(t, "restart", baseService)
8282
out := res.Combined()
83-
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Started", baseService)), out)
83+
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Restarting", baseService)), out)
84+
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Healthy", baseService)), out)
8485
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Started", depWithRestart)), out)
8586
assert.Assert(t, !strings.Contains(out, depNoRestart), out)
87+
88+
c = NewParallelCLI(t, WithEnv(
89+
"COMPOSE_PROJECT_NAME=e2e-restart-deps",
90+
"LABEL=recreate",
91+
))
92+
res = c.RunDockerComposeCmd(t, "-f", "./fixtures/restart-test/compose-depends-on.yaml", "up", "-d")
93+
out = res.Combined()
94+
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Stopped", depWithRestart)), out)
95+
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Recreated", baseService)), out)
96+
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Healthy", baseService)), out)
97+
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Started", depWithRestart)), out)
98+
assert.Assert(t, strings.Contains(out, fmt.Sprintf("Container e2e-restart-deps-%s-1 Running", depNoRestart)), out)
8699
}
87100

88101
func TestRestartWithProfiles(t *testing.T) {

0 commit comments

Comments
 (0)