Remove protos from Go client API

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby 2017-07-12 14:22:27 -07:00
parent 1a49f5ea79
commit 3b8018d8cf
9 changed files with 82 additions and 52 deletions

View File

@ -3,8 +3,6 @@ package containerd
import ( import (
"syscall" "syscall"
"testing" "testing"
"github.com/containerd/containerd/linux/runcopts"
) )
func TestCheckpointRestore(t *testing.T) { func TestCheckpointRestore(t *testing.T) {
@ -61,7 +59,7 @@ func TestCheckpointRestore(t *testing.T) {
return return
} }
checkpoint, err := task.Checkpoint(ctx, runcopts.WithExit) checkpoint, err := task.Checkpoint(ctx, WithExit)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
@ -151,7 +149,7 @@ func TestCheckpointRestoreNewContainer(t *testing.T) {
return return
} }
checkpoint, err := task.Checkpoint(ctx, runcopts.WithExit) checkpoint, err := task.Checkpoint(ctx, WithExit)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return

View File

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"github.com/containerd/containerd" "github.com/containerd/containerd"
"github.com/containerd/containerd/linux/runcopts"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@ -41,9 +40,9 @@ var checkpointCommand = cli.Command{
if err != nil { if err != nil {
return err return err
} }
var opts []containerd.CheckpointOpts var opts []containerd.CheckpointTaskOpts
if context.Bool("exit") { if context.Bool("exit") {
opts = append(opts, runcopts.WithExit) opts = append(opts, containerd.WithExit)
} }
checkpoint, err := task.Checkpoint(ctx, opts...) checkpoint, err := task.Checkpoint(ctx, opts...)
if err != nil { if err != nil {

View File

@ -13,6 +13,7 @@ import (
"github.com/containerd/containerd/api/services/containers/v1" "github.com/containerd/containerd/api/services/containers/v1"
"github.com/containerd/containerd/api/services/tasks/v1" "github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/containerd/api/types" "github.com/containerd/containerd/api/types"
"github.com/containerd/containerd/typeurl"
ptypes "github.com/gogo/protobuf/types" ptypes "github.com/gogo/protobuf/types"
specs "github.com/opencontainers/runtime-spec/specs-go" specs "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -167,7 +168,7 @@ func (c *container) Image(ctx context.Context) (Image, error) {
}, nil }, nil
} }
type NewTaskOpts func(context.Context, *Client, *tasks.CreateTaskRequest) error type NewTaskOpts func(context.Context, *Client, *TaskInfo) error
func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...NewTaskOpts) (Task, error) { func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...NewTaskOpts) (Task, error) {
c.mu.Lock() c.mu.Lock()
@ -197,18 +198,26 @@ func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...Ne
}) })
} }
} }
var info TaskInfo
for _, o := range opts { for _, o := range opts {
if err := o(ctx, c.client, request); err != nil { if err := o(ctx, c.client, &info); err != nil {
return nil, err return nil, err
} }
} }
if info.Options != nil {
any, err := typeurl.MarshalAny(info.Options)
if err != nil {
return nil, err
}
request.Options = any
}
t := &task{ t := &task{
client: c.client, client: c.client,
io: i, io: i,
id: c.ID(), id: c.ID(),
} }
if info.Checkpoint != nil {
if request.Checkpoint != nil { request.Checkpoint = info.Checkpoint
// we need to defer the create call to start // we need to defer the create call to start
t.deferred = request t.deferred = request
} else { } else {

View File

@ -9,7 +9,6 @@ import (
"io/ioutil" "io/ioutil"
"github.com/containerd/containerd/api/services/containers/v1" "github.com/containerd/containerd/api/services/containers/v1"
"github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/containerd/api/types" "github.com/containerd/containerd/api/types"
"github.com/containerd/containerd/content" "github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/errdefs"
@ -84,7 +83,7 @@ func WithCheckpoint(desc v1.Descriptor, rootfsID string) NewContainerOpts {
} }
func WithTaskCheckpoint(desc v1.Descriptor) NewTaskOpts { func WithTaskCheckpoint(desc v1.Descriptor) NewTaskOpts {
return func(ctx context.Context, c *Client, r *tasks.CreateTaskRequest) error { return func(ctx context.Context, c *Client, info *TaskInfo) error {
id := desc.Digest id := desc.Digest
index, err := decodeIndex(ctx, c.ContentStore(), id) index, err := decodeIndex(ctx, c.ContentStore(), id)
if err != nil { if err != nil {
@ -92,7 +91,7 @@ func WithTaskCheckpoint(desc v1.Descriptor) NewTaskOpts {
} }
for _, m := range index.Manifests { for _, m := range index.Manifests {
if m.MediaType == images.MediaTypeContainerd1Checkpoint { if m.MediaType == images.MediaTypeContainerd1Checkpoint {
r.Checkpoint = &types.Descriptor{ info.Checkpoint = &types.Descriptor{
MediaType: m.MediaType, MediaType: m.MediaType,
Size_: m.Size, Size_: m.Size,
Digest: m.Digest, Digest: m.Digest,

View File

@ -1,14 +0,0 @@
package runcopts
import (
tasks "github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/containerd/typeurl"
)
func WithExit(r *tasks.CheckpointTaskRequest) error {
a, err := typeurl.MarshalAny(&CheckpointOptions{
Exit: true,
})
r.Options = a
return err
}

View File

@ -89,9 +89,11 @@ func (p *process) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
ContainerID: p.task.id, ContainerID: p.task.id,
ExecID: p.id, ExecID: p.id,
} }
var i IOCloseInfo
for _, o := range opts { for _, o := range opts {
o(r) o(&i)
} }
r.Stdin = i.Stdin
_, err := p.task.client.TaskService().CloseIO(ctx, r) _, err := p.task.client.TaskService().CloseIO(ctx, r)
return err return err
} }

View File

@ -10,7 +10,6 @@ import (
"strings" "strings"
"github.com/containerd/containerd/api/services/containers/v1" "github.com/containerd/containerd/api/services/containers/v1"
"github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/containerd/images" "github.com/containerd/containerd/images"
"github.com/containerd/containerd/typeurl" "github.com/containerd/containerd/typeurl"
"github.com/opencontainers/image-spec/specs-go/v1" "github.com/opencontainers/image-spec/specs-go/v1"
@ -285,12 +284,8 @@ func WithSpec(spec *specs.Spec) NewContainerOpts {
} }
func WithResources(resources *specs.LinuxResources) UpdateTaskOpts { func WithResources(resources *specs.LinuxResources) UpdateTaskOpts {
return func(ctx context.Context, client *Client, r *tasks.UpdateTaskRequest) error { return func(ctx context.Context, client *Client, r *UpdateTaskInfo) error {
any, err := typeurl.MarshalAny(resources) r.Resources = resources
if err != nil {
return err
}
r.Resources = any
return nil return nil
} }
} }

View File

@ -6,7 +6,6 @@ import (
"fmt" "fmt"
"github.com/containerd/containerd/api/services/containers/v1" "github.com/containerd/containerd/api/services/containers/v1"
tasks "github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/containerd/images" "github.com/containerd/containerd/images"
"github.com/containerd/containerd/typeurl" "github.com/containerd/containerd/typeurl"
"github.com/opencontainers/image-spec/specs-go/v1" "github.com/opencontainers/image-spec/specs-go/v1"
@ -87,12 +86,8 @@ func WithSpec(spec *specs.Spec) NewContainerOpts {
} }
func WithResources(resources *specs.WindowsResources) UpdateTaskOpts { func WithResources(resources *specs.WindowsResources) UpdateTaskOpts {
return func(ctx context.Context, client *Client, r *tasks.UpdateTaskRequest) error { return func(ctx context.Context, client *Client, r *UpdateTaskInfo) error {
any, err := typeurl.MarshalAny(resources) r.Resources = resources
if err != nil {
return err
}
r.Resources = any
return nil return nil
} }
} }

65
task.go
View File

@ -13,10 +13,13 @@ import (
"github.com/containerd/containerd/api/services/containers/v1" "github.com/containerd/containerd/api/services/containers/v1"
eventsapi "github.com/containerd/containerd/api/services/events/v1" eventsapi "github.com/containerd/containerd/api/services/events/v1"
"github.com/containerd/containerd/api/services/tasks/v1" "github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/containerd/api/types"
"github.com/containerd/containerd/content" "github.com/containerd/containerd/content"
"github.com/containerd/containerd/linux/runcopts"
"github.com/containerd/containerd/rootfs" "github.com/containerd/containerd/rootfs"
"github.com/containerd/containerd/runtime" "github.com/containerd/containerd/runtime"
"github.com/containerd/containerd/typeurl" "github.com/containerd/containerd/typeurl"
digest "github.com/opencontainers/go-digest"
"github.com/opencontainers/image-spec/specs-go/v1" "github.com/opencontainers/image-spec/specs-go/v1"
specs "github.com/opencontainers/runtime-spec/specs-go" specs "github.com/opencontainers/runtime-spec/specs-go"
"google.golang.org/grpc" "google.golang.org/grpc"
@ -34,13 +37,27 @@ const (
Pausing TaskStatus = "pausing" Pausing TaskStatus = "pausing"
) )
type IOCloserOpts func(*tasks.CloseIORequest) type IOCloseInfo struct {
Stdin bool
}
func WithStdinCloser(r *tasks.CloseIORequest) { type IOCloserOpts func(*IOCloseInfo)
func WithStdinCloser(r *IOCloseInfo) {
r.Stdin = true r.Stdin = true
} }
type CheckpointOpts func(*tasks.CheckpointTaskRequest) error type CheckpointTaskInfo struct {
ParentCheckpoint digest.Digest
Options interface{}
}
type CheckpointTaskOpts func(*CheckpointTaskInfo) error
type TaskInfo struct {
Checkpoint *types.Descriptor
Options interface{}
}
type Task interface { type Task interface {
Pid() uint32 Pid() uint32
@ -56,7 +73,7 @@ type Task interface {
CloseIO(context.Context, ...IOCloserOpts) error CloseIO(context.Context, ...IOCloserOpts) error
Resize(ctx context.Context, w, h uint32) error Resize(ctx context.Context, w, h uint32) error
IO() *IO IO() *IO
Checkpoint(context.Context, ...CheckpointOpts) (v1.Descriptor, error) Checkpoint(context.Context, ...CheckpointTaskOpts) (v1.Descriptor, error)
Update(context.Context, ...UpdateTaskOpts) error Update(context.Context, ...UpdateTaskOpts) error
} }
@ -217,9 +234,11 @@ func (t *task) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
r := &tasks.CloseIORequest{ r := &tasks.CloseIORequest{
ContainerID: t.id, ContainerID: t.id,
} }
var i IOCloseInfo
for _, o := range opts { for _, o := range opts {
o(r) o(&i)
} }
r.Stdin = i.Stdin
_, err := t.client.TaskService().CloseIO(ctx, r) _, err := t.client.TaskService().CloseIO(ctx, r)
return err return err
} }
@ -237,15 +256,24 @@ func (t *task) Resize(ctx context.Context, w, h uint32) error {
return err return err
} }
func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointOpts) (d v1.Descriptor, err error) { func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointTaskOpts) (d v1.Descriptor, err error) {
request := &tasks.CheckpointTaskRequest{ request := &tasks.CheckpointTaskRequest{
ContainerID: t.id, ContainerID: t.id,
} }
var i CheckpointTaskInfo
for _, o := range opts { for _, o := range opts {
if err := o(request); err != nil { if err := o(&i); err != nil {
return d, err return d, err
} }
} }
request.ParentCheckpoint = i.ParentCheckpoint
if i.Options != nil {
any, err := typeurl.MarshalAny(i.Options)
if err != nil {
return d, err
}
request.Options = any
}
// make sure we pause it and resume after all other filesystem operations are completed // make sure we pause it and resume after all other filesystem operations are completed
if err := t.Pause(ctx); err != nil { if err := t.Pause(ctx); err != nil {
return d, err return d, err
@ -272,17 +300,29 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointOpts) (d v1.Des
return t.writeIndex(ctx, &index) return t.writeIndex(ctx, &index)
} }
type UpdateTaskOpts func(context.Context, *Client, *tasks.UpdateTaskRequest) error type UpdateTaskInfo struct {
Resources interface{}
}
type UpdateTaskOpts func(context.Context, *Client, *UpdateTaskInfo) error
func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error { func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error {
request := &tasks.UpdateTaskRequest{ request := &tasks.UpdateTaskRequest{
ContainerID: t.id, ContainerID: t.id,
} }
var i UpdateTaskInfo
for _, o := range opts { for _, o := range opts {
if err := o(ctx, t.client, request); err != nil { if err := o(ctx, t.client, &i); err != nil {
return err return err
} }
} }
if i.Resources != nil {
any, err := typeurl.MarshalAny(i.Resources)
if err != nil {
return err
}
request.Resources = any
}
_, err := t.client.TaskService().Update(ctx, request) _, err := t.client.TaskService().Update(ctx, request)
return err return err
} }
@ -359,3 +399,10 @@ func writeContent(ctx context.Context, store content.Store, mediaType, ref strin
Size: size, Size: size,
}, nil }, nil
} }
func WithExit(r *CheckpointTaskInfo) error {
r.Options = &runcopts.CheckpointOptions{
Exit: true,
}
return nil
}