fix(atelet): set OCI CgroupsPath so each actor gets its own cgroup#161
Open
ArnaudBger (ArnaudBger) wants to merge 1 commit into
Open
fix(atelet): set OCI CgroupsPath so each actor gets its own cgroup#161ArnaudBger (ArnaudBger) wants to merge 1 commit into
ArnaudBger (ArnaudBger) wants to merge 1 commit into
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
e662fc3 to
7d3e5cd
Compare
7d3e5cd to
3164926
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #50
Issue
When the OCI spec leaves
Linux.CgroupsPathempty, runsc uses whatever cgroup it inherited from its parent process and does not record it as one it owns. At teardown, runsc only attemptsRmdiron paths it owns:That makes the failure mode asymmetric and that is why it is hard to spot:
Uninstallwith an emptyc.Own, the loop body never runs, the function returns nil — no log, no error.Rmdiron the shared cgroup, and getsEBUSYbecause the non-owners' processes are still incgroup.procs. This is the only log line you ever see.From logs alone it looks like one specific actor is broken — when in reality the bug is shared-cgroup ownership across actors.
How to reproduce
Linux.CgroupsPath. runsc creates the pause cgroup; A owns it.Rmdiron the pause path.RmdirreturnsEBUSY(B is still incgroup.procs), surfacingremoving cgroup path "/sys/fs/cgroup/pause": device or resource busyand leaving stale state — matching the failure in Actor stuck in STATUS_SUSPENDING #50.Solution
Set a relative, per-actor path:
c.Own, and is created/cleaned up cleanly with no cross-actorEBUSY.<namespace>/<name>convention (actors/<ns>/<template>/<actor>/<container>), so per-namespace and per-template totals are queryable at each level.Spec construction is extracted into
buildSpecso the new behavior is unit-testable.