Skip to content

Commit 799dfab

Browse files
committed
Use simple loops to process cgroup files
1 parent 527c385 commit 799dfab

File tree

4 files changed

+24
-44
lines changed

4 files changed

+24
-44
lines changed

src/java.base/linux/classes/jdk/internal/platform/CgroupSubsystemController.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,12 @@
2626
package jdk.internal.platform;
2727

2828
import java.io.IOException;
29-
import java.io.UncheckedIOException;
3029
import java.math.BigInteger;
3130
import java.nio.file.Path;
3231
import java.nio.file.Paths;
3332
import java.util.ArrayList;
3433
import java.util.List;
35-
import java.util.Optional;
3634
import java.util.function.Function;
37-
import java.util.stream.Stream;
3835

3936
/**
4037
* Cgroup version agnostic controller logic
@@ -161,16 +158,18 @@ public static double getDoubleValue(CgroupSubsystemController controller, String
161158
public static long getLongEntry(CgroupSubsystemController controller, String param, String entryname, long defaultRetval) {
162159
if (controller == null) return defaultRetval;
163160

164-
try (Stream<String> lines = CgroupUtil.readFilePrivileged(Paths.get(controller.path(), param))) {
165-
166-
Optional<String> result = lines.map(line -> line.split(" "))
167-
.filter(line -> (line.length == 2 &&
168-
line[0].equals(entryname)))
169-
.map(line -> line[1])
170-
.findFirst();
161+
try {
162+
long result = defaultRetval;
163+
for (String line : CgroupUtil.readAllLinesPrivileged(Paths.get(controller.path(), param))) {
164+
String[] tokens = line.split(" ");
165+
if (tokens.length == 2 && tokens[0].equals(entryname)) {
166+
result = Long.parseLong(tokens[1]);
167+
break;
168+
}
169+
}
171170

172-
return result.isPresent() ? Long.parseLong(result.get()) : defaultRetval;
173-
} catch (UncheckedIOException | IOException e) {
171+
return result;
172+
} catch (IOException e) {
174173
return defaultRetval;
175174
}
176175
}

src/java.base/linux/classes/jdk/internal/platform/CgroupSubsystemFactory.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
package jdk.internal.platform;
2727

2828
import java.io.IOException;
29-
import java.io.UncheckedIOException;
3029
import java.lang.System.Logger;
3130
import java.lang.System.Logger.Level;
3231
import java.nio.file.Path;
@@ -38,7 +37,6 @@
3837
import java.util.Optional;
3938
import java.util.Objects;
4039
import java.util.function.Consumer;
41-
import java.util.stream.Stream;
4240

4341
import jdk.internal.platform.cgroupv1.CgroupV1Subsystem;
4442
import jdk.internal.platform.cgroupv2.CgroupV2Subsystem;
@@ -56,7 +54,7 @@ static CgroupMetrics create() {
5654
Optional<CgroupTypeResult> optResult = null;
5755
try {
5856
optResult = determineType("/proc/self/mountinfo", "/proc/cgroups", "/proc/self/cgroup");
59-
} catch (IOException | UncheckedIOException e) {
57+
} catch (IOException e) {
6058
return null;
6159
}
6260
return create(optResult);
@@ -173,16 +171,15 @@ public static Optional<CgroupTypeResult> determineType(String mountInfo,
173171
// See:
174172
// setCgroupV1Path() for the action run for cgroups v1 systems
175173
// setCgroupV2Path() for the action run for cgroups v2 systems
176-
try (Stream<String> selfCgroupLines =
177-
CgroupUtil.readFilePrivileged(Paths.get(selfCgroup))) {
178-
Consumer<String[]> action = (tokens -> setCgroupV1Path(infos, tokens));
179-
if (isCgroupsV2) {
180-
action = (tokens -> setCgroupV2Path(infos, tokens));
181-
}
174+
Consumer<String[]> action = (tokens -> setCgroupV1Path(infos, tokens));
175+
if (isCgroupsV2) {
176+
action = (tokens -> setCgroupV2Path(infos, tokens));
177+
}
178+
for (String line : CgroupUtil.readAllLinesPrivileged(Paths.get(selfCgroup))) {
182179
// The limit value of 3 is because /proc/self/cgroup contains three
183180
// colon-separated tokens per line. The last token, cgroup path, might
184181
// contain a ':'.
185-
selfCgroupLines.map(line -> line.split(":", 3)).forEach(action);
182+
action.accept(line.split(":", 3));
186183
}
187184

188185
CgroupTypeResult result = new CgroupTypeResult(isCgroupsV2,

src/java.base/linux/classes/jdk/internal/platform/CgroupUtil.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,17 @@
2828
import java.io.BufferedReader;
2929
import java.io.FileReader;
3030
import java.io.IOException;
31-
import java.io.UncheckedIOException;
3231
import java.nio.charset.StandardCharsets;
33-
import java.nio.file.Files;
3432
import java.nio.file.Path;
3533
import java.nio.file.Paths;
3634
import java.security.AccessController;
3735
import java.security.PrivilegedActionException;
3836
import java.security.PrivilegedExceptionAction;
3937
import java.util.ArrayList;
4038
import java.util.List;
41-
import java.util.stream.Stream;
4239

4340
public final class CgroupUtil {
4441

45-
@SuppressWarnings("removal")
46-
public static Stream<String> readFilePrivileged(Path path) throws IOException {
47-
try {
48-
PrivilegedExceptionAction<Stream<String>> pea = () -> Files.lines(path);
49-
return AccessController.doPrivileged(pea);
50-
} catch (PrivilegedActionException e) {
51-
unwrapIOExceptionAndRethrow(e);
52-
throw new InternalError(e.getCause());
53-
} catch (UncheckedIOException e) {
54-
throw e.getCause();
55-
}
56-
}
57-
5842
static void unwrapIOExceptionAndRethrow(PrivilegedActionException pae) throws IOException {
5943
Throwable x = pae.getCause();
6044
if (x instanceof IOException)

src/java.base/linux/classes/jdk/internal/platform/cgroupv2/CgroupV2Subsystem.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,9 @@
2626
package jdk.internal.platform.cgroupv2;
2727

2828
import java.io.IOException;
29-
import java.io.UncheckedIOException;
3029
import java.nio.file.Paths;
3130
import java.util.concurrent.TimeUnit;
3231
import java.util.function.Function;
33-
import java.util.stream.Collectors;
3432

3533
import jdk.internal.platform.CgroupInfo;
3634
import jdk.internal.platform.CgroupSubsystem;
@@ -329,10 +327,12 @@ public long getBlkIOServiced() {
329327

330328
private long sumTokensIOStat(Function<String, Long> mapFunc) {
331329
try {
332-
return CgroupUtil.readFilePrivileged(Paths.get(unified.path(), "io.stat"))
333-
.map(mapFunc)
334-
.collect(Collectors.summingLong(e -> e));
335-
} catch (UncheckedIOException | IOException e) {
330+
long sum = 0L;
331+
for (String line : CgroupUtil.readAllLinesPrivileged(Paths.get(unified.path(), "io.stat"))) {
332+
sum += mapFunc.apply(line);
333+
}
334+
return sum;
335+
} catch (IOException e) {
336336
return CgroupSubsystem.LONG_RETVAL_UNLIMITED;
337337
}
338338
}

0 commit comments

Comments
 (0)