diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java index 4c467f9c25..412e82e153 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java @@ -30,8 +30,10 @@ import org.slf4j.LoggerFactory; import java.io.Closeable; import java.util.HashSet; +import java.util.Set; import java.util.UUID; import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -45,13 +47,13 @@ public abstract class AbstractPersistentCache implements PersistentCache, Closea protected ExecutorService executor; protected AtomicLong cacheSize = new AtomicLong(0); protected PersistentCache nextCache; - protected final HashSet writesPending; + protected final Set writesPending; protected SegmentCacheStats segmentCacheStats; public AbstractPersistentCache() { executor = Executors.newFixedThreadPool(THREADS); - writesPending = new HashSet<>(); + writesPending = ConcurrentHashMap.newKeySet(); } public PersistentCache linkWith(AbstractPersistentCache nextCache) { @@ -139,20 +141,14 @@ public abstract class AbstractPersistentCache implements PersistentCache, Closea } public int getWritesPending() { - synchronized (writesPending) { return writesPending.size(); } - } protected boolean lockSegmentWrite(String segmentId) { - synchronized (writesPending) { return writesPending.add(segmentId); } - } protected void unlockSegmentWrite(String segmentId) { - synchronized (writesPending) { writesPending.remove(segmentId); } } -}