diff options
author | Fabricio Voznika <fvoznika@google.com> | 2021-01-12 17:50:33 -0800 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-01-12 17:54:10 -0800 |
commit | 8b0f0b4d11e0938eec8da411323b2ce35976ab56 (patch) | |
tree | aab8e37ca51133da5bfa4a055ea0dfa0bda514cf /pkg/shim/v2/epoll.go | |
parent | be2b9d75d75e0e7371cd868589d57f4ddee44781 (diff) |
Delete shim v1
gvisor-containerd-shim is not compatible with containerd 1.1 or earlier.
Starting from containerd 1.2, shim v2 is the preferred interface.
PiperOrigin-RevId: 351485556
Diffstat (limited to 'pkg/shim/v2/epoll.go')
-rw-r--r-- | pkg/shim/v2/epoll.go | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/pkg/shim/v2/epoll.go b/pkg/shim/v2/epoll.go deleted file mode 100644 index 41232cca8..000000000 --- a/pkg/shim/v2/epoll.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2018 The containerd Authors. -// Copyright 2018 The gVisor Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build linux - -package v2 - -import ( - "context" - "fmt" - "sync" - - "github.com/containerd/cgroups" - "github.com/containerd/containerd/events" - "github.com/containerd/containerd/runtime" - "golang.org/x/sys/unix" -) - -func newOOMEpoller(publisher events.Publisher) (*epoller, error) { - fd, err := unix.EpollCreate1(unix.EPOLL_CLOEXEC) - if err != nil { - return nil, err - } - return &epoller{ - fd: fd, - publisher: publisher, - set: make(map[uintptr]*item), - }, nil -} - -type epoller struct { - mu sync.Mutex - - fd int - publisher events.Publisher - set map[uintptr]*item -} - -type item struct { - id string - cg cgroups.Cgroup -} - -func (e *epoller) Close() error { - return unix.Close(e.fd) -} - -func (e *epoller) run(ctx context.Context) { - var events [128]unix.EpollEvent - for { - select { - case <-ctx.Done(): - e.Close() - return - default: - n, err := unix.EpollWait(e.fd, events[:], -1) - if err != nil { - if err == unix.EINTR || err == unix.EAGAIN { - continue - } - // Should not happen. - panic(fmt.Errorf("cgroups: epoll wait: %w", err)) - } - for i := 0; i < n; i++ { - e.process(ctx, uintptr(events[i].Fd)) - } - } - } -} - -func (e *epoller) add(id string, cg cgroups.Cgroup) error { - e.mu.Lock() - defer e.mu.Unlock() - fd, err := cg.OOMEventFD() - if err != nil { - return err - } - e.set[fd] = &item{ - id: id, - cg: cg, - } - event := unix.EpollEvent{ - Fd: int32(fd), - Events: unix.EPOLLHUP | unix.EPOLLIN | unix.EPOLLERR, - } - return unix.EpollCtl(e.fd, unix.EPOLL_CTL_ADD, int(fd), &event) -} - -func (e *epoller) process(ctx context.Context, fd uintptr) { - flush(fd) - e.mu.Lock() - i, ok := e.set[fd] - if !ok { - e.mu.Unlock() - return - } - e.mu.Unlock() - if i.cg.State() == cgroups.Deleted { - e.mu.Lock() - delete(e.set, fd) - e.mu.Unlock() - unix.Close(int(fd)) - return - } - if err := e.publisher.Publish(ctx, runtime.TaskOOMEventTopic, &TaskOOM{ - ContainerID: i.id, - }); err != nil { - // Should not happen. - panic(fmt.Errorf("publish OOM event: %w", err)) - } -} - -func flush(fd uintptr) error { - var buf [8]byte - _, err := unix.Read(int(fd), buf[:]) - return err -} |