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

Reply via email to