Skip to content

Commit b8773ad

Browse files
authored
Merge pull request #11110 from ndeloof/wait_missing
fail start if depependency is missing
2 parents b929810 + 1ffa194 commit b8773ad

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

pkg/compose/convergence.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ func containerReasonEvents(containers Containers, eventFunc func(string, string)
318318
const ServiceConditionRunningOrHealthy = "running_or_healthy"
319319

320320
//nolint:gocyclo
321-
func (s *composeService) waitDependencies(ctx context.Context, project *types.Project, dependencies types.DependsOnConfig, containers Containers) error {
321+
func (s *composeService) waitDependencies(ctx context.Context, project *types.Project, dependant string, dependencies types.DependsOnConfig, containers Containers) error {
322322
eg, _ := errgroup.WithContext(ctx)
323323
w := progress.ContextWriter(ctx)
324324
for dep, config := range dependencies {
@@ -330,6 +330,13 @@ func (s *composeService) waitDependencies(ctx context.Context, project *types.Pr
330330

331331
waitingFor := containers.filter(isService(dep))
332332
w.Events(containerEvents(waitingFor, progress.Waiting))
333+
if len(waitingFor) == 0 {
334+
if config.Required {
335+
return fmt.Errorf("%s is missing dependency %s", dependant, dep)
336+
}
337+
logrus.Warnf("%s is missing dependency %s", dependant, dep)
338+
continue
339+
}
333340

334341
dep, config := dep, config
335342
eg.Go(func() error {
@@ -729,7 +736,7 @@ func (s *composeService) startService(ctx context.Context, project *types.Projec
729736
return nil
730737
}
731738

732-
err := s.waitDependencies(ctx, project, service.DependsOn, containers)
739+
err := s.waitDependencies(ctx, project, service.Name, service.DependsOn, containers)
733740
if err != nil {
734741
return err
735742
}

pkg/compose/convergence_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ func TestWaitDependencies(t *testing.T) {
229229
"db": {Condition: ServiceConditionRunningOrHealthy},
230230
"redis": {Condition: ServiceConditionRunningOrHealthy},
231231
}
232-
assert.NilError(t, tested.waitDependencies(context.Background(), &project, dependencies, nil))
232+
assert.NilError(t, tested.waitDependencies(context.Background(), &project, "", dependencies, nil))
233233
})
234234
t.Run("should skip dependencies with condition service_started", func(t *testing.T) {
235235
dbService := types.ServiceConfig{Name: "db", Scale: 1}
@@ -239,6 +239,6 @@ func TestWaitDependencies(t *testing.T) {
239239
"db": {Condition: types.ServiceConditionStarted, Required: true},
240240
"redis": {Condition: types.ServiceConditionStarted, Required: true},
241241
}
242-
assert.NilError(t, tested.waitDependencies(context.Background(), &project, dependencies, nil))
242+
assert.NilError(t, tested.waitDependencies(context.Background(), &project, "", dependencies, nil))
243243
})
244244
}

pkg/compose/run.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func (s *composeService) prepareRun(ctx context.Context, project *types.Project,
9292
}
9393

9494
if !opts.NoDeps {
95-
if err := s.waitDependencies(ctx, project, service.DependsOn, observedState); err != nil {
95+
if err := s.waitDependencies(ctx, project, service.Name, service.DependsOn, observedState); err != nil {
9696
return "", err
9797
}
9898
}

pkg/compose/start.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func (s *composeService) start(ctx context.Context, projectName string, options
148148
defer cancel()
149149
}
150150

151-
err = s.waitDependencies(ctx, project, depends, containers)
151+
err = s.waitDependencies(ctx, project, project.Name, depends, containers)
152152
if err != nil {
153153
if errors.Is(ctx.Err(), context.DeadlineExceeded) {
154154
return fmt.Errorf("application not healthy after %s", options.WaitTimeout)

0 commit comments

Comments
 (0)