From a6e85b050de556dca2f6c337929196d7827e9fa9 Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Wed, 21 Sep 2016 19:36:36 +1200 Subject: [PATCH] add log messages when write to oom_score_adj fails Signed-off-by: Michael Hudson-Doyle Upstream-commit: 9ed54d3c674ea25d7e038a7506f68924aa8d39d6 Component: engine --- components/engine/daemon/daemon_unix.go | 11 +++++++++-- components/engine/libcontainerd/remote_linux.go | 13 ++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/components/engine/daemon/daemon_unix.go b/components/engine/daemon/daemon_unix.go index 3402f77790..9d8f48216f 100644 --- a/components/engine/daemon/daemon_unix.go +++ b/components/engine/daemon/daemon_unix.go @@ -37,6 +37,7 @@ import ( lntypes "github.com/docker/libnetwork/types" "github.com/golang/protobuf/ptypes" "github.com/opencontainers/runc/libcontainer/label" + rsystem "github.com/opencontainers/runc/libcontainer/system" "github.com/opencontainers/runc/libcontainer/user" "github.com/opencontainers/runtime-spec/specs-go" ) @@ -1147,10 +1148,16 @@ func setupOOMScoreAdj(score int) error { if err != nil { return err } - _, err = f.WriteString(strconv.Itoa(score)) + + stringScore := strconv.Itoa(score) + _, err = f.WriteString(stringScore) if os.IsPermission(err) { // Setting oom_score_adj does not work in an - // unprivileged container. Ignore the error. + // unprivileged container. Ignore the error, but log + // it if we appear not to be in that situation. + if !rsystem.RunningInUserNS() { + logrus.Debugf("Permission denied writing %q to /proc/self/oom_score_adj", stringScore) + } return nil } f.Close() diff --git a/components/engine/libcontainerd/remote_linux.go b/components/engine/libcontainerd/remote_linux.go index 1689f90cc0..06a726aa09 100644 --- a/components/engine/libcontainerd/remote_linux.go +++ b/components/engine/libcontainerd/remote_linux.go @@ -22,6 +22,7 @@ import ( "github.com/docker/docker/utils" "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/timestamp" + rsystem "github.com/opencontainers/runc/libcontainer/system" "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/grpclog" @@ -429,15 +430,21 @@ func (r *remote) runContainerdDaemon() error { } func setOOMScore(pid, score int) error { - f, err := os.OpenFile(fmt.Sprintf("/proc/%d/oom_score_adj", pid), os.O_WRONLY, 0) + oomScoreAdjPath := fmt.Sprintf("/proc/%d/oom_score_adj", pid) + f, err := os.OpenFile(oomScoreAdjPath, os.O_WRONLY, 0) if err != nil { return err } - _, err = f.WriteString(strconv.Itoa(score)) + stringScore := strconv.Itoa(score) + _, err = f.WriteString(stringScore) f.Close() if os.IsPermission(err) { // Setting oom_score_adj does not work in an - // unprivileged container. Ignore the error. + // unprivileged container. Ignore the error, but log + // it if we appear not to be in that situation. + if !rsystem.RunningInUserNS() { + logrus.Debugf("Permission denied writing %q to %s", stringScore, oomScoreAdjPath) + } return nil } return err