Skip to content

Commit 5059a1d

Browse files
kooogendeloof
authored andcommitted
Set Required false to depends_on containers for compose -p stop/down
Signed-off-by: koooge <[email protected]>
1 parent 54a525b commit 5059a1d

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

pkg/compose/dependencies.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func downDirectionTraversal(visitorFn func(context.Context, string) error) *grap
7777

7878
// InDependencyOrder applies the function to the services of the project taking in account the dependency order
7979
func InDependencyOrder(ctx context.Context, project *types.Project, fn func(context.Context, string) error, options ...func(*graphTraversal)) error {
80-
graph, err := NewGraph(project, ServiceStopped, false)
80+
graph, err := NewGraph(project, ServiceStopped)
8181
if err != nil {
8282
return err
8383
}
@@ -89,8 +89,8 @@ func InDependencyOrder(ctx context.Context, project *types.Project, fn func(cont
8989
}
9090

9191
// InReverseDependencyOrder applies the function to the services of the project in reverse order of dependencies
92-
func InReverseDependencyOrder(ctx context.Context, project *types.Project, ignoreMissing bool, fn func(context.Context, string) error, options ...func(*graphTraversal)) error {
93-
graph, err := NewGraph(project, ServiceStarted, ignoreMissing)
92+
func InReverseDependencyOrder(ctx context.Context, project *types.Project, fn func(context.Context, string) error, options ...func(*graphTraversal)) error {
93+
graph, err := NewGraph(project, ServiceStarted)
9494
if err != nil {
9595
return err
9696
}
@@ -257,7 +257,7 @@ func (v *Vertex) GetChildren() []*Vertex {
257257
}
258258

259259
// NewGraph returns the dependency graph of the services
260-
func NewGraph(project *types.Project, initialStatus ServiceStatus, ignoreMissing bool) (*Graph, error) {
260+
func NewGraph(project *types.Project, initialStatus ServiceStatus) (*Graph, error) {
261261
graph := &Graph{
262262
lock: sync.RWMutex{},
263263
Vertices: map[string]*Vertex{},
@@ -271,7 +271,7 @@ func NewGraph(project *types.Project, initialStatus ServiceStatus, ignoreMissing
271271
for _, name := range s.GetDependencies() {
272272
err := graph.AddEdge(s.Name, name)
273273
if err != nil {
274-
if ignoreMissing || !s.DependsOn[name].Required {
274+
if !s.DependsOn[name].Required {
275275
delete(s.DependsOn, name)
276276
project.Services[index] = s
277277
continue

pkg/compose/dependencies_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func TestInDependencyReverseDownCommandOrder(t *testing.T) {
115115
t.Cleanup(cancel)
116116

117117
var order []string
118-
err := InReverseDependencyOrder(ctx, createTestProject(), false, func(ctx context.Context, service string) error {
118+
err := InReverseDependencyOrder(ctx, createTestProject(), func(ctx context.Context, service string) error {
119119
order = append(order, service)
120120
return nil
121121
})
@@ -270,7 +270,7 @@ func TestBuildGraph(t *testing.T) {
270270
Services: tC.services,
271271
}
272272

273-
graph, err := NewGraph(&project, ServiceStopped, false)
273+
graph, err := NewGraph(&project, ServiceStopped)
274274
assert.NilError(t, err, fmt.Sprintf("failed to build graph for: %s", tC.desc))
275275

276276
for k, vertex := range graph.Vertices {
@@ -282,7 +282,7 @@ func TestBuildGraph(t *testing.T) {
282282
}
283283
}
284284

285-
func TestBuildGraphIgnoreMissing(t *testing.T) {
285+
func TestBuildGraphDependsOn(t *testing.T) {
286286
testCases := []struct {
287287
desc string
288288
services types.Services
@@ -298,7 +298,7 @@ func TestBuildGraphIgnoreMissing(t *testing.T) {
298298
Condition: "service_completed_successfully",
299299
Restart: false,
300300
Extensions: types.Extensions(nil),
301-
Required: true,
301+
Required: false,
302302
},
303303
},
304304
},
@@ -320,7 +320,7 @@ func TestBuildGraphIgnoreMissing(t *testing.T) {
320320
Services: tC.services,
321321
}
322322

323-
graph, err := NewGraph(&project, ServiceStopped, true)
323+
graph, err := NewGraph(&project, ServiceStopped)
324324
assert.NilError(t, err, fmt.Sprintf("failed to build graph for: %s", tC.desc))
325325

326326
for k, vertex := range graph.Vertices {

pkg/compose/down.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (s *composeService) down(ctx context.Context, projectName string, options a
7474
resourceToRemove = true
7575
}
7676

77-
err = InReverseDependencyOrder(ctx, project, true, func(c context.Context, service string) error {
77+
err = InReverseDependencyOrder(ctx, project, func(c context.Context, service string) error {
7878
serviceContainers := containers.filter(isService(service))
7979
err := s.removeContainers(ctx, serviceContainers, options.Timeout, options.Volumes)
8080
return err
@@ -344,10 +344,22 @@ func (s *composeService) stopAndRemoveContainer(ctx context.Context, container m
344344

345345
func (s *composeService) getProjectWithResources(ctx context.Context, containers Containers, projectName string) (*types.Project, error) {
346346
containers = containers.filter(isNotOneOff)
347-
project, err := s.projectFromName(containers, projectName)
347+
p, err := s.projectFromName(containers, projectName)
348348
if err != nil && !api.IsNotFoundError(err) {
349349
return nil, err
350350
}
351+
project, err := p.WithServicesTransform(func(name string, service types.ServiceConfig) (types.ServiceConfig, error) {
352+
for k := range service.DependsOn {
353+
if dependency, ok := service.DependsOn[k]; ok {
354+
dependency.Required = false
355+
service.DependsOn[k] = dependency
356+
}
357+
}
358+
return service, nil
359+
})
360+
if err != nil {
361+
return nil, err
362+
}
351363

352364
volumes, err := s.actualVolumes(ctx, projectName)
353365
if err != nil {
@@ -360,5 +372,6 @@ func (s *composeService) getProjectWithResources(ctx context.Context, containers
360372
return nil, err
361373
}
362374
project.Networks = networks
375+
363376
return project, nil
364377
}

pkg/compose/stop.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (s *composeService) stop(ctx context.Context, projectName string, options a
5050
}
5151

5252
w := progress.ContextWriter(ctx)
53-
return InReverseDependencyOrder(ctx, project, true, func(c context.Context, service string) error {
53+
return InReverseDependencyOrder(ctx, project, func(c context.Context, service string) error {
5454
if !utils.StringContains(options.Services, service) {
5555
return nil
5656
}

0 commit comments

Comments
 (0)