This is an automated email from the ASF dual-hosted git repository. daim pushed a commit to branch OAK-12033 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit a96a80c4586e38353fe712b297f1459efb175d48 Author: rishabhdaim <[email protected]> AuthorDate: Tue Dec 9 17:15:27 2025 +0530 OAK-12033 : replaced Guava's Monitor with ReentrantLock --- .../jackrabbit/oak/segment/file/FileStoreIT.java | 36 ++++++++++++--------- .../oak/plugins/document/DocumentNodeStoreIT.java | 37 ++++++++++++---------- 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java index 7bab47abb3..82e756bb75 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java @@ -42,9 +42,10 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; -import org.apache.jackrabbit.guava.common.util.concurrent.Monitor; -import org.apache.jackrabbit.guava.common.util.concurrent.Monitor.Guard; import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.plugins.memory.AbstractBlob; import org.apache.jackrabbit.oak.plugins.memory.ArrayBasedBlob; @@ -257,20 +258,23 @@ public class FileStoreIT { /* A blob that blocks on read until unblocked */ class BlockingBlob extends AbstractBlob { private final AtomicBoolean blocking = new AtomicBoolean(true); - private final Monitor readMonitor = new Monitor(); + private final Lock lock = new ReentrantLock(); + private final Condition readingCondition = lock.newCondition(); private boolean reading = false; public boolean waitForRead(int time, TimeUnit unit) throws InterruptedException { - readMonitor.enter(); + long nanos = unit.toNanos(time); + lock.lock(); try { - return readMonitor.waitFor(new Guard(readMonitor) { - @Override - public boolean isSatisfied() { - return reading; + while (!reading) { + if (nanos <= 0L) { + return false; // timed out } - }, time, unit); + nanos = readingCondition.awaitNanos(nanos); + } + return true; // reading == true } finally { - readMonitor.leave(); + lock.unlock(); } } @@ -295,13 +299,15 @@ public class FileStoreIT { private int readOrEnd() { if (blocking.get()) { - if (!reading) { - readMonitor.enter(); - try { + lock.lock(); + try { + if (!reading) { reading = true; - } finally { - readMonitor.leave(); + // wake up any threads waiting in waitForRead + readingCondition.signalAll(); } + } finally { + lock.unlock(); } return 0; } else { diff --git a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java index b6d2d491d0..d2fde3e593 100644 --- a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java +++ b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java @@ -17,7 +17,6 @@ package org.apache.jackrabbit.oak.plugins.document; import java.io.InputStream; -import java.util.Date; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; @@ -26,8 +25,9 @@ import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; - -import org.apache.jackrabbit.guava.common.util.concurrent.Monitor; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser; @@ -454,20 +454,23 @@ public class DocumentNodeStoreIT extends AbstractDocumentStoreTest { */ class BlockingBlob extends AbstractBlob { private final AtomicBoolean blocking = new AtomicBoolean(true); - private final Monitor readMonitor = new Monitor(); + private final Lock lock = new ReentrantLock(); + private final Condition readingCondition = lock.newCondition(); private boolean reading = false; boolean waitForRead(int time, TimeUnit unit) throws InterruptedException { - readMonitor.enter(); + long nanos = unit.toNanos(time); + lock.lock(); try { - return readMonitor.waitFor(new Monitor.Guard(readMonitor) { - @Override - public boolean isSatisfied() { - return reading; + while (!reading) { + if (nanos <= 0L) { + return false; // timed out } - }, time, unit); + nanos = readingCondition.awaitNanos(nanos); + } + return true; // reading == true } finally { - readMonitor.leave(); + lock.unlock(); } } @@ -483,13 +486,15 @@ public class DocumentNodeStoreIT extends AbstractDocumentStoreTest { @Override public int read() { while (blocking.get()) { - if (!reading) { - readMonitor.enter(); - try { + lock.lock(); + try { + if (!reading) { reading = true; - } finally { - readMonitor.leave(); + // wake up anyone waiting in waitForRead() + readingCondition.signalAll(); } + } finally { + lock.unlock(); } } return -1;
