@@ -26,6 +26,7 @@ import (
2626 "os"
2727 "os/exec"
2828 "os/signal"
29+ "sync"
2930 "syscall"
3031
3132 "github.com/containerd/containerd/events"
@@ -37,6 +38,12 @@ import (
3738 "golang.org/x/sys/unix"
3839)
3940
41+ var bufPool = sync.Pool {
42+ New : func () interface {} {
43+ return bytes .NewBuffer (nil )
44+ },
45+ }
46+
4047// setupSignals creates a new signal handler for all signals and sets the shim as a
4148// sub-reaper so that the container processes are reparented
4249func setupSignals (config Config ) (chan os.Signal , error ) {
@@ -106,12 +113,16 @@ func (l *remoteEventsPublisher) Publish(ctx context.Context, topic string, event
106113 }
107114 cmd := exec .CommandContext (ctx , l .containerdBinaryPath , "--address" , l .address , "publish" , "--topic" , topic , "--namespace" , ns )
108115 cmd .Stdin = bytes .NewReader (data )
116+ b := bufPool .Get ().(* bytes.Buffer )
117+ defer bufPool .Put (b )
118+ cmd .Stdout = b
119+ cmd .Stderr = b
109120 if l .noReaper {
110121 if err := cmd .Start (); err != nil {
111122 return err
112123 }
113124 if err := cmd .Wait (); err != nil {
114- return errors .Wrap (err , "failed to publish event" )
125+ return errors .Wrapf (err , "failed to publish event: %s" , b . String () )
115126 }
116127 return nil
117128 }
@@ -121,10 +132,10 @@ func (l *remoteEventsPublisher) Publish(ctx context.Context, topic string, event
121132 }
122133 status , err := Default .Wait (cmd , c )
123134 if err != nil {
124- return err
135+ return errors . Wrapf ( err , "failed to publish event: %s" , b . String ())
125136 }
126137 if status != 0 {
127- return errors .New ("failed to publish event" )
138+ return errors .Errorf ("failed to publish event: %s" , b . String () )
128139 }
129140 return nil
130141}
0 commit comments