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

daim 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 2528f0960c OAK-12033 : replaced Guava's Monitor with ReentrantLock 
(#2654)
2528f0960c is described below

commit 2528f0960cc80f80164f63571a24bd584881eca7
Author: Rishabh Kumar <[email protected]>
AuthorDate: Sun Dec 14 21:17:56 2025 +0530

    OAK-12033 : replaced Guava's Monitor with ReentrantLock (#2654)
---
 .../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;

Reply via email to