Update errdefs to 0.3.0

Uses the new github.com/containerd/errdefs/pkg module which is intended
to hold less stable utility functions separately from the stable
github.com/containerd/errdefs error types.

Includes temporary update to hcsshim until a release is cut there

Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
Derek McGowan
2024-10-18 15:57:27 -07:00
parent b291eb802b
commit 2f24aa00a5
61 changed files with 2054 additions and 529 deletions

View File

@@ -28,17 +28,19 @@ import (
"github.com/containerd/containerd/api/types"
"github.com/containerd/containerd/api/types/runc/options"
tasktypes "github.com/containerd/containerd/api/types/task"
"github.com/containerd/containerd/v2/core/containers"
"github.com/containerd/containerd/v2/core/images"
"github.com/containerd/containerd/v2/pkg/cio"
"github.com/containerd/containerd/v2/pkg/oci"
"github.com/containerd/containerd/v2/pkg/tracing"
"github.com/containerd/errdefs"
"github.com/containerd/errdefs/pkg/errgrpc"
"github.com/containerd/fifo"
"github.com/containerd/typeurl/v2"
ver "github.com/opencontainers/image-spec/specs-go"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/opencontainers/selinux/go-selinux/label"
"github.com/containerd/containerd/v2/core/containers"
"github.com/containerd/containerd/v2/core/images"
"github.com/containerd/containerd/v2/pkg/cio"
"github.com/containerd/containerd/v2/pkg/oci"
"github.com/containerd/containerd/v2/pkg/tracing"
)
const (
@@ -317,7 +319,7 @@ func (c *container) NewTask(ctx context.Context, ioCreate cio.Creator, opts ...N
)
response, err := c.client.TaskService().Create(ctx, request)
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
span.AddEvent("task created",
@@ -341,7 +343,7 @@ func (c *container) Update(ctx context.Context, opts ...UpdateContainerOpts) err
}
}
if _, err := c.client.ContainerService().Update(ctx, r); err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
return nil
}
@@ -387,7 +389,7 @@ func (c *container) Checkpoint(ctx context.Context, ref string, opts ...Checkpoi
// process remaining opts
for _, o := range opts {
if err := o(ctx, c.client, &info, index, copts); err != nil {
err = errdefs.FromGRPC(err)
err = errgrpc.ToNative(err)
if !errdefs.IsAlreadyExists(err) {
return nil, err
}
@@ -415,7 +417,7 @@ func (c *container) loadTask(ctx context.Context, ioAttach cio.Attach) (Task, er
ContainerID: c.id,
})
if err != nil {
err = errdefs.FromGRPC(err)
err = errgrpc.ToNative(err)
if errdefs.IsNotFound(err) {
return nil, fmt.Errorf("no running task found: %w", err)
}

View File

@@ -22,13 +22,14 @@ import (
"io"
containersapi "github.com/containerd/containerd/api/services/containers/v1"
"github.com/containerd/containerd/v2/core/containers"
"github.com/containerd/containerd/v2/pkg/protobuf"
ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types"
"github.com/containerd/errdefs"
"github.com/containerd/errdefs/pkg/errgrpc"
"github.com/containerd/typeurl/v2"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"github.com/containerd/containerd/v2/core/containers"
"github.com/containerd/containerd/v2/pkg/protobuf"
ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types"
)
type remoteContainers struct {
@@ -49,7 +50,7 @@ func (r *remoteContainers) Get(ctx context.Context, id string) (containers.Conta
ID: id,
})
if err != nil {
return containers.Container{}, errdefs.FromGRPC(err)
return containers.Container{}, errgrpc.ToNative(err)
}
return containerFromProto(resp.Container), nil
@@ -71,7 +72,7 @@ func (r *remoteContainers) list(ctx context.Context, filters ...string) ([]conta
Filters: filters,
})
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
return containersFromProto(resp.Containers), nil
}
@@ -83,7 +84,7 @@ func (r *remoteContainers) stream(ctx context.Context, filters ...string) ([]con
Filters: filters,
})
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
var containers []containers.Container
for {
@@ -97,7 +98,7 @@ func (r *remoteContainers) stream(ctx context.Context, filters ...string) ([]con
return nil, errStreamNotAvailable
}
}
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
select {
case <-ctx.Done():
@@ -113,7 +114,7 @@ func (r *remoteContainers) Create(ctx context.Context, container containers.Cont
Container: containerToProto(&container),
})
if err != nil {
return containers.Container{}, errdefs.FromGRPC(err)
return containers.Container{}, errgrpc.ToNative(err)
}
return containerFromProto(created.Container), nil
@@ -133,7 +134,7 @@ func (r *remoteContainers) Update(ctx context.Context, container containers.Cont
UpdateMask: updateMask,
})
if err != nil {
return containers.Container{}, errdefs.FromGRPC(err)
return containers.Container{}, errgrpc.ToNative(err)
}
return containerFromProto(updated.Container), nil
@@ -145,7 +146,7 @@ func (r *remoteContainers) Delete(ctx context.Context, id string) error {
ID: id,
})
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}

