Skip to content

Commit eea500d

Browse files
authored
Merge pull request #3179 from Random-Liu/publish-error
Return event publish errors
2 parents 6e170ec + 74eb0dc commit eea500d

2 files changed

Lines changed: 26 additions & 5 deletions

File tree

cmd/containerd-shim/main_unix.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ var (
5959
criuFlag string
6060
systemdCgroupFlag bool
6161
containerdBinaryFlag string
62+
63+
bufPool = sync.Pool{
64+
New: func() interface{} {
65+
return bytes.NewBuffer(nil)
66+
},
67+
}
6268
)
6369

6470
func init() {
@@ -275,16 +281,20 @@ func (l *remoteEventsPublisher) Publish(ctx context.Context, topic string, event
275281
}
276282
cmd := exec.CommandContext(ctx, containerdBinaryFlag, "--address", l.address, "publish", "--topic", topic, "--namespace", ns)
277283
cmd.Stdin = bytes.NewReader(data)
284+
b := bufPool.Get().(*bytes.Buffer)
285+
defer bufPool.Put(b)
286+
cmd.Stdout = b
287+
cmd.Stderr = b
278288
c, err := shim.Default.Start(cmd)
279289
if err != nil {
280290
return err
281291
}
282292
status, err := shim.Default.Wait(cmd, c)
283293
if err != nil {
284-
return err
294+
return errors.Wrapf(err, "failed to publish event: %s", b.String())
285295
}
286296
if status != 0 {
287-
return errors.New("failed to publish event")
297+
return errors.Errorf("failed to publish event: %s", b.String())
288298
}
289299
return nil
290300
}

runtime/v2/shim/shim_unix.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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
4249
func 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

Comments
 (0)