From 09e6b0292ac0f6b80b1f8ce17cd496f595677285 Mon Sep 17 00:00:00 2001 From: Nick Sieger Date: Wed, 17 Aug 2022 12:32:10 -0500 Subject: [PATCH] up/start/run: don't wait for disabled service Signed-off-by: Nick Sieger --- pkg/compose/convergence.go | 6 +++ .../dependencies/recreate-no-deps.yaml | 15 +++++++ pkg/e2e/recreate_no_deps_test.go | 39 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 pkg/e2e/fixtures/dependencies/recreate-no-deps.yaml create mode 100644 pkg/e2e/recreate_no_deps_test.go diff --git a/pkg/compose/convergence.go b/pkg/compose/convergence.go index a2e434817..78ef972a8 100644 --- a/pkg/compose/convergence.go +++ b/pkg/compose/convergence.go @@ -352,6 +352,12 @@ func shouldWaitForDependency(serviceName string, dependencyConfig types.ServiceD return false, nil } if service, err := project.GetService(serviceName); err != nil { + for _, ds := range project.DisabledServices { + if ds.Name == serviceName { + // don't wait for disabled service (--no-deps) + return false, nil + } + } return false, err } else if service.Scale == 0 { // don't wait for the dependency which configured to have 0 containers running diff --git a/pkg/e2e/fixtures/dependencies/recreate-no-deps.yaml b/pkg/e2e/fixtures/dependencies/recreate-no-deps.yaml new file mode 100644 index 000000000..b69e6e0de --- /dev/null +++ b/pkg/e2e/fixtures/dependencies/recreate-no-deps.yaml @@ -0,0 +1,15 @@ +version: '3.8' +services: + my-service: + image: alpine + command: tail -f /dev/null + depends_on: + nginx: {condition: service_healthy} + + nginx: + image: nginx:alpine + healthcheck: + test: "echo | nc -w 5 localhost:80" + interval: 2s + timeout: 1s + retries: 10 diff --git a/pkg/e2e/recreate_no_deps_test.go b/pkg/e2e/recreate_no_deps_test.go new file mode 100644 index 000000000..2b32e0d5b --- /dev/null +++ b/pkg/e2e/recreate_no_deps_test.go @@ -0,0 +1,39 @@ +/* + Copyright 2022 Docker Compose CLI authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package e2e + +import ( + "testing" + + "gotest.tools/v3/icmd" +) + +func TestRecreateWithNoDeps(t *testing.T) { + c := NewParallelCLI(t, WithEnv( + "COMPOSE_PROJECT_NAME=recreate-no-deps", + )) + + res := c.RunDockerComposeCmdNoCheck(t, "-f", "fixtures/dependencies/recreate-no-deps.yaml", "up", "-d") + res.Assert(t, icmd.Success) + + res = c.RunDockerComposeCmdNoCheck(t, "-f", "fixtures/dependencies/recreate-no-deps.yaml", "up", "-d", "--force-recreate", "--no-deps", "my-service") + res.Assert(t, icmd.Success) + + RequireServiceState(t, c, "my-service", "running") + + c.RunDockerComposeCmd(t, "down") +}