Skip to content

Commit f8f9585

Browse files
authored
Merge pull request #457 from kzys/duplicate-exec
Use codes.AlreadyExists correctly on Exec()
2 parents 0bd358f + a39e139 commit f8f9585

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

agent/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func (ts *TaskService) Create(requestCtx context.Context, req *taskAPI.CreateTas
255255

256256
resp, err := ts.taskManager.CreateTask(requestCtx, req, ts.runcService, ioConnectorSet)
257257
if err != nil {
258-
return nil, errors.Wrap(err, "failed to create runc shim")
258+
return nil, err
259259
}
260260

261261
logger.WithField("pid", resp.Pid).Debugf("create succeeded")

internal/vm/task.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222
"github.com/gogo/protobuf/types"
2323
"github.com/pkg/errors"
2424
"github.com/sirupsen/logrus"
25+
"google.golang.org/grpc/codes"
26+
"google.golang.org/grpc/status"
2527
)
2628

2729
const (
@@ -110,7 +112,7 @@ func (m *taskManager) newProc(taskID, execID string) (*vmProc, error) {
110112

111113
_, procExists := m.tasks[taskID][execID]
112114
if procExists {
113-
return nil, errors.Errorf("cannot add duplicate exec %q to task %q", execID, taskID)
115+
return nil, status.Errorf(codes.AlreadyExists, "exec %q already exists", execID)
114116
}
115117

116118
proc := &vmProc{}

runtime/service_integ_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/containerd/containerd/api/events"
3434
"github.com/containerd/containerd/cio"
3535
"github.com/containerd/containerd/containers"
36+
"github.com/containerd/containerd/errdefs"
3637
"github.com/containerd/containerd/namespaces"
3738
"github.com/containerd/containerd/oci"
3839
"github.com/containerd/containerd/pkg/ttrpcutil"
@@ -1666,12 +1667,21 @@ func TestExec_Isolated(t *testing.T) {
16661667
var execStdout bytes.Buffer
16671668
var execStderr bytes.Buffer
16681669

1669-
taskExec, err := task.Exec(ctx, "exec", &specs.Process{
1670+
const execID = "date"
1671+
taskExec, err := task.Exec(ctx, execID, &specs.Process{
16701672
Args: []string{"/bin/date"},
16711673
Cwd: "/",
16721674
}, cio.NewCreator(cio.WithStreams(os.Stdin, &execStdout, &execStderr)))
16731675
require.NoError(t, err)
16741676

1677+
// Intentionally reuse execID.
1678+
_, err = task.Exec(ctx, execID, &specs.Process{
1679+
Args: []string{"/bin/date"},
1680+
Cwd: "/",
1681+
}, cio.NewCreator(cio.WithStreams(os.Stdin, ioutil.Discard, ioutil.Discard)))
1682+
assert.Error(t, err)
1683+
assert.Truef(t, errdefs.IsAlreadyExists(err), "%q's cause must be %q", err, errdefs.ErrAlreadyExists)
1684+
16751685
execExitCh, err := taskExec.Wait(ctx)
16761686
require.NoError(t, err, "failed to wait on exec %s", "exec")
16771687

0 commit comments

Comments
 (0)