This is an automated email from the ASF dual-hosted git repository.

reschke pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 7db1257a0c OAK-11500: Remove usage of Guava io.Closeable (#2136)
7db1257a0c is described below

commit 7db1257a0c7d4618a896e494627761fafc1045bf
Author: Julian Reschke <[email protected]>
AuthorDate: Wed Mar 5 12:15:35 2025 +0100

    OAK-11500: Remove usage of Guava io.Closeable (#2136)
    
    * OAK-11500: Remove usage of Guava io.Closeable  (#2129)
    
    * OAK-11500: Remove usage of Guava io.Closeable
    
    * OAK-11500: Remove usage of Guava io.Closeable
    
    * OAK-11500: fix change in MongoDocumentStore
    
    * Revert "OAK-11500: fix change in MongoDocumentStore"
    
    This reverts commit 91ce7801d57c81a71c1c5dc10ca2adbd6d641970.
    
    * OAK-11500: fix change in MongoDocumentStore
    
    * OAK-11500: fix change in AbstractSharedCachingDataStore
    
    * OAK-11500: fix potentially problematic change in 
BlobIdTrackerClusterSharedTest
    
    * OAK-11500: fix potentially problematic change in 
ActiveDeletedBlobCollectorFactory
    
    * OAK-11500: simplify instances by using IOUtils.closeQuietly more
    
    * OAK-11500: more use of try-with-resources, add comment about OAK-7662, 
avoid potential future NPEs
    
    * OAK-11500: add comment about OAK-7662, avoid potential future NPEs
---
 .../blob/AbstractSharedCachingDataStore.java       | 11 ++----
 .../jackrabbit/oak/plugins/blob/FileCache.java     |  9 +----
 .../plugins/blob/MarkSweepGarbageCollector.java    | 31 +++++++++++------
 .../plugins/blob/datastore/DataStoreBlobStore.java | 24 +++----------
 .../oak/plugins/blob/datastore/FSBackend.java      |  7 +---
 .../plugins/blob/datastore/OakFileDataStore.java   |  7 +---
 .../oak/plugins/blob/UploadStagingCacheTest.java   | 11 ++----
 .../datastore/BlobIdTrackerClusterSharedTest.java  |  6 ++--
 .../apache/jackrabbit/oak/commons/FileIOUtils.java | 25 +++-----------
 .../ActiveDeletedBlobCollectorFactory.java         |  8 +++--
 .../jackrabbit/oak/run/DataStoreCheckCommand.java  | 17 ++--------
 .../jackrabbit/oak/run/DataStoreCommand.java       |  8 +----
 .../oak/segment/DefaultSegmentWriter.java          | 14 +++++---
 .../plugins/document/mongo/MongoDocumentStore.java |  4 +--
 .../oak/plugins/document/MongoBlobGCTest.java      | 39 +++++++---------------
 15 files changed, 74 insertions(+), 147 deletions(-)

diff --git 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
index 5bb8a907ca..d70f847b43 100644
--- 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
+++ 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
@@ -58,7 +58,6 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.jackrabbit.guava.common.base.Stopwatch;
 import org.apache.jackrabbit.guava.common.collect.Iterators;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import 
org.apache.jackrabbit.guava.common.util.concurrent.ListeningExecutorService;
 
 /**
@@ -327,15 +326,11 @@ public abstract class AbstractSharedCachingDataStore 
extends AbstractDataStore
             try {
                 // If cache configured to 0 will return null
                 if (cached == null || !cached.exists()) {
-                    InputStream in = null;
-                    try {
-                        TransientFileFactory fileFactory = 
TransientFileFactory.getInstance();
-                        File tmpFile = 
fileFactory.createTransientFile("temp0cache", null, temp);
-                        in = backend.getRecord(getIdentifier()).getStream();
+                    TransientFileFactory fileFactory = 
TransientFileFactory.getInstance();
+                    File tmpFile = 
fileFactory.createTransientFile("temp0cache", null, temp);
+                    try (InputStream in = 
backend.getRecord(getIdentifier()).getStream()) {
                         copyInputStreamToFile(in, tmpFile);
                         return new LazyFileInputStream(tmpFile);
-                    } finally {
-                        Closeables.close(in, false);
                     }
                 } else {
                     return new FileInputStream(cached);
diff --git 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java
 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java
index 88db2ebd5f..847d41d0f1 100644
--- 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java
+++ 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java
@@ -49,7 +49,6 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.jackrabbit.guava.common.base.Stopwatch;
 import org.apache.jackrabbit.guava.common.cache.AbstractCache;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 
 /**
  */
@@ -110,18 +109,12 @@ public class FileCache extends AbstractCache<String, 
File> implements Closeable
                 if (cachedFile.exists()) {
                     return cachedFile;
                 } else {
-                    InputStream is = null;
-                    boolean threw = true;
                     long startNanos = System.nanoTime();
-                    try {
-                        is = loader.load(key);
+                    try (InputStream is = loader.load(key))  {
                         copyInputStreamToFile(is, cachedFile);
-                        threw = false;
                     } catch (Exception e) {
                         LOG.warn("Error reading object for id [{}] from 
backend", key, e);
                         throw e;
-                    } finally {
-                        Closeables.close(is, threw);
                     }
                     if (LOG.isDebugEnabled()) {
                         LOG.debug("Loaded file: {} in {}", key, 
(System.nanoTime() - startNanos) / 1_000_000);
diff --git 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
index 578377ded5..716d86f607 100644
--- 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
+++ 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/MarkSweepGarbageCollector.java
@@ -56,9 +56,9 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.collections4.ListValuedMap;
 import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.guava.common.base.Stopwatch;
 import org.apache.jackrabbit.guava.common.collect.Iterators;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.jackrabbit.guava.common.util.concurrent.ListenableFutureTask;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.LineIterator;
@@ -303,14 +303,10 @@ public class MarkSweepGarbageCollector implements 
BlobGarbageCollector {
                             
stat.setStartTime(markers.get(uniqueSessionId).getLastModified());
                         }
 
-                        LineNumberReader reader = null;
-                        try {
-                            reader = new LineNumberReader(new 
InputStreamReader(refRec.getStream()));
+                        try (LineNumberReader reader = new 
LineNumberReader(new InputStreamReader(refRec.getStream()))) {
                             while (reader.readLine() != null) {
                             }
                             stat.setNumLines(reader.getLineNumber());
-                        } finally {
-                            Closeables.close(reader, true);
                         }
                     }
                 }
@@ -379,8 +375,16 @@ public class MarkSweepGarbageCollector implements 
BlobGarbageCollector {
             throw e;
         } finally {
             statsCollector.updateDuration(sw.elapsed(TimeUnit.MILLISECONDS), 
TimeUnit.MILLISECONDS);
+
+            // OAK-7662: retain output file when tracing
             if (!LOG.isTraceEnabled() && !traceOutput) {
-                Closeables.close(fs, threw);
+                try {
+                    IOUtils.close(fs);
+                } catch (IOException ioe) {
+                    if (!threw) {
+                        throw ioe;
+                    }
+                }
             }
         }
     }
@@ -727,7 +731,7 @@ public class MarkSweepGarbageCollector implements 
BlobGarbageCollector {
 
             // Get size
             getBlobReferencesSize(fs, consistencyStats);
-            
+
             if (!markOnly) {
                 // Find all blobs available in the blob store
                 ListenableFutureTask<Integer> blobIdRetriever = 
ListenableFutureTask.create(new BlobIdRetriever(fs,
@@ -768,8 +772,15 @@ public class MarkSweepGarbageCollector implements 
BlobGarbageCollector {
                 }
             }
         } finally {
+            // OAK-7662: retain output file when tracing
             if (!traceOutput && (!LOG.isTraceEnabled() && candidates == 0)) {
-                Closeables.close(fs, threw);
+                try {
+                    IOUtils.close(fs);
+                } catch (IOException ioe) {
+                    if (!threw) {
+                        throw ioe;
+                    }
+                }
             }
             sw.stop();
             
consistencyStatsCollector.updateDuration(sw.elapsed(TimeUnit.MILLISECONDS), 
TimeUnit.MILLISECONDS);
@@ -1091,7 +1102,7 @@ public class MarkSweepGarbageCollector implements 
BlobGarbageCollector {
             } finally {
                 if (idsIter instanceof Closeable) {
                     try {
-                        Closeables.close((Closeable) idsIter, false);
+                        ((Closeable)idsIter).close();
                     } catch (Exception e) {
                         LOG.debug("Error closing iterator");
                     }
diff --git 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
index 240e519ca6..5b981bfa17 100644
--- 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
+++ 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
@@ -79,7 +79,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.jackrabbit.guava.common.collect.Iterators;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 
 /**
  * BlobStore wrapper for DataStore. Wraps Jackrabbit 2 DataStore and expose 
them as BlobStores
@@ -323,15 +322,13 @@ public class DataStoreBlobStore
 
     @Override
     public String writeBlob(InputStream stream, BlobOptions options) throws 
IOException {
-        boolean threw = true;
-        try {
+        requireNonNull(stream);
+        try (stream) {
             long start = System.nanoTime();
 
-            requireNonNull(stream);
             DataRecord dr = writeStream(stream, options);
             String id = getBlobId(dr);
             updateTracker(id);
-            threw = false;
 
             stats.uploaded(System.nanoTime() - start, TimeUnit.NANOSECONDS, 
dr.getLength());
             stats.uploadCompleted(id);
@@ -340,10 +337,6 @@ public class DataStoreBlobStore
         } catch (DataStoreException e) {
             stats.uploadFailed();
             throw new IOException(e);
-        } finally {
-            //DataStore does not closes the stream internally
-            //So close the stream explicitly
-            Closeables.close(stream, threw);
         }
     }
 
@@ -364,15 +357,10 @@ public class DataStoreBlobStore
         //This is inefficient as repeated calls for same blobId would involve 
opening new Stream
         //instead clients should directly access the stream from DataRecord by 
special casing for
         //BlobStore which implements DataStore
-        InputStream stream = getInputStream(encodedBlobId);
-        boolean threw = true;
-        try {
+        try (InputStream stream = getInputStream(encodedBlobId)) {
             IOUtils.skipFully(stream, pos);
             int readCount = stream.read(buff, off, length);
-            threw = false;
             return readCount;
-        } finally {
-            Closeables.close(stream, threw);
         }
     }
 
@@ -439,13 +427,9 @@ public class DataStoreBlobStore
                     @Override
                     public byte[] call() throws Exception {
                         boolean threw = true;
-                        InputStream stream = getStream(blobId.blobId);
-                        try {
+                        try (InputStream stream = getStream(blobId.blobId)) {
                             byte[] result = IOUtils.toByteArray(stream);
-                            threw = false;
                             return result;
-                        } finally {
-                            Closeables.close(stream, threw);
                         }
                     }
                 });
diff --git 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
index 7822b115b4..8392394969 100644
--- 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
+++ 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
@@ -30,7 +30,6 @@ import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.filefilter.FileFilterUtils;
@@ -189,12 +188,8 @@ public class FSBackend extends AbstractSharedBackend {
 
         try {
             File file = new File(fsPathDir, name);
-            FileOutputStream os = new FileOutputStream(file);
-            try {
+            try (input; FileOutputStream os = new FileOutputStream(file)) {
                 IOUtils.copyLarge(input, os);
-            } finally {
-                Closeables.close(os, true);
-                Closeables.close(input, true);
             }
         } catch (IOException e) {
             LOG.error("Exception while adding metadata record with name {}, 
{}",
diff --git 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
index 7ad09d04c1..6a9023ea4b 100644
--- 
a/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
+++ 
b/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
@@ -33,7 +33,6 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.filefilter.FileFilterUtils;
@@ -139,12 +138,8 @@ public class OakFileDataStore extends FileDataStore 
implements SharedDataStore {
 
         try {
             File file = new File(getPath(), name);
-            FileOutputStream os = new FileOutputStream(file);
-            try {
+            try (input; FileOutputStream os = new FileOutputStream(file)) {
                 IOUtils.copyLarge(input, os);
-            } finally {
-                Closeables.close(os, true);
-                Closeables.close(input, true);
             }
         } catch (IOException e) {
             LOG.error("Exception while adding metadata record with name {}, 
{}",
diff --git 
a/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java
 
b/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java
index 77ffbf5b21..82748f1e81 100644
--- 
a/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java
+++ 
b/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java
@@ -42,7 +42,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 import ch.qos.logback.classic.Level;
 
 import org.apache.jackrabbit.guava.common.collect.Iterators;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.jackrabbit.guava.common.io.Closer;
 import org.apache.jackrabbit.guava.common.util.concurrent.Futures;
 import org.apache.jackrabbit.guava.common.util.concurrent.ListenableFuture;
@@ -693,7 +692,7 @@ public class UploadStagingCacheTest extends 
AbstractDataStoreCacheTest {
         // Create pre-upgrade load
         File home = folder.newFolder();
         File pendingUploadsFile = new File(home, 
DataStoreCacheUpgradeUtils.UPLOAD_MAP);
-        createGibberishLoad(home, pendingUploadsFile);
+        createGibberishLoad(pendingUploadsFile);
 
         LogCustomizer lc = 
LogCustomizer.forLogger(DataStoreCacheUpgradeUtils.class.getName())
             .filter(Level.WARN)
@@ -717,13 +716,9 @@ public class UploadStagingCacheTest extends 
AbstractDataStoreCacheTest {
     }
 
 
-    private void createGibberishLoad(File home, File pendingUploadFile) throws 
IOException {
-        BufferedWriter writer = null;
-        try {
-            writer = new BufferedWriter(new FileWriter(pendingUploadFile, 
StandardCharsets.UTF_8));
+    private void createGibberishLoad(File pendingUploadFile) throws 
IOException {
+        try (BufferedWriter writer = new BufferedWriter(new 
FileWriter(pendingUploadFile, StandardCharsets.UTF_8))) {
             FileIOUtils.writeAsLine(writer, 
"jerhgiuheirghoeoorqehgsjlwjpfkkwpkf", false);
-        } finally {
-            Closeables.close(writer, true);
         }
     }
 
diff --git 
a/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTrackerClusterSharedTest.java
 
b/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTrackerClusterSharedTest.java
index 28bc17d3af..7e36fc065c 100644
--- 
a/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTrackerClusterSharedTest.java
+++ 
b/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/BlobIdTrackerClusterSharedTest.java
@@ -29,6 +29,7 @@ import java.util.Set;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.core.data.DataStoreException;
 import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
 import org.apache.jackrabbit.oak.plugins.blob.SharedDataStore;
@@ -41,7 +42,6 @@ import org.junit.rules.TemporaryFolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.jackrabbit.guava.common.io.Closeables.close;
 import static java.lang.String.valueOf;
 import static java.util.UUID.randomUUID;
 import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
@@ -224,11 +224,11 @@ public class BlobIdTrackerClusterSharedTest {
         Set<String> retrieved = new HashSet<>();
         Iterator<String> iter = tracker.get();
         log.info("retrieving blob ids");
-        while(iter.hasNext()) {
+        while (iter.hasNext()) {
             retrieved.add(iter.next());
         }
         if (iter instanceof Closeable) {
-            close((Closeable)iter, true);
+            IOUtils.closeQuietly((Closeable)iter);
         }
         return retrieved;
     }
diff --git 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/FileIOUtils.java 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/FileIOUtils.java
index b4a9e6a3c0..6f9a120d5a 100644
--- 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/FileIOUtils.java
+++ 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/FileIOUtils.java
@@ -20,7 +20,6 @@ import static java.io.File.createTempFile;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.commons.io.FileUtils.forceDelete;
 import static org.apache.commons.io.IOUtils.copyLarge;
-import static org.apache.jackrabbit.guava.common.io.Closeables.close;
 import static 
org.apache.jackrabbit.oak.commons.sort.EscapeUtils.escapeLineBreak;
 import static 
org.apache.jackrabbit.oak.commons.sort.EscapeUtils.unescapeLineBreaks;
 import static 
org.apache.jackrabbit.oak.commons.sort.ExternalSort.mergeSortedFiles;
@@ -140,25 +139,20 @@ public final class FileIOUtils {
      * @throws IOException
      */
     public static void append(List<File> files, File appendTo, boolean delete) 
throws IOException {
-        OutputStream appendStream = null;
-        boolean threw = true;
 
-        try {
-            appendStream = new BufferedOutputStream(new 
FileOutputStream(appendTo, true));
+        try (OutputStream appendStream = new BufferedOutputStream(new 
FileOutputStream(appendTo, true))) {
 
             for (File f : files) {
                 try (InputStream iStream = new FileInputStream(f)) {
                     copyLarge(iStream, appendStream);
                 }
             }
-            threw = false;
         } finally {
             if (delete) {
                 for (File f : files) {
                     f.delete();
                 }
             }
-            close(appendStream, threw);
         }
     }
 
@@ -227,11 +221,9 @@ public final class FileIOUtils {
      */
     public static int writeStrings(Iterator<String> iterator, File f, boolean 
escape,
         @NotNull Function<String, String> transformer, @Nullable Logger 
logger, @Nullable String message) throws IOException {
-        BufferedWriter writer = new BufferedWriter(new FileWriter(f, UTF_8));
-        boolean threw = true;
 
         int count = 0;
-        try {
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(f, 
UTF_8))) {
             while (iterator.hasNext()) {
                 writeAsLine(writer, transformer.apply(iterator.next()), 
escape);
                 count++;
@@ -241,9 +233,6 @@ public final class FileIOUtils {
                     }
                 }
             }
-            threw = false;
-        } finally {
-            close(writer, threw);
         }
         return count;
     }
@@ -257,13 +246,10 @@ public final class FileIOUtils {
      * @throws IOException
      */
     public static Set<String> readStringsAsSet(InputStream stream, boolean 
unescape) throws IOException {
-        BufferedReader reader = null;
         Set<String> set = new HashSet<>();
-        boolean threw = true;
 
-        try {
-            reader = new BufferedReader(new InputStreamReader(stream, UTF_8));
-            String line  = null;
+        try (BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream, UTF_8))) {
+            String line;
             while ((line = reader.readLine()) != null) {
                 if (unescape) {
                     set.add(unescapeLineBreaks(line));
@@ -271,9 +257,6 @@ public final class FileIOUtils {
                     set.add(line);
                 }
             }
-            threw = false;
-        } finally {
-            close(reader, threw);
         }
         return set;
     }
diff --git 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java
 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java
index 92ee7e34cc..138a9b537a 100644
--- 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java
+++ 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/ActiveDeletedBlobCollectorFactory.java
@@ -38,8 +38,8 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.LineIterator;
 import org.apache.commons.io.filefilter.IOFileFilter;
 import org.apache.commons.io.filefilter.RegexFileFilter;
@@ -324,7 +324,11 @@ public class ActiveDeletedBlobCollectorFactory {
             long startBlobTrackerSyncTime = clock.getTime();
             // Synchronize deleted blob ids with the blob id tracker
             try {
-                Closeables.close(idTempDeleteWriter, true);
+                try {
+                    IOUtils.close(idTempDeleteWriter);
+                } catch (IOException ex) {
+                    LOG.warn("IOException thrown while closing 
idTempDeleteWriter", ex);
+                }
 
                 if (blobIdsTracked && numBlobsDeleted > 0) {
                     BlobTracker tracker = ((BlobTrackingStore) 
blobStore).getTracker();
diff --git 
a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
 
b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
index 389b9bb351..1d55c0c768 100644
--- 
a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
+++ 
b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCheckCommand.java
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.run;
 
 import static org.apache.jackrabbit.guava.common.base.Stopwatch.createStarted;
-import static org.apache.jackrabbit.guava.common.io.Closeables.close;
 import static java.io.File.createTempFile;
 import static java.util.Arrays.asList;
 import static org.apache.commons.io.FileUtils.forceDelete;
@@ -47,7 +46,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.jackrabbit.guava.common.base.Splitter;
 import org.apache.jackrabbit.guava.common.base.Stopwatch;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.jackrabbit.guava.common.io.Closer;
 import com.mongodb.MongoClient;
 import com.mongodb.MongoClientURI;
@@ -426,10 +424,8 @@ public class DataStoreCheckCommand implements Command {
 
     private static void retrieveBlobReferences(GarbageCollectableBlobStore 
blobStore, BlobReferenceRetriever marker,
         File marked, String dsType, boolean isVerbose) throws IOException {
-        final BufferedWriter writer = new BufferedWriter(new 
FileWriter(marked, StandardCharsets.UTF_8));
         final AtomicInteger count = new AtomicInteger();
-        boolean threw = true;
-        try {
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(marked, 
StandardCharsets.UTF_8))) {
             final GarbageCollectableBlobStore finalBlobStore = blobStore;
 
             System.out.println("Starting dump of blob references");
@@ -464,9 +460,6 @@ public class DataStoreCheckCommand implements Command {
 
             System.out.println(count.get() + " blob references found");
             System.out.println("Finished in " + 
watch.elapsed(TimeUnit.SECONDS) + " seconds");
-            threw = false;
-        } finally {
-            close(writer, threw);
         }
     }
 
@@ -543,14 +536,11 @@ public class DataStoreCheckCommand implements Command {
         }
 
         public void traverse(String ... paths) throws IOException {
-            BufferedWriter writer = null;
             final AtomicInteger count = new AtomicInteger();
-            boolean threw = true;
             System.out.println("Starting dump of blob references by 
traversing");
             Stopwatch watch = createStarted();
 
-            try {
-                writer = new BufferedWriter(new FileWriter(references, 
StandardCharsets.UTF_8));
+            try (BufferedWriter writer = new BufferedWriter(new 
FileWriter(references, StandardCharsets.UTF_8))) {
                 if (paths.length == 0) {
                     traverseChildren(nodeStore.getRoot(), "/", writer, count);
                 } else {
@@ -570,9 +560,6 @@ public class DataStoreCheckCommand implements Command {
 
                 System.out.println(count.get() + " blob references found");
                 System.out.println("Finished in " + 
watch.elapsed(TimeUnit.SECONDS) + " seconds");
-                threw = false;
-            } finally {
-                Closeables.close(writer, threw);
             }
         }
 
diff --git 
a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java 
b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java
index 1ead8f7cc7..08f334582e 100644
--- a/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java
+++ b/oak-run/src/main/java/org/apache/jackrabbit/oak/run/DataStoreCommand.java
@@ -41,7 +41,6 @@ import java.util.stream.StreamSupport;
 
 import org.apache.jackrabbit.guava.common.base.Splitter;
 import org.apache.jackrabbit.guava.common.base.Stopwatch;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.jackrabbit.guava.common.io.Closer;
 import joptsimple.OptionParser;
 import org.apache.commons.io.FileUtils;
@@ -197,10 +196,8 @@ public class DataStoreCommand implements Command {
             if (dataStoreOpts.dumpRefs()) {
                 log.info("Initiating dump of data store references");
                 final File referencesTemp = File.createTempFile("traverseref", 
null, new File(opts.getTempDirectory()));
-                final BufferedWriter writer = new BufferedWriter(new 
FileWriter(referencesTemp, StandardCharsets.UTF_8));
 
-                boolean threw = true;
-                try {
+                try (BufferedWriter writer = new BufferedWriter(new 
FileWriter(referencesTemp, StandardCharsets.UTF_8))) {
                     BlobReferenceRetriever retriever = getRetriever(fixture, 
dataStoreOpts, opts);
 
                     retriever.collectReferences(new ReferenceCollector() {
@@ -228,7 +225,6 @@ public class DataStoreCommand implements Command {
 
                     writer.flush();
                     writer.close();
-                    threw = false;
 
                     sort(referencesTemp, idComparator);
 
@@ -238,8 +234,6 @@ public class DataStoreCommand implements Command {
                     FileUtils.forceMkdir(parent);
 
                     FileUtils.copyFile(referencesTemp, references);
-                } finally {
-                    Closeables.close(writer, threw);
                 }
             } else if (dataStoreOpts.dumpIds()) {
                 log.info("Initiating dump of data store IDs");
diff --git 
a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
 
b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
index 259e16dcf1..cf885a284e 100644
--- 
a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
+++ 
b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
@@ -55,7 +55,6 @@ import java.util.Map;
 import javax.jcr.PropertyType;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
@@ -645,17 +644,24 @@ public class DefaultSegmentWriter implements 
SegmentWriter {
                 threw = false;
                 return id;
             } finally {
-                Closeables.close(stream, threw);
+                try {
+                    IOUtils.close(stream);
+                } catch (IOException ex) {
+                    if (!threw) {
+                        throw ex;
+                    }
+                    LOG.warn("IOException thrown while closing stream", ex);
+                }
             }
         }
 
         private RecordId internalWriteStream(@NotNull InputStream stream) 
throws IOException {
             // Special case for short binaries (up to about 
binariesInlineThreshold, 16kB by default):
             // store them directly as small- or medium-sized value records
-                       
+
             byte[] data = new byte[binariesInlineThreshold];
             int n = IOUtils.read(stream, data, 0, data.length);
-            
+
             if (n < binariesInlineThreshold) {
                 return writeValueRecord(n, data);
             }
diff --git 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
index a91470d0ed..0cb16d0d63 100644
--- 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
+++ 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
@@ -41,10 +41,10 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.guava.common.base.Stopwatch;
 import org.apache.jackrabbit.guava.common.collect.Iterables;
 import org.apache.jackrabbit.guava.common.collect.Iterators;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import org.apache.jackrabbit.guava.common.util.concurrent.AtomicDouble;
 import com.mongodb.Block;
 import com.mongodb.DBObject;
@@ -2030,7 +2030,7 @@ public class MongoDocumentStore implements DocumentStore {
             clusterNodesConnection.close();
         }
         try {
-            Closeables.close(throttlingMetricsUpdater, false);
+            IOUtils.close(throttlingMetricsUpdater);
         } catch (IOException e) {
             LOG.warn("Error occurred while closing throttlingMetricsUpdater", 
e);
         }
diff --git 
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
 
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
index 8c5b97018e..aa4a58ff6f 100644
--- 
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
+++ 
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/MongoBlobGCTest.java
@@ -36,7 +36,6 @@ import ch.qos.logback.classic.Level;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.guava.common.base.Splitter;
 import org.apache.jackrabbit.guava.common.base.Stopwatch;
-import org.apache.jackrabbit.guava.common.io.Closeables;
 import com.mongodb.BasicDBObject;
 import com.mongodb.ReadPreference;
 import com.mongodb.client.MongoCollection;
@@ -398,26 +397,18 @@ public class MongoBlobGCTest extends 
AbstractMongoConnectionTest {
     }
 
     private static void assertBlobReferences(Set<String> expected, String 
rootFolder) throws IOException {
-        InputStream is = null;
-        try {
-            is = new FileInputStream(getMarkedFile(rootFolder));
+        try (InputStream is = new FileInputStream(getMarkedFile(rootFolder))) {
             Set<String> records = FileIOUtils.readStringsAsSet(is, true);
             assertEquals(expected, records);
-        } finally {
-            Closeables.close(is, false);
         }
     }
 
     private static void assertBlobReferenceRecords(int expected, String 
rootFolder) throws IOException {
-        InputStream is = null;
-        try {
-            is = new FileInputStream(getMarkedFile(rootFolder));
+        try (InputStream is = new FileInputStream(getMarkedFile(rootFolder))) {
             Set<String> records = FileIOUtils.readStringsAsSet(is, true);
             for (String rec : records) {
                 assertEquals(expected, 
Splitter.on(",").omitEmptyStrings().splitToList(rec).size());
             }
-        } finally {
-            Closeables.close(is, false);
         }
     }
 
@@ -509,42 +500,36 @@ public class MongoBlobGCTest extends 
AbstractMongoConnectionTest {
             this.maxLastModifiedInterval = maxLastModifiedInterval;
             this.additionalBlobs = new HashSet<>();
         }
-        
+
         @Override
         protected void markAndSweep(boolean markOnly, boolean 
forceBlobRetrieve) throws Exception {
-            boolean threw = true;
-            GarbageCollectorFileState fs = new GarbageCollectorFileState(root);
-            try {
+
+            try (GarbageCollectorFileState fs = new 
GarbageCollectorFileState(root)) {
                 Stopwatch sw = Stopwatch.createStarted();
                 LOG.info("Starting Test Blob garbage collection");
-                
+
                 // Sleep a little more than the max interval to get over the 
interval for valid blobs
                 Thread.sleep(maxLastModifiedInterval + 1000);
                 LOG.info("Slept {} to make blobs old", maxLastModifiedInterval 
+ 1000);
-                
+
                 long markStart = System.currentTimeMillis();
                 mark(fs);
                 LOG.info("Mark finished");
-                
+
                 additionalBlobs = createAdditional();
-    
+
                 if (!markOnly) {
                     Thread.sleep(maxLastModifiedInterval + 100);
                     LOG.info("Slept {} to make additional blobs old", 
maxLastModifiedInterval + 100);
-    
+
                     long deleteCount = sweep(fs, markStart, forceBlobRetrieve);
-                    threw = false;
-            
+
                     LOG.info("Blob garbage collection completed in {}. Number 
of blobs deleted [{}]", sw.toString(),
                         deleteCount, maxLastModifiedInterval);
                 }
-            } finally {
-                if (!LOG.isTraceEnabled()) {
-                    Closeables.close(fs, threw);
-                }
             }
         }
-    
+
         public HashSet<String> createAdditional() throws Exception {
             HashSet<String> blobSet = new HashSet<String>();
             DocumentNodeStore s = mk.getNodeStore();


Reply via email to