github.com/georgethebeatle/containerd@v0.2.5/supervisor/delete.go (about)

     1  package supervisor
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/Sirupsen/logrus"
     7  	"github.com/docker/containerd/runtime"
     8  )
     9  
    10  // DeleteTask holds needed parameters to remove a container
    11  type DeleteTask struct {
    12  	baseTask
    13  	ID      string
    14  	Status  uint32
    15  	PID     string
    16  	NoEvent bool
    17  	Process runtime.Process
    18  }
    19  
    20  func (s *Supervisor) delete(t *DeleteTask) error {
    21  	if i, ok := s.containers[t.ID]; ok {
    22  		start := time.Now()
    23  		if err := s.deleteContainer(i.container); err != nil {
    24  			logrus.WithField("error", err).Error("containerd: deleting container")
    25  		}
    26  		if t.Process != nil {
    27  			t.Process.Wait()
    28  		}
    29  		if !t.NoEvent {
    30  			s.notifySubscribers(Event{
    31  				Type:      StateExit,
    32  				Timestamp: time.Now(),
    33  				ID:        t.ID,
    34  				Status:    t.Status,
    35  				PID:       t.PID,
    36  			})
    37  		}
    38  		ContainersCounter.Dec(1)
    39  		ContainerDeleteTimer.UpdateSince(start)
    40  	}
    41  	return nil
    42  }
    43  
    44  func (s *Supervisor) deleteContainer(container runtime.Container) error {
    45  	delete(s.containers, container.ID())
    46  	return container.Delete()
    47  }