Skip to content

Commit 1d3d080

Browse files
committed
Support SIGRTMIN+n signals
systemd uses SIGRTMIN+n signals, but containerd didn't support the signals since Go's sys/unix doesn't support them. This change introduces SIGRTMIN+n handling by utilizing moby/sys/signal. Fixes containerd#5402. https://www.freedesktop.org/software/systemd/man/systemd.html#Signals Signed-off-by: Kazuyoshi Kato <[email protected]>
1 parent 3b7a3d5 commit 1d3d080

File tree

128 files changed

+4053
-12240
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+4053
-12240
lines changed

cmd/ctr/commands/tasks/kill.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package tasks
1919
import (
2020
"github.com/containerd/containerd"
2121
"github.com/containerd/containerd/cmd/ctr/commands"
22+
"github.com/moby/sys/signal"
2223
"github.com/pkg/errors"
2324
"github.com/urfave/cli"
2425
)
@@ -49,7 +50,7 @@ var killCommand = cli.Command{
4950
if id == "" {
5051
return errors.New("container id must be provided")
5152
}
52-
signal, err := containerd.ParseSignal(defaultSignal)
53+
sig, err := signal.ParseSignal(defaultSignal)
5354
if err != nil {
5455
return err
5556
}
@@ -77,12 +78,12 @@ var killCommand = cli.Command{
7778
return err
7879
}
7980
if context.String("signal") != "" {
80-
signal, err = containerd.ParseSignal(context.String("signal"))
81+
sig, err = signal.ParseSignal(context.String("signal"))
8182
if err != nil {
8283
return err
8384
}
8485
} else {
85-
signal, err = containerd.GetStopSignal(ctx, container, signal)
86+
sig, err = containerd.GetStopSignal(ctx, container, sig)
8687
if err != nil {
8788
return err
8889
}
@@ -91,6 +92,6 @@ var killCommand = cli.Command{
9192
if err != nil {
9293
return err
9394
}
94-
return task.Kill(ctx, signal, opts...)
95+
return task.Kill(ctx, sig, opts...)
9596
},
9697
}

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ require (
3737
github.com/klauspost/compress v1.11.13
3838
github.com/moby/locker v1.0.1
3939
github.com/moby/sys/mountinfo v0.4.1
40+
github.com/moby/sys/signal v0.5.1-0.20210723232958-8a51b5cc8879
4041
github.com/moby/sys/symlink v0.1.0
4142
github.com/opencontainers/go-digest v1.0.0
4243
github.com/opencontainers/image-spec v1.0.1
@@ -55,7 +56,7 @@ require (
5556
go.etcd.io/bbolt v1.3.5
5657
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
5758
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
58-
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887
59+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
5960
google.golang.org/grpc v1.38.0
6061
google.golang.org/protobuf v1.26.0
6162
gotest.tools/v3 v3.0.3

go.sum

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,8 @@ github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
338338
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
339339
github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM=
340340
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
341+
github.com/moby/sys/signal v0.5.1-0.20210723232958-8a51b5cc8879 h1:PkXi3ZKVBSfi1skhCjUykUKRwKxn/D48Nj4D1sWalXk=
342+
github.com/moby/sys/signal v0.5.1-0.20210723232958-8a51b5cc8879/go.mod h1:JwObcMnOrUy2VTP5swPKWwywH0Mbgk8Y5qua9iwtIRM=
341343
github.com/moby/sys/symlink v0.1.0 h1:MTFZ74KtNI6qQQpuBxU+uKCim4WtOMokr03hCfJcazE=
342344
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
343345
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
@@ -627,8 +629,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
627629
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
628630
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
629631
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
630-
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 h1:dXfMednGJh/SUUFjTLsWJz3P+TQt9qnR11GgeI3vWKs=
631632
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
633+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
634+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
632635
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
633636
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
634637
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

integration/client/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417
1818
github.com/pkg/errors v0.9.1
1919
github.com/sirupsen/logrus v1.8.1
20-
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887
20+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
2121
gotest.tools/v3 v3.0.3
2222
)
2323

integration/client/go.sum

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy
2222
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
2323
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
2424
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
25+
github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg=
2526
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
2627
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
2728
github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
@@ -317,6 +318,8 @@ github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
317318
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
318319
github.com/moby/sys/mountinfo v0.4.1 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM=
319320
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
321+
github.com/moby/sys/signal v0.5.1-0.20210723232958-8a51b5cc8879 h1:PkXi3ZKVBSfi1skhCjUykUKRwKxn/D48Nj4D1sWalXk=
322+
github.com/moby/sys/signal v0.5.1-0.20210723232958-8a51b5cc8879/go.mod h1:JwObcMnOrUy2VTP5swPKWwywH0Mbgk8Y5qua9iwtIRM=
320323
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
321324
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
322325
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -588,8 +591,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
588591
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
589592
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
590593
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
591-
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 h1:dXfMednGJh/SUUFjTLsWJz3P+TQt9qnR11GgeI3vWKs=
592594
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
595+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
596+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
593597
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
594598
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
595599
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

pkg/cri/server/container_stop.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"syscall"
2222
"time"
2323

24-
"github.com/containerd/containerd"
2524
eventtypes "github.com/containerd/containerd/api/events"
2625
"github.com/containerd/containerd/errdefs"
2726
"github.com/containerd/containerd/log"
@@ -32,6 +31,7 @@ import (
3231
"github.com/containerd/containerd/pkg/cri/store"
3332
containerstore "github.com/containerd/containerd/pkg/cri/store/container"
3433
ctrdutil "github.com/containerd/containerd/pkg/cri/util"
34+
"github.com/moby/sys/signal"
3535
)
3636

3737
// StopContainer stops a running container with a grace period (i.e., timeout).
@@ -126,7 +126,7 @@ func (c *criService) stopContainer(ctx context.Context, container containerstore
126126
}
127127
}
128128
}
129-
sig, err := containerd.ParseSignal(stopSignal)
129+
sig, err := signal.ParseSignal(stopSignal)
130130
if err != nil {
131131
return errors.Wrapf(err, "failed to parse stop signal %q", stopSignal)
132132
}

