1- // +build !windows
2-
31/*
42 Copyright The containerd Authors.
53
1917package shim
2018
2119import (
22- "bytes"
2320 "context"
2421 "flag"
2522 "fmt"
26- "net"
2723 "os"
28- "os/exec"
29- "os/signal"
3024 "runtime"
3125 "runtime/debug"
3226 "strings"
33- "syscall"
3427 "time"
3528
3629 "github.com/containerd/containerd/events"
3730 "github.com/containerd/containerd/namespaces"
3831 shimapi "github.com/containerd/containerd/runtime/v2/task"
3932 "github.com/containerd/ttrpc"
40- "github.com/containerd/typeurl"
4133 "github.com/gogo/protobuf/proto"
4234 "github.com/pkg/errors"
4335 "github.com/sirupsen/logrus"
44- "golang.org/x/sys/unix"
4536)
4637
4738// Client for a shim server
@@ -178,7 +169,7 @@ func NewShimClient(ctx context.Context, svc shimapi.TaskService, signals chan os
178169// Serve the shim server
179170func (s * Client ) Serve () error {
180171 dump := make (chan os.Signal , 32 )
181- signal . Notify (dump , syscall . SIGUSR1 )
172+ setupDumpStacks (dump )
182173
183174 path , err := os .Getwd ()
184175 if err != nil {
@@ -211,23 +202,11 @@ func (s *Client) Serve() error {
211202// serve serves the ttrpc API over a unix socket at the provided path
212203// this function does not block
213204func serve (ctx context.Context , server * ttrpc.Server , path string ) error {
214- var (
215- l net.Listener
216- err error
217- )
218- if path == "" {
219- l , err = net .FileListener (os .NewFile (3 , "socket" ))
220- path = "[inherited from parent]"
221- } else {
222- if len (path ) > 106 {
223- return errors .Errorf ("%q: unix socket path too long (> 106)" , path )
224- }
225- l , err = net .Listen ("unix" , "\x00 " + path )
226- }
205+ l , path , err := serveListener (path )
227206 if err != nil {
228207 return err
229208 }
230- logrus .WithField ("socket" , path ).Debug ("serving api on unix socket" )
209+ logrus .WithField ("socket" , path ).Debug ("serving api on abstract socket" )
231210 go func () {
232211 defer l .Close ()
233212 if err := server .Serve (ctx , l ); err != nil &&
@@ -238,22 +217,6 @@ func serve(ctx context.Context, server *ttrpc.Server, path string) error {
238217 return nil
239218}
240219
241- func handleSignals (logger * logrus.Entry , signals chan os.Signal ) error {
242- logger .Info ("starting signal loop" )
243- for {
244- select {
245- case s := <- signals :
246- switch s {
247- case unix .SIGCHLD :
248- if err := Reap (); err != nil {
249- logger .WithError (err ).Error ("reap exit status" )
250- }
251- case unix .SIGPIPE :
252- }
253- }
254- }
255- }
256-
257220func dumpStacks (logger * logrus.Entry ) {
258221 var (
259222 buf []byte
@@ -273,29 +236,3 @@ type remoteEventsPublisher struct {
273236 address string
274237 containerdBinaryPath string
275238}
276-
277- func (l * remoteEventsPublisher ) Publish (ctx context.Context , topic string , event events.Event ) error {
278- ns , _ := namespaces .Namespace (ctx )
279- encoded , err := typeurl .MarshalAny (event )
280- if err != nil {
281- return err
282- }
283- data , err := encoded .Marshal ()
284- if err != nil {
285- return err
286- }
287- cmd := exec .CommandContext (ctx , l .containerdBinaryPath , "--address" , l .address , "publish" , "--topic" , topic , "--namespace" , ns )
288- cmd .Stdin = bytes .NewReader (data )
289- c , err := Default .Start (cmd )
290- if err != nil {
291- return err
292- }
293- status , err := Default .Wait (cmd , c )
294- if err != nil {
295- return err
296- }
297- if status != 0 {
298- return errors .New ("failed to publish event" )
299- }
300- return nil
301- }
0 commit comments