View File

@@ -21,10 +21,11 @@ import (
eventsapi "github.com/containerd/containerd/api/services/events/v1"
"github.com/containerd/containerd/api/types"
"github.com/containerd/errdefs/pkg/errgrpc"
"github.com/containerd/typeurl/v2"
"github.com/containerd/containerd/v2/core/events"
"github.com/containerd/containerd/v2/pkg/protobuf"
"github.com/containerd/errdefs"
"github.com/containerd/typeurl/v2"
)
// EventService handles the publish, forward and subscribe of events.
@@ -56,7 +57,7 @@ func (e *eventRemote) Publish(ctx context.Context, topic string, event events.Ev
Event: typeurl.MarshalProto(evt),
}
if _, err := e.client.Publish(ctx, req); err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
return nil
}
@@ -71,7 +72,7 @@ func (e *eventRemote) Forward(ctx context.Context, envelope *events.Envelope) er
},
}
if _, err := e.client.Forward(ctx, req); err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
return nil
}

View File

@@ -20,13 +20,14 @@ import (
"context"
imagesapi "github.com/containerd/containerd/api/services/images/v1"
"github.com/containerd/errdefs/pkg/errgrpc"
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/containerd/containerd/v2/core/images"
"github.com/containerd/containerd/v2/pkg/epoch"
"github.com/containerd/containerd/v2/pkg/oci"
"github.com/containerd/containerd/v2/pkg/protobuf"
ptypes "github.com/containerd/containerd/v2/pkg/protobuf/types"
"github.com/containerd/errdefs"
"google.golang.org/protobuf/types/known/timestamppb"
)
type remoteImages struct {
@@ -45,7 +46,7 @@ func (s *remoteImages) Get(ctx context.Context, name string) (images.Image, erro
Name: name,
})
if err != nil {
return images.Image{}, errdefs.FromGRPC(err)
return images.Image{}, errgrpc.ToNative(err)
}
return imageFromProto(resp.Image), nil
@@ -56,7 +57,7 @@ func (s *remoteImages) List(ctx context.Context, filters ...string) ([]images.Im
Filters: filters,
})
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
return imagesFromProto(resp.Images), nil
@@ -71,7 +72,7 @@ func (s *remoteImages) Create(ctx context.Context, image images.Image) (images.I
}
created, err := s.client.Create(ctx, req)
if err != nil {
return images.Image{}, errdefs.FromGRPC(err)
return images.Image{}, errgrpc.ToNative(err)
}
return imageFromProto(created.Image), nil
@@ -93,7 +94,7 @@ func (s *remoteImages) Update(ctx context.Context, image images.Image, fieldpath
}
updated, err := s.client.Update(ctx, req)
if err != nil {
return images.Image{}, errdefs.FromGRPC(err)
return images.Image{}, errgrpc.ToNative(err)
}
return imageFromProto(updated.Image), nil
@@ -114,7 +115,7 @@ func (s *remoteImages) Delete(ctx context.Context, name string, opts ...images.D
req.Target = oci.DescriptorToProto(*do.Target)
}
_, err := s.client.Delete(ctx, req)
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func imageToProto(image *images.Image) *imagesapi.Image {

View File

@@ -21,9 +21,10 @@ import (
"strings"
api "github.com/containerd/containerd/api/services/namespaces/v1"
"github.com/containerd/errdefs/pkg/errgrpc"
"github.com/containerd/containerd/v2/pkg/namespaces"
"github.com/containerd/containerd/v2/pkg/protobuf/types"
"github.com/containerd/errdefs"
)
// NewNamespaceStoreFromClient returns a new namespace store
@@ -45,7 +46,7 @@ func (r *remoteNamespaces) Create(ctx context.Context, namespace string, labels
_, err := r.client.Create(ctx, &req)
if err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
return nil
@@ -57,7 +58,7 @@ func (r *remoteNamespaces) Labels(ctx context.Context, namespace string) (map[st
resp, err := r.client.Get(ctx, &req)
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
return resp.Namespace.Labels, nil
@@ -77,7 +78,7 @@ func (r *remoteNamespaces) SetLabel(ctx context.Context, namespace, key, value s
_, err := r.client.Update(ctx, &req)
if err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
return nil
@@ -88,7 +89,7 @@ func (r *remoteNamespaces) List(ctx context.Context) ([]string, error) {
resp, err := r.client.List(ctx, &req)
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
var namespaces []string
@@ -114,7 +115,7 @@ func (r *remoteNamespaces) Delete(ctx context.Context, namespace string, opts ..
}
_, err := r.client.Delete(ctx, &req)
if err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
return nil

View File

@@ -24,10 +24,12 @@ import (
"time"
"github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/errdefs"
"github.com/containerd/errdefs/pkg/errgrpc"
"github.com/containerd/containerd/v2/pkg/cio"
"github.com/containerd/containerd/v2/pkg/protobuf"
"github.com/containerd/containerd/v2/pkg/tracing"
"github.com/containerd/errdefs"
)
// Process represents a system process
@@ -134,7 +136,7 @@ func (p *process) Start(ctx context.Context) error {
p.io.Wait()
p.io.Close()
}
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
span.SetAttributes(tracing.Attribute("process.pid", int(r.Pid)))
p.pid = r.Pid
@@ -160,7 +162,7 @@ func (p *process) Kill(ctx context.Context, s syscall.Signal, opts ...KillOpts)
ExecID: p.id,
All: i.All,
})
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func (p *process) Wait(ctx context.Context) (<-chan ExitStatus, error) {
@@ -206,7 +208,7 @@ func (p *process) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
}
r.Stdin = i.Stdin
_, err := p.task.client.TaskService().CloseIO(ctx, r)
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func (p *process) IO() cio.IO {
@@ -224,7 +226,7 @@ func (p *process) Resize(ctx context.Context, w, h uint32) error {
Height: h,
ExecID: p.id,
})
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func (p *process) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (*ExitStatus, error) {
@@ -250,7 +252,7 @@ func (p *process) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (*ExitS
ExecID: p.id,
})
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
if p.io != nil {
p.io.Cancel()
@@ -266,7 +268,7 @@ func (p *process) Status(ctx context.Context) (Status, error) {
ExecID: p.id,
})
if err != nil {
return Status{}, errdefs.FromGRPC(err)
return Status{}, errgrpc.ToNative(err)
}
status := ProcessStatus(strings.ToLower(r.Process.Status.String()))
exitStatus := r.Process.ExitStatus

View File

@@ -29,6 +29,14 @@ import (
"github.com/containerd/containerd/api/services/tasks/v1"
"github.com/containerd/containerd/api/types"
"github.com/containerd/containerd/api/types/runc/options"
"github.com/containerd/errdefs"
"github.com/containerd/errdefs/pkg/errgrpc"
"github.com/containerd/typeurl/v2"
digest "github.com/opencontainers/go-digest"
is "github.com/opencontainers/image-spec/specs-go"
v1 "github.com/opencontainers/image-spec/specs-go/v1"
specs "github.com/opencontainers/runtime-spec/specs-go"
"github.com/containerd/containerd/v2/core/content"
"github.com/containerd/containerd/v2/core/diff"
"github.com/containerd/containerd/v2/core/images"
@@ -40,12 +48,6 @@ import (
"github.com/containerd/containerd/v2/pkg/rootfs"
"github.com/containerd/containerd/v2/pkg/tracing"
"github.com/containerd/containerd/v2/plugins"
"github.com/containerd/errdefs"
"github.com/containerd/typeurl/v2"
digest "github.com/opencontainers/go-digest"
is "github.com/opencontainers/image-spec/specs-go"
v1 "github.com/opencontainers/image-spec/specs-go/v1"
specs "github.com/opencontainers/runtime-spec/specs-go"
)
// UnknownExitStatus is returned when containerd is unable to
@@ -223,7 +225,7 @@ func (t *task) Start(ctx context.Context) error {
t.io.Cancel()
t.io.Close()
}
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
span.SetAttributes(tracing.Attribute("task.pid", r.Pid))
t.pid = r.Pid
@@ -254,7 +256,7 @@ func (t *task) Kill(ctx context.Context, s syscall.Signal, opts ...KillOpts) err
All: i.All,
})
if err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
return nil
}
@@ -267,7 +269,7 @@ func (t *task) Pause(ctx context.Context) error {
_, err := t.client.TaskService().Pause(ctx, &tasks.PauseTaskRequest{
ContainerID: t.id,
})
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func (t *task) Resume(ctx context.Context) error {
@@ -278,7 +280,7 @@ func (t *task) Resume(ctx context.Context) error {
_, err := t.client.TaskService().Resume(ctx, &tasks.ResumeTaskRequest{
ContainerID: t.id,
})
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func (t *task) Status(ctx context.Context) (Status, error) {
@@ -286,7 +288,7 @@ func (t *task) Status(ctx context.Context) (Status, error) {
ContainerID: t.id,
})
if err != nil {
return Status{}, errdefs.FromGRPC(err)
return Status{}, errgrpc.ToNative(err)
}
status := ProcessStatus(strings.ToLower(r.Process.Status.String()))
exitStatus := r.Process.ExitStatus
@@ -377,7 +379,7 @@ func (t *task) Delete(ctx context.Context, opts ...ProcessDeleteOpts) (*ExitStat
ContainerID: t.id,
})
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
// Only cleanup the IO after a successful Delete
if t.io != nil {
@@ -423,7 +425,7 @@ func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreat
i.Cancel()
i.Wait()
i.Close()
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
return &process{
id: id,
@@ -437,7 +439,7 @@ func (t *task) Pids(ctx context.Context) ([]ProcessInfo, error) {
ContainerID: t.id,
})
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
var processList []ProcessInfo
for _, p := range response.Processes {
@@ -464,7 +466,7 @@ func (t *task) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
r.Stdin = i.Stdin
_, err := t.client.TaskService().CloseIO(ctx, r)
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func (t *task) IO() cio.IO {
@@ -481,7 +483,7 @@ func (t *task) Resize(ctx context.Context, w, h uint32) error {
Width: w,
Height: h,
})
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
// NOTE: Checkpoint supports to dump task information to a directory, in this way, an empty
@@ -613,7 +615,7 @@ func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error {
request.Annotations = i.Annotations
}
_, err := t.client.TaskService().Update(ctx, request)
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
func (t *task) LoadProcess(ctx context.Context, id string, ioAttach cio.Attach) (Process, error) {
@@ -625,7 +627,7 @@ func (t *task) LoadProcess(ctx context.Context, id string, ioAttach cio.Attach)
ExecID: id,
})
if err != nil {
err = errdefs.FromGRPC(err)
err = errgrpc.ToNative(err)
if errdefs.IsNotFound(err) {
return nil, fmt.Errorf("no running process found: %w", err)
}
@@ -651,7 +653,7 @@ func (t *task) Metrics(ctx context.Context) (*types.Metric, error) {
},
})
if err != nil {
return nil, errdefs.FromGRPC(err)
return nil, errgrpc.ToNative(err)
}
if response.Metrics == nil {
@@ -668,7 +670,7 @@ func (t *task) Metrics(ctx context.Context) (*types.Metric, error) {
func (t *task) checkpointTask(ctx context.Context, index *v1.Index, request *tasks.CheckpointTaskRequest) error {
response, err := t.client.TaskService().Checkpoint(ctx, request)
if err != nil {
return errdefs.FromGRPC(err)
return errgrpc.ToNative(err)
}
// NOTE: response.Descriptors can be an empty slice if checkpoint image is jumped
// add the checkpoint descriptors to the index