signals.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424

2525
"github.com/containerd/containerd/content"
2626
"github.com/containerd/containerd/images"
27+
"github.com/moby/sys/signal"
2728
v1 "github.com/opencontainers/image-spec/specs-go/v1"
2829
)
2930

@@ -40,15 +41,15 @@ func GetStopSignal(ctx context.Context, container Container, defaultSignal sysca
4041
}
4142

4243
if stopSignal, ok := labels[StopSignalLabel]; ok {
43-
return ParseSignal(stopSignal)
44+
return signal.ParseSignal(stopSignal)
4445
}
4546

4647
return defaultSignal, nil
4748
}
4849

4950
// GetOCIStopSignal retrieves the stop signal specified in the OCI image config
5051
func GetOCIStopSignal(ctx context.Context, image Image, defaultSignal string) (string, error) {
51-
_, err := ParseSignal(defaultSignal)
52+
_, err := signal.ParseSignal(defaultSignal)
5253
if err != nil {
5354
return "", err
5455
}
@@ -81,3 +82,12 @@ func GetOCIStopSignal(ctx context.Context, image Image, defaultSignal string) (s
8182

8283
return config.StopSignal, nil
8384
}
85+
86+
// ParseSignal parses a given string into a syscall.Signal
87+
// the rawSignal can be a string with "SIG" prefix,
88+
// or a signal number in string format.
89+
//
90+
// Deprecated: Use github.com/moby/sys/signal instead.
91+
func ParseSignal(rawSignal string) (syscall.Signal, error) {
92+
return signal.ParseSignal(rawSignal)
93+
}

signals_unix.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

signals_windows.go

Lines changed: 0 additions & 63 deletions
This file was deleted.

0 commit comments

Comments
 (0)