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();

Reply via email to