mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-05-02 13:44:33 +00:00
shim: exit out of oom polling if unimplemented
[ port from runtime commit 86f581068eb9dc4b6862c7415cdc912e111177dd ] This exits out of polling for OOM events if the getOOMEvent method is unimplemented. Signed-off-by: Alex Price <aprice@atlassian.com> Signed-off-by: Peng Tao <bergwolf@hyper.sh>
This commit is contained in:
parent
9f8d1baa57
commit
7e250f29e9
@ -60,3 +60,11 @@ func isNotFound(err error) bool {
|
|||||||
return err == vc.ErrNoSuchContainer || err == syscall.ENOENT ||
|
return err == vc.ErrNoSuchContainer || err == syscall.ENOENT ||
|
||||||
strings.Contains(err.Error(), "not found") || strings.Contains(err.Error(), "not exist")
|
strings.Contains(err.Error(), "not found") || strings.Contains(err.Error(), "not exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isGRPCErrorCode(code codes.Code, err error) bool {
|
||||||
|
s, ok := status.FromError(err)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return s != nil && s.Code() == code
|
||||||
|
}
|
||||||
|
@ -6,11 +6,14 @@
|
|||||||
package containerdshim
|
package containerdshim
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestToGRPC(t *testing.T) {
|
func TestToGRPC(t *testing.T) {
|
||||||
@ -27,3 +30,10 @@ func TestToGRPC(t *testing.T) {
|
|||||||
assert.True(isGRPCError(err))
|
assert.True(isGRPCError(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIsGRPCErrorCode(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
assert.True(isGRPCErrorCode(codes.Unimplemented, status.New(codes.Unimplemented, "foobar").Err()))
|
||||||
|
assert.False(isGRPCErrorCode(codes.Unimplemented, errors.New("foobar")))
|
||||||
|
}
|
||||||
|
@ -37,8 +37,9 @@ func startContainer(ctx context.Context, s *service, c *container) error {
|
|||||||
}
|
}
|
||||||
go watchSandbox(s)
|
go watchSandbox(s)
|
||||||
|
|
||||||
// Start watching for oom events
|
// We don't rely on the context passed to startContainer as it can be cancelled after
|
||||||
go watchOOMEvents(ctx, s)
|
// this rpc call.
|
||||||
|
go watchOOMEvents(s.ctx, s)
|
||||||
} else {
|
} else {
|
||||||
_, err := s.sandbox.StartContainer(c.id)
|
_, err := s.sandbox.StartContainer(c.id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/containerd/containerd/api/types/task"
|
"github.com/containerd/containerd/api/types/task"
|
||||||
"github.com/containerd/containerd/mount"
|
"github.com/containerd/containerd/mount"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
)
|
)
|
||||||
|
|
||||||
func wait(s *service, c *container, execID string) (int32, error) {
|
func wait(s *service, c *container, execID string) (int32, error) {
|
||||||
@ -141,7 +142,12 @@ func watchOOMEvents(ctx context.Context, s *service) {
|
|||||||
default:
|
default:
|
||||||
containerID, err := s.sandbox.GetOOMEvent()
|
containerID, err := s.sandbox.GetOOMEvent()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.WithError(err).Warn("failed to get oom event from sandbox")
|
logrus.WithField("sandbox", s.sandbox.ID()).WithError(err).Warn("failed to get OOM event from sandbox")
|
||||||
|
// If the GetOOMEvent call is not implemented, then the agent is most likely an older version,
|
||||||
|
// stop attempting to get OOM events.
|
||||||
|
if isGRPCErrorCode(codes.Unimplemented, err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user