Update deps with sys/unix changes

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby
2017-04-10 13:07:41 -07:00
parent 3db1ea8d07
commit 9e1acba19f
92 changed files with 1766 additions and 1325 deletions

View File

@@ -11,6 +11,8 @@ import (
"strings"
"syscall"
"golang.org/x/sys/unix"
specs "github.com/opencontainers/runtime-spec/specs-go"
)
@@ -153,12 +155,12 @@ func (m *memoryController) OOMEventFD(path string) (uintptr, error) {
return 0, err
}
defer f.Close()
fd, _, serr := syscall.RawSyscall(syscall.SYS_EVENTFD2, 0, syscall.FD_CLOEXEC, 0)
fd, _, serr := unix.RawSyscall(unix.SYS_EVENTFD2, 0, unix.FD_CLOEXEC, 0)
if serr != 0 {
return 0, serr
}
if err := writeEventFD(root, f.Fd(), fd); err != nil {
syscall.Close(int(fd))
unix.Close(int(fd))
return 0, err
}
return fd, nil
@@ -284,7 +286,7 @@ func getMemorySettings(resources *specs.LinuxResources) []memorySettings {
func checkEBUSY(err error) error {
if pathErr, ok := err.(*os.PathError); ok {
if errNo, ok := pathErr.Err.(syscall.Errno); ok {
if errNo == syscall.EBUSY {
if errNo == unix.EBUSY {
return fmt.Errorf(
"failed to set memory.kmem.limit_in_bytes, because either tasks have already joined this cgroup or it has children")
}

View File

@@ -11,7 +11,10 @@ import (
"github.com/prometheus/client_golang/prometheus"
)
var ErrAlreadyCollected = errors.New("cgroup is already being collected")
var (
ErrAlreadyCollected = errors.New("cgroup is already being collected")
ErrCgroupNotExists = errors.New("cgroup does not exist in the collector")
)
// New registers the Collector with the provided namespace and returns it so
// that cgroups can be added for collection
@@ -80,6 +83,18 @@ func (c *Collector) Add(id string, cg cgroups.Cgroup) error {
return nil
}
// Get returns the cgroup that is being collected under the provided id
// returns ErrCgroupNotExists if the id is not being collected
func (c *Collector) Get(id string) (cgroups.Cgroup, error) {
c.mu.Lock()
defer c.mu.Unlock()
cg, ok := c.cgroups[id]
if !ok {
return nil, ErrCgroupNotExists
}
return cg, nil
}
// Remove removes the provided cgroup by id from the collector
func (c *Collector) Remove(id string) {
c.mu.Lock()

View File

@@ -2,7 +2,8 @@ package prometheus
import (
"sync"
"syscall"
"golang.org/x/sys/unix"
"github.com/Sirupsen/logrus"
"github.com/crosbymichael/cgroups"
@@ -10,7 +11,7 @@ import (
)
func NewOOMCollector(ns *metrics.Namespace) (*OOMCollector, error) {
fd, err := syscall.EpollCreate1(syscall.EPOLL_CLOEXEC)
fd, err := unix.EpollCreate1(unix.EPOLL_CLOEXEC)
if err != nil {
return nil, err
}
@@ -49,11 +50,11 @@ func (o *OOMCollector) Add(id string, cg cgroups.Cgroup) error {
}
// set the gauge's default value
o.memoryOOM.WithValues(id).Set(0)
event := syscall.EpollEvent{
event := unix.EpollEvent{
Fd: int32(fd),
Events: syscall.EPOLLHUP | syscall.EPOLLIN | syscall.EPOLLERR,
Events: unix.EPOLLHUP | unix.EPOLLIN | unix.EPOLLERR,
}
if err := syscall.EpollCtl(o.fd, syscall.EPOLL_CTL_ADD, int(fd), &event); err != nil {
if err := unix.EpollCtl(o.fd, unix.EPOLL_CTL_ADD, int(fd), &event); err != nil {
return err
}
return nil
@@ -61,15 +62,15 @@ func (o *OOMCollector) Add(id string, cg cgroups.Cgroup) error {
// Close closes the epoll fd
func (o *OOMCollector) Close() error {
return syscall.Close(int(o.fd))
return unix.Close(int(o.fd))
}
func (o *OOMCollector) start() {
var events [128]syscall.EpollEvent
var events [128]unix.EpollEvent
for {
n, err := syscall.EpollWait(o.fd, events[:], -1)
n, err := unix.EpollWait(o.fd, events[:], -1)
if err != nil {
if err == syscall.EINTR {
if err == unix.EINTR {
continue
}
logrus.WithField("error", err).Fatal("cgroups: epoll wait")
@@ -97,7 +98,7 @@ func (o *OOMCollector) process(fd uintptr, event uint32) {
o.mu.Lock()
delete(o.set, fd)
o.mu.Unlock()
syscall.Close(int(fd))
unix.Close(int(fd))
return
}
o.memoryOOM.WithValues(info.id).Inc(1)
@@ -105,6 +106,6 @@ func (o *OOMCollector) process(fd uintptr, event uint32) {
func flush(fd uintptr) error {
buf := make([]byte, 8)
_, err := syscall.Read(int(fd), buf)
_, err := unix.Read(int(fd), buf)
return err
}

View File

@@ -5,15 +5,16 @@ import "C"
import (
"os"
"syscall"
"unsafe"
"golang.org/x/sys/unix"
)
// NewPty creates a new pty pair
// The master is returned as the first console and a string
// with the path to the pty slave is returned as the second
func NewPty() (Console, string, error) {
f, err := os.OpenFile("/dev/ptmx", syscall.O_RDWR|syscall.O_NOCTTY|syscall.O_CLOEXEC, 0)
f, err := os.OpenFile("/dev/ptmx", unix.O_RDWR|unix.O_NOCTTY|unix.O_CLOEXEC, 0)
if err != nil {
return nil, "", err
}
@@ -34,7 +35,7 @@ func NewPty() (Console, string, error) {
type master struct {
f *os.File
termios *syscall.Termios
termios *unix.Termios
}
func (m *master) Read(b []byte) (int, error) {
@@ -52,7 +53,7 @@ func (m *master) Close() error {
func (m *master) Resize(ws WinSize) error {
return ioctl(
m.f.Fd(),
uintptr(syscall.TIOCSWINSZ),
uintptr(unix.TIOCSWINSZ),
uintptr(unsafe.Pointer(&ws)),
)
}
@@ -73,7 +74,7 @@ func (m *master) Reset() error {
}
func (m *master) SetRaw() error {
m.termios = &syscall.Termios{}
m.termios = &unix.Termios{}
if err := tcget(m.f.Fd(), m.termios); err != nil {
return err
}
@@ -87,7 +88,7 @@ func (m *master) Size() (WinSize, error) {
var ws WinSize
if err := ioctl(
m.f.Fd(),
uintptr(syscall.TIOCGWINSZ),
uintptr(unix.TIOCGWINSZ),
uintptr(unsafe.Pointer(&ws)),
); err != nil {
return ws, err
@@ -97,7 +98,7 @@ func (m *master) Size() (WinSize, error) {
// checkConsole checks if the provided file is a console
func checkConsole(f *os.File) error {
var termios syscall.Termios
var termios unix.Termios
if tcget(f.Fd(), &termios) != nil {
return ErrNotAConsole
}

View File

@@ -5,20 +5,21 @@ package console
import (
"fmt"
"os"
"syscall"
"unsafe"
"golang.org/x/sys/unix"
)
func tcget(fd uintptr, p *syscall.Termios) error {
return ioctl(fd, syscall.TCGETS, uintptr(unsafe.Pointer(p)))
func tcget(fd uintptr, p *unix.Termios) error {
return ioctl(fd, unix.TCGETS, uintptr(unsafe.Pointer(p)))
}
func tcset(fd uintptr, p *syscall.Termios) error {
return ioctl(fd, syscall.TCSETS, uintptr(unsafe.Pointer(p)))
func tcset(fd uintptr, p *unix.Termios) error {
return ioctl(fd, unix.TCSETS, uintptr(unsafe.Pointer(p)))
}
func ioctl(fd, flag, data uintptr) error {
if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, flag, data); err != 0 {
if _, _, err := unix.Syscall(unix.SYS_IOCTL, fd, flag, data); err != 0 {
return err
}
return nil
@@ -28,13 +29,13 @@ func ioctl(fd, flag, data uintptr) error {
// unlockpt should be called before opening the slave side of a pty.
func unlockpt(f *os.File) error {
var u int32
return ioctl(f.Fd(), syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u)))
return ioctl(f.Fd(), unix.TIOCSPTLCK, uintptr(unsafe.Pointer(&u)))
}
// ptsname retrieves the name of the first available pts for the given master.
func ptsname(f *os.File) (string, error) {
var n int32
if err := ioctl(f.Fd(), syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))); err != nil {
if err := ioctl(f.Fd(), unix.TIOCGPTN, uintptr(unsafe.Pointer(&n))); err != nil {
return "", err
}
return fmt.Sprintf("/dev/pts/%d", n), nil
@@ -42,11 +43,11 @@ func ptsname(f *os.File) (string, error) {
func saneTerminal(f *os.File) error {
// Go doesn't have a wrapper for any of the termios ioctls.
var termios syscall.Termios
var termios unix.Termios
if err := tcget(f.Fd(), &termios); err != nil {
return err
}
// Set -onlcr so we don't have to deal with \r.
termios.Oflag &^= syscall.ONLCR
termios.Oflag &^= unix.ONLCR
return tcset(f.Fd(), &termios)
}

View File

@@ -1,3 +1,5 @@
// +build cgo
package runc
import (
@@ -11,7 +13,7 @@ import (
// NewConsoleSocket creates a new unix socket at the provided path to accept a
// pty master created by runc for use by the container
func NewConsoleSocket(path string) (*ConsoleSocket, error) {
func NewConsoleSocket(path string) (*Socket, error) {
abs, err := filepath.Abs(path)
if err != nil {
return nil, err
@@ -20,25 +22,25 @@ func NewConsoleSocket(path string) (*ConsoleSocket, error) {
if err != nil {
return nil, err
}
return &ConsoleSocket{
return &Socket{
l: l,
path: abs,
}, nil
}
// ConsoleSocket is a unix socket that accepts the pty master created by runc
type ConsoleSocket struct {
// Socket is a unix socket that accepts the pty master created by runc
type Socket struct {
path string
l net.Listener
}
// Path returns the path to the unix socket on disk
func (c *ConsoleSocket) Path() string {
func (c *Socket) Path() string {
return c.path
}
// ReceiveMaster blocks until the socket receives the pty master
func (c *ConsoleSocket) ReceiveMaster() (console.Console, error) {
func (c *Socket) ReceiveMaster() (console.Console, error) {
conn, err := c.l.Accept()
if err != nil {
return nil, err
@@ -60,14 +62,6 @@ func (c *ConsoleSocket) ReceiveMaster() (console.Console, error) {
}
// Close closes the unix socket
func (c *ConsoleSocket) Close() error {
func (c *Socket) Close() error {
return c.l.Close()
}
// WinSize specifies the console size
type WinSize struct {
// Width of the console
Width uint16
// Height of the console
Height uint16
}

View File

@@ -4,7 +4,8 @@ import (
"io"
"os"
"os/exec"
"syscall"
"golang.org/x/sys/unix"
)
type IO interface {
@@ -60,10 +61,10 @@ func newPipe(uid, gid int) (*pipe, error) {
if err != nil {
return nil, err
}
if err := syscall.Fchown(int(r.Fd()), uid, gid); err != nil {
if err := unix.Fchown(int(r.Fd()), uid, gid); err != nil {
return nil, err
}
if err := syscall.Fchown(int(w.Fd()), uid, gid); err != nil {
if err := unix.Fchown(int(w.Fd()), uid, gid); err != nil {
return nil, err
}
return &pipe{

View File

@@ -24,7 +24,7 @@ const (
JSON Format = "json"
Text Format = "text"
// DefaultCommand is the default command for Runc
DefaultCommand string = "runc"
DefaultCommand = "runc"
)
// Runc is the client to the runc cli
@@ -64,11 +64,15 @@ func (r *Runc) State(context context.Context, id string) (*Container, error) {
return &c, nil
}
type ConsoleSocket interface {
Path() string
}
type CreateOpts struct {
IO
// PidFile is a path to where a pid file should be created
PidFile string
ConsoleSocket *ConsoleSocket
ConsoleSocket ConsoleSocket
Detach bool
NoPivot bool
NoNewKeyring bool
@@ -146,7 +150,7 @@ func (r *Runc) Start(context context.Context, id string) error {
type ExecOpts struct {
IO
PidFile string
ConsoleSocket *ConsoleSocket
ConsoleSocket ConsoleSocket
Detach bool
}