summaryrefslogtreecommitdiffhomepage
path: root/pkg/shim/v2/epoll.go
diff options
context:
space:
mode:
authorFabricio Voznika <fvoznika@google.com>2021-01-12 17:50:33 -0800
committergVisor bot <gvisor-bot@google.com>2021-01-12 17:54:10 -0800
commit8b0f0b4d11e0938eec8da411323b2ce35976ab56 (patch)
treeaab8e37ca51133da5bfa4a055ea0dfa0bda514cf /pkg/shim/v2/epoll.go
parentbe2b9d75d75e0e7371cd868589d57f4ddee44781 (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.go129
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
-}