MCPcopy
hub / github.com/containerd/containerd / HandleEvent

Method HandleEvent

internal/cri/server/events.go:322–396  ·  view source on GitHub ↗

HandleEvent handles a containerd event.

(any any)

Source from the content-addressed store, hash-verified

320
321// HandleEvent handles a containerd event.
322func (ce *criEventHandler) HandleEvent(any any) error {
323 ctx := ctrdutil.NamespacedContext()
324 ctx, cancel := context.WithTimeout(ctx, handleEventTimeout)
325 defer cancel()
326
327 switch e := any.(type) {
328 case *eventtypes.TaskExit:
329 log.L.Infof("TaskExit event %+v", e)
330 // Use ID instead of ContainerID to rule out TaskExit event for exec.
331 cntr, err := ce.c.containerStore.Get(e.ID)
332 if err == nil {
333 if err := ce.c.handleContainerExit(ctx, e, cntr, cntr.SandboxID); err != nil {
334 return fmt.Errorf("failed to handle container TaskExit event: %w", err)
335 }
336 return nil
337 } else if !errdefs.IsNotFound(err) {
338 return fmt.Errorf("can't find container for TaskExit event: %w", err)
339 }
340 sb, err := ce.c.sandboxStore.Get(e.ID)
341 if err == nil {
342 if err := ce.c.handleSandboxExit(ctx, sb, e.ExitStatus, e.ExitedAt.AsTime()); err != nil {
343 return fmt.Errorf("failed to handle sandbox TaskExit event: %w", err)
344 }
345 return nil
346 } else if !errdefs.IsNotFound(err) {
347 return fmt.Errorf("can't find sandbox for TaskExit event: %w", err)
348 }
349 return nil
350 case *eventtypes.SandboxExit:
351 log.L.Infof("SandboxExit event %+v", e)
352 sb, err := ce.c.sandboxStore.Get(e.GetSandboxID())
353 if err == nil {
354 if err := ce.c.handleSandboxExit(ctx, sb, e.ExitStatus, e.ExitedAt.AsTime()); err != nil {
355 return fmt.Errorf("failed to handle sandbox TaskExit event: %w", err)
356 }
357 return nil
358 } else if !errdefs.IsNotFound(err) {
359 return fmt.Errorf("can't find sandbox for TaskExit event: %w", err)
360 }
361 return nil
362 case *eventtypes.TaskOOM:
363 log.L.Infof("TaskOOM event %+v", e)
364 // For TaskOOM, we only care which container it belongs to.
365 cntr, err := ce.c.containerStore.Get(e.ContainerID)
366 if err != nil {
367 if !errdefs.IsNotFound(err) {
368 return fmt.Errorf("can't find container for TaskOOM event: %w", err)
369 }
370 return nil
371 }
372
373 if cntr.Status.Get().Reason == oomExitReason {
374 return nil
375 }
376
377 err = cntr.Status.UpdateSync(func(status containerstore.Status) (containerstore.Status, error) {
378 status.Reason = oomExitReason
379 return status, nil

Callers

nothing calls this directly

Calls 6

handleContainerExitMethod · 0.80
handleSandboxExitMethod · 0.80
GetMethod · 0.65
UpdateSyncMethod · 0.65
UpdateImageMethod · 0.65
GetSandboxIDMethod · 0.45

Tested by

no test coverage detected