Skip to content

Commit

Permalink
Merge pull request #8638 from ulyssessouza/fix-ctrl-c-2x-deps
Browse files Browse the repository at this point in the history
Stop only the service ran by it's up command
  • Loading branch information
Ulysses Souza authored Sep 20, 2021
2 parents 480a255 + 2a1e989 commit aa4b012
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 6 deletions.
1 change: 1 addition & 0 deletions cmd/compose/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ func runUp(ctx context.Context, backend api.Service, createOptions createOptions
}

create := api.CreateOptions{
Services: services,
RemoveOrphans: createOptions.removeOrphans,
Recreate: createOptions.recreateStrategy(),
RecreateDependencies: createOptions.dependenciesRecreateStrategy(),
Expand Down
2 changes: 2 additions & 0 deletions pkg/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ type ImagesOptions struct {

// KillOptions group options of the Kill API
type KillOptions struct {
// Services passed in the command line to be killed
Services []string
// Signal to send to containers
Signal string
}
Expand Down
7 changes: 6 additions & 1 deletion pkg/compose/kill.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,13 @@ func (s *composeService) Kill(ctx context.Context, project *types.Project, optio
func (s *composeService) kill(ctx context.Context, project *types.Project, options api.KillOptions) error {
w := progress.ContextWriter(ctx)

services := options.Services
if len(services) == 0 {
services = project.ServiceNames()
}

var containers Containers
containers, err := s.getContainers(ctx, project.Name, oneOffInclude, true)
containers, err := s.getContainers(ctx, project.Name, oneOffInclude, true, services...)
if err != nil {
return err
}
Expand Down
12 changes: 9 additions & 3 deletions pkg/compose/kill_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,24 @@ func TestKillAll(t *testing.T) {
}

func TestKillSignal(t *testing.T) {
const serviceName = "service1"
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
api := mocks.NewMockAPIClient(mockCtrl)
tested.apiClient = api

project := types.Project{Name: strings.ToLower(testProject), Services: []types.ServiceConfig{testService("service1")}}
project := types.Project{Name: strings.ToLower(testProject), Services: []types.ServiceConfig{testService(serviceName)}}
listOptions := moby.ContainerListOptions{
Filters: filters.NewArgs(projectFilter(strings.ToLower(testProject)),
serviceFilter(serviceName)),
All: true,
}

ctx := context.Background()
api.EXPECT().ContainerList(ctx, projectFilterListOpt()).Return([]moby.Container{testContainer("service1", "123", false)}, nil)
api.EXPECT().ContainerList(ctx, listOptions).Return([]moby.Container{testContainer(serviceName, "123", false)}, nil)
api.EXPECT().ContainerKill(anyCancellableContext(), "123", "SIGTERM").Return(nil)

err := tested.kill(ctx, &project, compose.KillOptions{Signal: "SIGTERM"})
err := tested.kill(ctx, &project, compose.KillOptions{Services: []string{serviceName}, Signal: "SIGTERM"})
assert.NilError(t, err)
}

Expand Down
8 changes: 6 additions & 2 deletions pkg/compose/up.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,14 @@ func (s *composeService) Up(ctx context.Context, project *types.Project, options
return progress.Run(ctx, func(ctx context.Context) error {
go func() {
<-signalChan
s.Kill(ctx, project, api.KillOptions{}) // nolint:errcheck
s.Kill(ctx, project, api.KillOptions{ // nolint:errcheck
Services: options.Create.Services,
})
}()

return s.Stop(ctx, project, api.StopOptions{})
return s.Stop(ctx, project, api.StopOptions{
Services: options.Create.Services,
})
})
}
go func() {
Expand Down

0 comments on commit aa4b012

Please sign in to comment.