RFR: 8287107: CgroupSubsystemFactory.setCgroupV2Path asserts with freezer controller

Ioi Lam iklam at openjdk.java.net
Mon May 23 22:24:24 UTC 2022


This PR fixes a bug found on an Ubuntu host that's mostly running with cgroupv2, but there's a controller (freezer) that is mounted in cgroupv1 mode.

The container support code in the VM and JDK checks if we have simultaneously mounted v1 and v2 containers. If so, we revert to "hybrid" mode (which is essentially v1).

However, the "hybrid checks" only considers the following controllers that Java cares about:

- cpu
- cpuacct
- cpuset
- blkio
- memory
- pids

If only "freezer" is mounted in v1 mode, Java will start in V2 mode. Later, when `setCgroupV2Path()` sees the first line in /proc/self/cgroup, it runs into the assert.


$ cat /proc/self/cgroup
1:freezer:/
0::/user.slice/user-1001.slice/session-85.scope


The fix is simple -- when we get to `setCgroupV2Path()`, we have already decided that the system has not mounted any v1 controllers that we care about, so we should just ignore all the v1 controllers (which has a non-empty name).

-------------

Commit messages:
 - 8287107: CgroupSubsystemFactory.setCgroupV2Path asserts with freezer controller

Changes: https://git.openjdk.java.net/jdk/pull/8858/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8858&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8287107
  Stats: 116 lines in 3 files changed: 113 ins; 0 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8858.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8858/head:pull/8858

PR: https://git.openjdk.java.net/jdk/pull/8858


More information about the core-libs-dev mailing list