summaryrefslogtreecommitdiff
path: root/libpod
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2018-10-01 12:10:46 -0500
committerbaude <bbaude@redhat.com>2018-10-03 12:45:37 -0500
commit14473270d7af520dae006605ab798ad9db34f184 (patch)
tree3224b4b540df5adccc615f5adede8c3e3db7eb90 /libpod
parent230edff5216d0a7cedeff06c891450f8691b5aa2 (diff)
downloadpodman-14473270d7af520dae006605ab798ad9db34f184.tar.gz
podman-14473270d7af520dae006605ab798ad9db34f184.tar.bz2
podman-14473270d7af520dae006605ab798ad9db34f184.zip
Add ability for ubuntu to be tested
unfortunately the papr CI system cannot test ubuntu as a VM; therefore, this PR still keeps travis. but it does include fixes that will be required for running on modern versions of ubuntu. Signed-off-by: baude <bbaude@redhat.com>
Diffstat (limited to 'libpod')
-rw-r--r--libpod/container_internal.go7
-rw-r--r--libpod/runtime_pod_linux.go3
-rw-r--r--libpod/stats.go7
-rw-r--r--libpod/util.go25
4 files changed, 38 insertions, 4 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 1e49673bf..e0eb1e4c2 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -1342,3 +1342,10 @@ func (c *Container) unmount(force bool) error {
return nil
}
+
+// getExcludedCGroups returns a string slice of cgroups we want to exclude
+// because runc or other components are unaware of them.
+func getExcludedCGroups() (excludes []string) {
+ excludes = []string{"rdma"}
+ return
+}
diff --git a/libpod/runtime_pod_linux.go b/libpod/runtime_pod_linux.go
index 974cd2b68..eb3d471dd 100644
--- a/libpod/runtime_pod_linux.go
+++ b/libpod/runtime_pod_linux.go
@@ -265,7 +265,8 @@ func (r *Runtime) removePod(ctx context.Context, p *Pod, removeCtrs, force bool)
}
case CgroupfsCgroupsManager:
// Delete the cgroupfs cgroup
- cgroup, err := cgroups.Load(cgroups.V1, cgroups.StaticPath(p.state.CgroupPath))
+ v1CGroups := GetV1CGroups(getExcludedCGroups())
+ cgroup, err := cgroups.Load(v1CGroups, cgroups.StaticPath(p.state.CgroupPath))
if err != nil && err != cgroups.ErrCgroupDeleted {
return err
} else if err == nil {
diff --git a/libpod/stats.go b/libpod/stats.go
index 9d5efd993..c58a46135 100644
--- a/libpod/stats.go
+++ b/libpod/stats.go
@@ -33,13 +33,14 @@ func (c *Container) GetContainerStats(previousStats *ContainerStats) (*Container
if err != nil {
return nil, err
}
-
- cgroup, err := cgroups.Load(cgroups.V1, cgroups.StaticPath(cgroupPath))
+ v1CGroups := GetV1CGroups(getExcludedCGroups())
+ cgroup, err := cgroups.Load(v1CGroups, cgroups.StaticPath(cgroupPath))
if err != nil {
return stats, errors.Wrapf(err, "unable to load cgroup at %s", cgroupPath)
}
- cgroupStats, err := cgroup.Stat()
+ // Ubuntu does not have swap memory in cgroups because swap is often not enabled.
+ cgroupStats, err := cgroup.Stat(cgroups.IgnoreNotExist)
if err != nil {
return stats, errors.Wrapf(err, "unable to obtain cgroup stats")
}
diff --git a/libpod/util.go b/libpod/util.go
index 17325f6e4..3b51e4fcc 100644
--- a/libpod/util.go
+++ b/libpod/util.go
@@ -9,8 +9,10 @@ import (
"strings"
"time"
+ "github.com/containerd/cgroups"
"github.com/containers/image/signature"
"github.com/containers/image/types"
+ "github.com/containers/libpod/pkg/util"
spec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors"
)
@@ -160,3 +162,26 @@ func validPodNSOption(p *Pod, ctrPod string) error {
}
return nil
}
+
+// GetV1CGroups gets the V1 cgroup subsystems and then "filters"
+// out any subsystems that are provided by the caller. Passing nil
+// for excludes will return the subsystems unfiltered.
+//func GetV1CGroups(excludes []string) ([]cgroups.Subsystem, error) {
+func GetV1CGroups(excludes []string) cgroups.Hierarchy {
+ return func() ([]cgroups.Subsystem, error) {
+ var filtered []cgroups.Subsystem
+
+ subSystem, err := cgroups.V1()
+ if err != nil {
+ return nil, err
+ }
+ for _, s := range subSystem {
+ // If the name of the subsystem is not in the list of excludes, then
+ // add it as a keeper.
+ if !util.StringInSlice(string(s.Name()), excludes) {
+ filtered = append(filtered, s)
+ }
+ }
+ return filtered, nil
+ }
+}