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