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;