Skip to content

Commit

Permalink
Merge pull request #2503 from giuseppe/cgroup-fixes
Browse files Browse the repository at this point in the history
cgroup, systemd: cleanup cgroups
  • Loading branch information
Mrunal Patel authored Jul 6, 2020
2 parents 3f81131 + 3203448 commit 30dc54a
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
13 changes: 8 additions & 5 deletions libcontainer/cgroups/systemd/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ var (
versionOnce sync.Once
version int
versionErr error

isRunningSystemdOnce sync.Once
isRunningSystemd bool
)

// NOTE: This function comes from package github.com/coreos/go-systemd/util
Expand All @@ -37,11 +40,11 @@ var (
// checks whether /run/systemd/system/ exists and is a directory.
// http://www.freedesktop.org/software/systemd/man/sd_booted.html
func IsRunningSystemd() bool {
fi, err := os.Lstat("/run/systemd/system")
if err != nil {
return false
}
return fi.IsDir()
isRunningSystemdOnce.Do(func() {
fi, err := os.Lstat("/run/systemd/system")
isRunningSystemd = err == nil && fi.IsDir()
})
return isRunningSystemd
}

// systemd represents slice hierarchy using `-`, so we need to follow suit when
Expand Down
9 changes: 8 additions & 1 deletion libcontainer/cgroups/systemd/v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,14 @@ func (m *legacyManager) Destroy() error {
return err
}
unitName := getUnitName(m.cgroups)
if err := stopUnit(dbusConnection, unitName); err != nil {

err = stopUnit(dbusConnection, unitName)
// Both on success and on error, cleanup all the cgroups we are aware of.
// Some of them were created directly by Apply() and are not managed by systemd.
if err := cgroups.RemovePaths(m.paths); err != nil {
return err
}
if err != nil {
return err
}
m.paths = make(map[string]string)
Expand Down
20 changes: 10 additions & 10 deletions tests/integration/delete.bats
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,24 @@ function teardown() {
}

@test "runc delete" {
# run busybox detached
runc run -d --console-socket $CONSOLE_SOCKET test_busybox
runc run -d --console-socket $CONSOLE_SOCKET testbusyboxdelete
[ "$status" -eq 0 ]

# check state
testcontainer test_busybox running
testcontainer testbusyboxdelete running

runc kill test_busybox KILL
runc kill testbusyboxdelete KILL
[ "$status" -eq 0 ]
# wait for busybox to be in the destroyed state
retry 10 1 eval "__runc state test_busybox | grep -q 'stopped'"
retry 10 1 eval "__runc state testbusyboxdelete | grep -q 'stopped'"

# delete test_busybox
runc delete test_busybox
runc delete testbusyboxdelete
[ "$status" -eq 0 ]

runc state test_busybox
runc state testbusyboxdelete
[ "$status" -ne 0 ]

run find /sys/fs/cgroup -wholename '*testbusyboxdelete*' -type d
[ "$status" -eq 0 ]
[ "$output" = "" ] || fail "cgroup not cleaned up correctly: $output"
}

@test "runc delete --force" {
Expand Down

0 comments on commit 30dc54a

Please sign in to comment.