This is an automated email from the ASF dual-hosted git repository.
rzo1 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/storm.git
The following commit(s) were added to refs/heads/master by this push:
new 372658b88 [STORM-3800] fix resource leak due to Files.walk Files.list
(#3416)
372658b88 is described below
commit 372658b88c8d36d724c0e3258848b8d05a8b3c16
Author: lujiefsi <[email protected]>
AuthorDate: Thu Aug 10 17:21:30 2023 +0800
[STORM-3800] fix resource leak due to Files.walk Files.list (#3416)
* STORM-3800 : fix resource leak due to Files.walk Files.list
---
storm-client/src/jvm/org/apache/storm/utils/VersionInfo.java | 12 ++++++------
.../java/org/apache/storm/localizer/LocalizedResource.java | 11 ++++++++---
.../java/org/apache/storm/localizer/LocallyCachedBlob.java | 8 ++++++--
.../org/apache/storm/daemon/logviewer/utils/LogCleaner.java | 4 ++--
4 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/storm-client/src/jvm/org/apache/storm/utils/VersionInfo.java
b/storm-client/src/jvm/org/apache/storm/utils/VersionInfo.java
index 564f68dac..759f347b7 100644
--- a/storm-client/src/jvm/org/apache/storm/utils/VersionInfo.java
+++ b/storm-client/src/jvm/org/apache/storm/utils/VersionInfo.java
@@ -32,6 +32,7 @@ import java.util.Enumeration;
import java.util.List;
import java.util.Properties;
import java.util.jar.JarFile;
+import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -169,12 +170,11 @@ public final class VersionInfo {
}
} else if (p.endsWith("*")) {
//for a path like /<parent-path>/*
- try {
- Path parent = p.getParent();
- List<String> children = new ArrayList<>();
- Files.list(parent)
- //avoid infinite recursion
- .filter(path -> !path.endsWith("*"))
+ Path parent = p.getParent();
+ List<String> children = new ArrayList<>();
+ try (Stream<Path> stream = Files.list(parent)) {
+ //avoid infinite recursion
+ stream.filter(path -> !path.endsWith("*"))
.forEach(path -> children.add(path.toString()));
IVersionInfo resFromChildren = getFromClasspath(children,
propFileName);
if (resFromChildren != null) {
diff --git
a/storm-server/src/main/java/org/apache/storm/localizer/LocalizedResource.java
b/storm-server/src/main/java/org/apache/storm/localizer/LocalizedResource.java
index 694eba0d1..43b915043 100644
---
a/storm-server/src/main/java/org/apache/storm/localizer/LocalizedResource.java
+++
b/storm-server/src/main/java/org/apache/storm/localizer/LocalizedResource.java
@@ -42,6 +42,8 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
import org.apache.commons.io.FileUtils;
import org.apache.storm.Config;
import org.apache.storm.blobstore.ClientBlobStore;
@@ -139,7 +141,9 @@ public class LocalizedResource extends LocallyCachedBlob {
if (!Files.exists(userCacheDir)) {
return Collections.emptyList();
}
- return Files.list(userCacheDir).map((p) ->
p.getFileName().toString()).collect(Collectors.toList());
+ try (Stream<Path> stream = Files.list(userCacheDir)){
+ return stream.map((p) ->
p.getFileName().toString()).collect(Collectors.toList());
+ }
}
static void completelyRemoveUnusedUser(Path localBaseDir, String user)
throws IOException {
@@ -172,8 +176,8 @@ public class LocalizedResource extends LocallyCachedBlob {
if (!Files.exists(dir)) {
return Collections.emptyList();
}
- return Files.list(dir)
- .map((p) -> p.getFileName().toString())
+ try (Stream<Path> stream = Files.list(dir)) {
+ return stream.map((p) -> p.getFileName().toString())
.filter((name) ->
name.toLowerCase().endsWith(CURRENT_BLOB_SUFFIX))
.map((key) -> {
int p = key.lastIndexOf('.');
@@ -183,6 +187,7 @@ public class LocalizedResource extends LocallyCachedBlob {
return key;
})
.collect(Collectors.toList());
+ }
}
// baseDir/supervisor/usercache/
diff --git
a/storm-server/src/main/java/org/apache/storm/localizer/LocallyCachedBlob.java
b/storm-server/src/main/java/org/apache/storm/localizer/LocallyCachedBlob.java
index cf53dffc7..bbe7f704b 100644
---
a/storm-server/src/main/java/org/apache/storm/localizer/LocallyCachedBlob.java
+++
b/storm-server/src/main/java/org/apache/storm/localizer/LocallyCachedBlob.java
@@ -29,6 +29,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Stream;
+
import org.apache.storm.blobstore.ClientBlobStore;
import org.apache.storm.blobstore.InputStreamWithMeta;
import org.apache.storm.generated.AuthorizationException;
@@ -186,8 +188,9 @@ public abstract class LocallyCachedBlob {
return Files.size(p);
} else {
//We will not follow sym links
- return Files.walk(p)
- .filter((subp) -> Files.isRegularFile(subp,
LinkOption.NOFOLLOW_LINKS))
+ try (Stream<Path> stream = Files.walk(p)){
+ return
+ stream.filter((subp) -> Files.isRegularFile(subp,
LinkOption.NOFOLLOW_LINKS))
.mapToLong((subp) -> {
try {
return Files.size(subp);
@@ -196,6 +199,7 @@ public abstract class LocallyCachedBlob {
}
return 0;
}).sum();
+ }
}
}
diff --git
a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/utils/LogCleaner.java
b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/utils/LogCleaner.java
index 14fba4b42..1ae186610 100644
---
a/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/utils/LogCleaner.java
+++
b/storm-webapp/src/main/java/org/apache/storm/daemon/logviewer/utils/LogCleaner.java
@@ -115,8 +115,8 @@ public class LogCleaner implements Runnable, Closeable {
}
private long sizeOfDir(Path dir) {
- try {
- return Files.walk(dir)
+ try (Stream<Path> stream = Files.walk(dir)) {
+ return stream
.filter(Files::isRegularFile)
.mapToLong(p -> p.toFile().length())
.sum();