Skip to content

Commit

Permalink
Merge pull request #9759 from nicksieger/issue-9591
Browse files Browse the repository at this point in the history
Don't wait for disabled dependency
  • Loading branch information
nicksieger committed Aug 17, 2022
2 parents 8ad63f7 + 09e6b02 commit a64a5a6
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 6 deletions.
6 changes: 6 additions & 0 deletions pkg/compose/convergence.go
Expand Up @@ -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
Expand Down
19 changes: 13 additions & 6 deletions pkg/compose/create.go
Expand Up @@ -146,6 +146,9 @@ func prepareNetworks(project *types.Project) {
}

func prepareServicesDependsOn(p *types.Project) error {
allServices := types.Project{}
allServices.Services = p.AllServices()

for i, service := range p.Services {
var dependencies []string
networkDependency := getDependentServiceFromMode(service.NetworkMode)
Expand Down Expand Up @@ -178,20 +181,24 @@ func prepareServicesDependsOn(p *types.Project) error {
dependencies = append(dependencies, strings.Split(link, ":")[0])
}

for d := range service.DependsOn {
dependencies = append(dependencies, d)
}

if len(dependencies) == 0 {
continue
}
if service.DependsOn == nil {
service.DependsOn = make(types.DependsOnConfig)
}

// Verify dependencies exist in the project, whether disabled or not
projAllServices := types.Project{}
projAllServices.Services = p.AllServices()
deps, err := projAllServices.GetServices(dependencies...)
deps, err := allServices.GetServices(dependencies...)
if err != nil {
return err
}

if service.DependsOn == nil {
service.DependsOn = make(types.DependsOnConfig)
}

for _, d := range deps {
if _, ok := service.DependsOn[d.Name]; !ok {
service.DependsOn[d.Name] = types.ServiceDependency{
Expand Down
15 changes: 15 additions & 0 deletions 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
39 changes: 39 additions & 0 deletions 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")
}

0 comments on commit a64a5a6

Please sign in to comment.