Revert "Exec: use ErrorConmonRead"

This reverts commit d3d97a25e8c87cf741b2e24ac01ef84962137106.

This does not resolve the issues we expected it would, and has
some unexpected side effects with the upcoming exec rework.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
This commit is contained in:
Matthew Heon
2020-03-09 09:48:47 -04:00
parent 6be87b2186
commit ffce869daa
3 changed files with 5 additions and 13 deletions

View File

@ -297,9 +297,7 @@ func (c *Container) Exec(tty, privileged bool, env map[string]string, cmd []stri
// Conmon will pass a non-zero exit code from the runtime as a pid here. // Conmon will pass a non-zero exit code from the runtime as a pid here.
// we differentiate a pid with an exit code by sending it as negative, so reverse // we differentiate a pid with an exit code by sending it as negative, so reverse
// that change and return the exit code the runtime failed with. // that change and return the exit code the runtime failed with.
// Make sure the value is not ErrorConmonRead, as that is a podman set bogus value if pid < 0 {
// and not sent by conmon (and thus has no special meaning)
if pid < 0 && pid != define.ErrorConmonRead {
ec = -1 * pid ec = -1 * pid
} }
return ec, err return ec, err

View File

@ -1,7 +1,6 @@
package define package define
import ( import (
"math"
"strings" "strings"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -18,11 +17,6 @@ const (
ExecErrorCodeCannotInvoke = 126 ExecErrorCodeCannotInvoke = 126
// ExecErrorCodeNotFound is the error code to return when a command cannot be found // ExecErrorCodeNotFound is the error code to return when a command cannot be found
ExecErrorCodeNotFound = 127 ExecErrorCodeNotFound = 127
// ErrorConmonRead is a bogus value that can neither be a valid PID or exit code. It is
// used because conmon will send a negative value when sending a PID back over a pipe FD
// to signify something went wrong in the runtime. We need to differentiate between that
// value and a failure on the podman side of reading that value. Thus, we use ErrorConmonRead
ErrorConmonRead = math.MinInt32 - 1
) )
// TranslateExecErrorToExitCode takes an error and checks whether it // TranslateExecErrorToExitCode takes an error and checks whether it

View File

@ -1557,7 +1557,7 @@ func readConmonPipeData(pipe *os.File, ociLog string) DataAndErr {
ch <- syncStruct{si: si} ch <- syncStruct{si: si}
}() }()
data := define.ErrorConmonRead data := -1
select { select {
case ss := <-ch: case ss := <-ch:
if ss.err != nil { if ss.err != nil {
@ -1567,14 +1567,14 @@ func readConmonPipeData(pipe *os.File, ociLog string) DataAndErr {
var ociErr ociError var ociErr ociError
if err := json.Unmarshal(ociLogData, &ociErr); err == nil { if err := json.Unmarshal(ociLogData, &ociErr); err == nil {
return DataAndErr{ return DataAndErr{
data: data, data: -1,
err: getOCIRuntimeError(ociErr.Msg), err: getOCIRuntimeError(ociErr.Msg),
} }
} }
} }
} }
return DataAndErr{ return DataAndErr{
data: data, data: -1,
err: errors.Wrapf(ss.err, "container create failed (no logs from conmon)"), err: errors.Wrapf(ss.err, "container create failed (no logs from conmon)"),
} }
} }
@ -1607,7 +1607,7 @@ func readConmonPipeData(pipe *os.File, ociLog string) DataAndErr {
data = ss.si.Data data = ss.si.Data
case <-time.After(define.ContainerCreateTimeout): case <-time.After(define.ContainerCreateTimeout):
return DataAndErr{ return DataAndErr{
data: data, data: -1,
err: errors.Wrapf(define.ErrInternal, "container creation timeout"), err: errors.Wrapf(define.ErrInternal, "container creation timeout"),
} }
} }