Implement checkpoint / restore for shim

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby 2016-02-01 15:07:02 -08:00
parent 835f3b6a97
commit 277cc920a4
8 changed files with 258 additions and 93 deletions

View file

@ -5,14 +5,11 @@ type CreateCheckpointEvent struct {
}
func (h *CreateCheckpointEvent) Handle(e *Event) error {
/*
i, ok := h.s.containers[e.ID]
if !ok {
return ErrContainerNotFound
}
*/
return nil
// return i.container.Checkpoint(*e.Checkpoint)
i, ok := h.s.containers[e.ID]
if !ok {
return ErrContainerNotFound
}
return i.container.Checkpoint(*e.Checkpoint)
}
type DeleteCheckpointEvent struct {
@ -20,12 +17,9 @@ type DeleteCheckpointEvent struct {
}
func (h *DeleteCheckpointEvent) Handle(e *Event) error {
/*
i, ok := h.s.containers[e.ID]
if !ok {
return ErrContainerNotFound
}
*/
return nil
// return i.container.DeleteCheckpoint(e.Checkpoint.Name)
i, ok := h.s.containers[e.ID]
if !ok {
return ErrContainerNotFound
}
return i.container.DeleteCheckpoint(e.Checkpoint.Name)
}

View file

@ -37,30 +37,14 @@ type worker struct {
func (w *worker) Start() {
defer w.wg.Done()
for t := range w.s.tasks {
var (
err error
process runtime.Process
started = time.Now()
)
if t.Checkpoint != "" {
/*
if err := t.Container.Restore(t.Checkpoint); err != nil {
evt := NewEvent(DeleteEventType)
evt.ID = t.Container.ID()
w.s.SendEvent(evt)
t.Err <- err
continue
}
*/
} else {
process, err = t.Container.Start()
if err != nil {
evt := NewEvent(DeleteEventType)
evt.ID = t.Container.ID()
w.s.SendEvent(evt)
t.Err <- err
continue
}
started := time.Now()
process, err := t.Container.Start(t.Checkpoint)
if err != nil {
evt := NewEvent(DeleteEventType)
evt.ID = t.Container.ID()
w.s.SendEvent(evt)
t.Err <- err
continue
}
/*
if w.s.notifier != nil {