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 f277fe135a OAK-12037 : remove usage of Guava's Monitor from oak-lucene
(#2660)
f277fe135a is described below
commit f277fe135a2b489bd34cb8d6d0b6e23686466228
Author: Rishabh Kumar <[email protected]>
AuthorDate: Thu Jan 15 19:59:29 2026 +0530
OAK-12037 : remove usage of Guava's Monitor from oak-lucene (#2660)
---
.../oak/plugins/index/lucene/IndexCopier.java | 34 +++++++++++++---------
1 file changed, 21 insertions(+), 13 deletions(-)
diff --git
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
index 28f18af0d7..62dcf2b126 100644
---
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
+++
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
@@ -30,6 +30,9 @@ import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.CompositeType;
@@ -40,7 +43,6 @@ import javax.management.openmbean.TabularData;
import javax.management.openmbean.TabularDataSupport;
import javax.management.openmbean.TabularType;
-import org.apache.jackrabbit.guava.common.util.concurrent.Monitor;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.oak.commons.collections.IterableUtils;
import org.apache.jackrabbit.oak.commons.collections.SetUtils;
@@ -95,7 +97,8 @@ public class IndexCopier implements CopyOnReadStatsMBean,
Closeable {
private final AtomicLong downloadTime = new AtomicLong();
private final AtomicLong uploadTime = new AtomicLong();
- private final Monitor copyCompletionMonitor = new Monitor();
+ private final Lock copyCompletionLock = new ReentrantLock();
+ private final Condition notCopyingCondition =
copyCompletionLock.newCondition();
private final Map<String, String> indexPathVersionMapping = new
ConcurrentHashMap<>();
private final ConcurrentMap<String, LocalIndexFile> failedToDeleteFiles =
new ConcurrentHashMap<>();
@@ -363,28 +366,31 @@ public class IndexCopier implements CopyOnReadStatsMBean,
Closeable {
* @param timeoutMillis
*/
public void waitForCopyCompletion(LocalIndexFile file, long timeoutMillis)
{
- final Monitor.Guard notCopyingGuard = new
Monitor.Guard(copyCompletionMonitor) {
- @Override
- public boolean isSatisfied() {
- return !isCopyInProgress(file);
- }
- };
long localLength = file.actualSize();
long lastLocalLength = localLength;
boolean notCopying = !isCopyInProgress(file);
while (!notCopying) {
+ final long deadline = System.nanoTime() +
TimeUnit.MILLISECONDS.toNanos(timeoutMillis);
+ copyCompletionLock.lock();
try {
if (log.isDebugEnabled()) {
log.debug("Checking for copy completion of {} - {}",
file.getKey(), file.copyLog());
}
- notCopying = copyCompletionMonitor.enterWhen(notCopyingGuard,
timeoutMillis, TimeUnit.MILLISECONDS);
- if (notCopying) {
- copyCompletionMonitor.leave();
+ while (isCopyInProgress(file)) {
+ long remaining = deadline - System.nanoTime();
+ if (remaining <= 0) {
+ // timeout
+ break;
+ }
+ notCopyingCondition.awaitNanos(remaining);
}
+ notCopying = !isCopyInProgress(file);
} catch (InterruptedException e) {
// ignore and reset interrupt flag
Thread.currentThread().interrupt();
+ } finally {
+ copyCompletionLock.unlock();
}
localLength = file.actualSize();
@@ -405,11 +411,13 @@ public class IndexCopier implements CopyOnReadStatsMBean,
Closeable {
}
public void doneCopy(LocalIndexFile file, long start) {
- copyCompletionMonitor.enter();
+ copyCompletionLock.lock();
try {
copyInProgressFiles.remove(file);
+ // wake up any threads waiting in waitForCopyCompletion(...)
+ notCopyingCondition.signalAll();
} finally {
- copyCompletionMonitor.leave();
+ copyCompletionLock.unlock();
}
copyInProgressCount.decrementAndGet();
copyInProgressSize.addAndGet(-file.getSize());