@@ -120,12 +120,10 @@ func (em *eventMonitor) startSandboxExitMonitor(ctx context.Context, id string,
120120 exitedAt = time .Now ()
121121 }
122122
123- e := & eventtypes.TaskExit {
124- ContainerID : id ,
125- ID : id ,
126- Pid : pid ,
127- ExitStatus : exitStatus ,
128- ExitedAt : protobuf .ToTimestamp (exitedAt ),
123+ e := & eventtypes.SandboxExit {
124+ SandboxID : id ,
125+ ExitStatus : exitStatus ,
126+ ExitedAt : protobuf .ToTimestamp (exitedAt ),
129127 }
130128
131129 logrus .Debugf ("received exit event %+v" , e )
@@ -135,14 +133,14 @@ func (em *eventMonitor) startSandboxExitMonitor(ctx context.Context, id string,
135133 dctx , dcancel := context .WithTimeout (dctx , handleEventTimeout )
136134 defer dcancel ()
137135
138- sb , err := em .c .sandboxStore .Get (e .ID )
136+ sb , err := em .c .sandboxStore .Get (e .GetSandboxID () )
139137 if err == nil {
140- if err := handleSandboxExit (dctx , e , sb , em .c ); err != nil {
138+ if err := handleSandboxExit (dctx , sb , e . ExitStatus , e . ExitedAt . AsTime () , em .c ); err != nil {
141139 return err
142140 }
143141 return nil
144142 } else if ! errdefs .IsNotFound (err ) {
145- return fmt .Errorf ("failed to get sandbox %s: %w" , e .ID , err )
143+ return fmt .Errorf ("failed to get sandbox %s: %w" , e .SandboxID , err )
146144 }
147145 return nil
148146 }()
@@ -218,6 +216,8 @@ func convertEvent(e typeurl.Any) (string, interface{}, error) {
218216 switch e := evt .(type ) {
219217 case * eventtypes.TaskOOM :
220218 id = e .ContainerID
219+ case * eventtypes.SandboxExit :
220+ id = e .SandboxID
221221 case * eventtypes.ImageCreate :
222222 id = e .Name
223223 case * eventtypes.ImageUpdate :
@@ -323,7 +323,19 @@ func (em *eventMonitor) handleEvent(any interface{}) error {
323323 }
324324 sb , err := em .c .sandboxStore .Get (e .ID )
325325 if err == nil {
326- if err := handleSandboxExit (ctx , e , sb , em .c ); err != nil {
326+ if err := handleSandboxExit (ctx , sb , e .ExitStatus , e .ExitedAt .AsTime (), em .c ); err != nil {
327+ return fmt .Errorf ("failed to handle sandbox TaskExit event: %w" , err )
328+ }
329+ return nil
330+ } else if ! errdefs .IsNotFound (err ) {
331+ return fmt .Errorf ("can't find sandbox for TaskExit event: %w" , err )
332+ }
333+ return nil
334+ case * eventtypes.SandboxExit :
335+ log .L .Infof ("SandboxExit event %+v" , e )
336+ sb , err := em .c .sandboxStore .Get (e .GetSandboxID ())
337+ if err == nil {
338+ if err := handleSandboxExit (ctx , sb , e .ExitStatus , e .ExitedAt .AsTime (), em .c ); err != nil {
327339 return fmt .Errorf ("failed to handle sandbox TaskExit event: %w" , err )
328340 }
329341 return nil
@@ -416,13 +428,13 @@ func handleContainerExit(ctx context.Context, e *eventtypes.TaskExit, cntr conta
416428 return nil
417429}
418430
419- // handleSandboxExit handles TaskExit event for sandbox .
420- func handleSandboxExit (ctx context.Context , e * eventtypes. TaskExit , sb sandboxstore. Sandbox , c * criService ) error {
431+ // handleSandboxExit handles sandbox exit event .
432+ func handleSandboxExit (ctx context.Context , sb sandboxstore. Sandbox , exitStatus uint32 , exitTime time. Time , c * criService ) error {
421433 if err := sb .Status .Update (func (status sandboxstore.Status ) (sandboxstore.Status , error ) {
422434 status .State = sandboxstore .StateNotReady
423435 status .Pid = 0
424- status .ExitStatus = e . ExitStatus
425- status .ExitedAt = e . ExitedAt . AsTime ()
436+ status .ExitStatus = exitStatus
437+ status .ExitedAt = exitTime
426438 return status , nil
427439 }); err != nil {
428440 return fmt .Errorf ("failed to update sandbox state: %w" , err )
0 commit comments