remove task handling from Restore

Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
This commit is contained in:
Evan Hazlett
2018-09-17 11:04:13 -04:00
parent 2d3db08daf
commit 0e4d9da755
3 changed files with 61 additions and 55 deletions

View File

@@ -38,7 +38,6 @@ import (
snapshotsapi "github.com/containerd/containerd/api/services/snapshots/v1"
"github.com/containerd/containerd/api/services/tasks/v1"
versionservice "github.com/containerd/containerd/api/services/version/v1"
"github.com/containerd/containerd/cio"
"github.com/containerd/containerd/containers"
"github.com/containerd/containerd/content"
contentproxy "github.com/containerd/containerd/content/proxy"
@@ -524,15 +523,15 @@ func (c *Client) ListImages(ctx context.Context, filters ...string) ([]Image, er
}
// Restore restores a container from a checkpoint
func (c *Client) Restore(ctx context.Context, id, ref string, opts ...RestoreOpts) error {
func (c *Client) Restore(ctx context.Context, id, ref string, opts ...RestoreOpts) (Container, error) {
checkpoint, err := c.GetImage(ctx, ref)
if err != nil {
if !errdefs.IsNotFound(err) {
return err
return nil, err
}
ck, err := c.Fetch(ctx, ref)
if err != nil {
return err
return nil, err
}
checkpoint = NewImage(c, ck)
}
@@ -540,61 +539,50 @@ func (c *Client) Restore(ctx context.Context, id, ref string, opts ...RestoreOpt
store := c.ContentStore()
index, err := decodeIndex(ctx, store, checkpoint.Target())
if err != nil {
return err
return nil, err
}
ctx, done, err := c.WithLease(ctx)
if err != nil {
return err
return nil, err
}
defer done(ctx)
copts := []NewContainerOpts{}
topts := []NewTaskOpts{}
for _, o := range opts {
co, to, err := o(ctx, id, c, checkpoint, index)
co, err := o(ctx, id, c, checkpoint, index)
if err != nil {
return err
return nil, err
}
copts = append(copts, co...)
topts = append(topts, to...)
}
ctr, err := c.NewContainer(ctx, id, copts...)
if err != nil {
return err
return nil, err
}
// apply rw layer
info, err := ctr.Info(ctx)
if err != nil {
return err
return nil, err
}
rw, err := GetIndexByMediaType(index, ocispec.MediaTypeImageLayerGzip)
if err != nil {
return err
return nil, err
}
mounts, err := c.SnapshotService(info.Snapshotter).Mounts(ctx, info.SnapshotKey)
if err != nil {
return err
return nil, err
}
if _, err := c.DiffService().Apply(ctx, *rw, mounts); err != nil {
return err
return nil, err
}
task, err := ctr.NewTask(ctx, cio.NewCreator(cio.WithStdio), topts...)
if err != nil {
return err
}
if err := task.Start(ctx); err != nil {
return err
}
return nil
return ctr, nil
}
func writeIndex(ctx context.Context, index *ocispec.Index, client *Client, ref string) (d ocispec.Descriptor, err error) {