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 79b7fcb385 OAK-11771 : removed usage of AtomicDouble (#2374)
79b7fcb385 is described below
commit 79b7fcb38522dbeac1259567071692b2aeabcb44
Author: Rishabh Kumar <[email protected]>
AuthorDate: Mon Jul 7 18:11:19 2025 +0530
OAK-11771 : removed usage of AtomicDouble (#2374)
Co-authored-by: Rishabh Kumar <[email protected]>
---
.../plugins/document/mongo/MongoDocumentStore.java | 4 ++--
...MongoDocumentStoreThrottlingMetricsUpdater.java | 12 +++++------
.../document/mongo/MongoThrottlerFactory.java | 11 +++++-----
.../document/mongo/MongoThrottlerFactoryTest.java | 25 +++++++++++-----------
4 files changed, 27 insertions(+), 25 deletions(-)
diff --git
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
index 8d713e2547..8ef0640e7e 100644
---
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
+++
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
@@ -36,6 +36,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Lock;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -43,7 +44,6 @@ import java.util.stream.StreamSupport;
import org.apache.commons.io.IOUtils;
import com.mongodb.client.model.IndexOptions;
-import org.apache.jackrabbit.guava.common.util.concurrent.AtomicDouble;
import com.mongodb.Block;
import com.mongodb.DBObject;
import com.mongodb.MongoBulkWriteException;
@@ -368,7 +368,7 @@ public class MongoDocumentStore implements DocumentStore {
if (ol.isPresent()) {
// oplog window based on current oplog filling rate
- final AtomicDouble oplogWindow = new AtomicDouble(MAX_VALUE);
+ final AtomicReference<Double> oplogWindow = new
AtomicReference<>((double) MAX_VALUE);
throttler = exponentialThrottler(DEFAULT_THROTTLING_THRESHOLD,
oplogWindow, DEFAULT_THROTTLING_TIME_MS);
throttlingMetricsUpdater = new
MongoDocumentStoreThrottlingMetricsUpdater(localDb, oplogWindow);
throttlingMetricsUpdater.scheduleUpdateMetrics();
diff --git
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreThrottlingMetricsUpdater.java
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreThrottlingMetricsUpdater.java
index 8729cb69f4..5c48a57ae6 100644
---
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreThrottlingMetricsUpdater.java
+++
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreThrottlingMetricsUpdater.java
@@ -19,7 +19,6 @@
package org.apache.jackrabbit.oak.plugins.document.mongo;
import org.apache.commons.math3.util.Precision;
-import org.apache.jackrabbit.guava.common.util.concurrent.AtomicDouble;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
@@ -33,6 +32,7 @@ import java.io.Closeable;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.atomic.AtomicReference;
import static java.lang.Integer.MAX_VALUE;
import static java.lang.Math.abs;
@@ -55,10 +55,10 @@ public class MongoDocumentStoreThrottlingMetricsUpdater
implements Closeable {
private static final String OPLOG_RS = "oplog.rs";
public static final String SIZE = "size";
private final ScheduledExecutorService throttlingMetricsExecutor;
- private final AtomicDouble oplogWindow;
+ private final AtomicReference<Double> oplogWindow;
private final MongoDatabase localDb;
- public MongoDocumentStoreThrottlingMetricsUpdater(final @NotNull
MongoDatabase localDb, final @NotNull AtomicDouble oplogWindow) {
+ public MongoDocumentStoreThrottlingMetricsUpdater(final @NotNull
MongoDatabase localDb, final @NotNull AtomicReference<Double> oplogWindow) {
this.throttlingMetricsExecutor = newSingleThreadScheduledExecutor();
this.oplogWindow = oplogWindow;
this.localDb = localDb;
@@ -69,7 +69,7 @@ public class MongoDocumentStoreThrottlingMetricsUpdater
implements Closeable {
Document document = localDb.runCommand(new Document("collStats",
OPLOG_RS));
if (!document.containsKey(MAX_SIZE) ||
!document.containsKey(SIZE)) {
LOG.warn("Could not get stats for local.{} collection.
collstats returned: {}.", OPLOG_RS, document);
- oplogWindow.set(MAX_VALUE);
+ oplogWindow.set((double) MAX_VALUE);
} else {
int maxSize = document.getInteger(MAX_SIZE);
double maxSizeGb = (double) maxSize / (1024 * 1024 * 1024);
@@ -81,11 +81,11 @@ public class MongoDocumentStoreThrottlingMetricsUpdater
implements Closeable {
if (isNull(first) || isNull(last)) {
LOG.warn("Objects not found in local.oplog.rs -- is this a
new and empty db instance?");
- oplogWindow.set(MAX_VALUE);
+ oplogWindow.set((double) MAX_VALUE);
} else {
if (!first.containsKey(TS_TIME) ||
!last.containsKey(TS_TIME)) {
LOG.warn("ts element not found in oplog objects");
- oplogWindow.set(MAX_VALUE);
+ oplogWindow.set((double) MAX_VALUE);
} else {
oplogWindow.set(updateOplogWindow(maxSizeGb,
usedSizeGb, first, last));
}
diff --git
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactory.java
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactory.java
index 30fbf23998..091fed9b3f 100644
---
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactory.java
+++
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactory.java
@@ -19,10 +19,11 @@
package org.apache.jackrabbit.oak.plugins.document.mongo;
import org.apache.commons.math3.util.Precision;
-import org.apache.jackrabbit.guava.common.util.concurrent.AtomicDouble;
import org.apache.jackrabbit.oak.plugins.document.Throttler;
import org.jetbrains.annotations.NotNull;
+import java.util.concurrent.atomic.AtomicReference;
+
import static java.util.Objects.requireNonNull;
import static
org.apache.jackrabbit.oak.plugins.document.Throttler.NO_THROTTLING;
@@ -41,7 +42,7 @@ public final class MongoThrottlerFactory {
* @param throttlingTime time duration for throttling
* @return an exponential throttler to throttle system if required
*/
- public static Throttler exponentialThrottler(final int threshold, final
AtomicDouble oplogWindow, final long throttlingTime) {
+ public static Throttler exponentialThrottler(final int threshold, final
AtomicReference<Double> oplogWindow, final long throttlingTime) {
requireNonNull(oplogWindow);
return new ExponentialThrottler(threshold, oplogWindow,
throttlingTime);
}
@@ -58,10 +59,10 @@ public final class MongoThrottlerFactory {
private final int threshold;
@NotNull
- private final AtomicDouble oplogWindow;
+ private final AtomicReference<Double> oplogWindow;
private final long throttlingTime;
- public ExponentialThrottler(final int threshold, final @NotNull
AtomicDouble oplogWindow, final long throttlingTime) {
+ public ExponentialThrottler(final int threshold, final @NotNull
AtomicReference<Double> oplogWindow, final long throttlingTime) {
this.threshold = threshold;
this.oplogWindow = oplogWindow;
this.throttlingTime = throttlingTime;
@@ -75,7 +76,7 @@ public final class MongoThrottlerFactory {
@Override
public long throttlingTime() {
final double threshold = this.threshold;
- final double oplogWindow = this.oplogWindow.doubleValue();
+ final double oplogWindow = this.oplogWindow.get();
long throttleTime = throttlingTime;
if (Precision.compareTo(oplogWindow,threshold/8, 0.001) <= 0) {
diff --git
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactoryTest.java
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactoryTest.java
index e8d4ddf9a3..6d7180d6ac 100644
---
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactoryTest.java
+++
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoThrottlerFactoryTest.java
@@ -18,10 +18,11 @@
*/
package org.apache.jackrabbit.oak.plugins.document.mongo;
-import org.apache.jackrabbit.guava.common.util.concurrent.AtomicDouble;
import org.apache.jackrabbit.oak.plugins.document.Throttler;
import org.junit.Test;
+import java.util.concurrent.atomic.AtomicReference;
+
import static
org.apache.jackrabbit.oak.plugins.document.mongo.MongoThrottlerFactory.exponentialThrottler;
import static
org.apache.jackrabbit.oak.plugins.document.mongo.MongoThrottlerFactory.noThrottler;
import static org.junit.Assert.assertEquals;
@@ -46,67 +47,67 @@ public class MongoThrottlerFactoryTest {
@Test
public void testExpThrottler() {
- Throttler throttler = exponentialThrottler(10, new AtomicDouble(11),
10);
+ Throttler throttler = exponentialThrottler(10, new
AtomicReference<>(11.0), 10);
assertEquals(0L, throttler.throttlingTime());
}
@Test
public void testExpThrottler_2() {
- Throttler throttler = exponentialThrottler(10, new
AtomicDouble(10.002), 10);
+ Throttler throttler = exponentialThrottler(10, new
AtomicReference<>(10.002), 10);
assertEquals(0L, throttler.throttlingTime());
}
@Test
public void testExpThrottlerNormalPace() {
- Throttler throttler = exponentialThrottler(10, new
AtomicDouble(10.001), 10);
+ Throttler throttler = exponentialThrottler(10, new
AtomicReference<>(10.001), 10);
assertEquals(10L, throttler.throttlingTime());
}
@Test
public void testThrottlingNormalPace_2() {
- Throttler throttler = exponentialThrottler(10, new
AtomicDouble(5.001), 10);
+ Throttler throttler = exponentialThrottler(10, new
AtomicReference<>(5.001), 10);
assertEquals(10L, throttler.throttlingTime());
}
@Test
public void testThrottlingDoublePace() {
- Throttler throttler = exponentialThrottler(10, new AtomicDouble(5.0),
10);
+ Throttler throttler = exponentialThrottler(10, new
AtomicReference<>(5.0), 10);
assertEquals(20L, throttler.throttlingTime());
}
@Test
public void testThrottlingDoublePace_2() {
- Throttler throttler = exponentialThrottler(10, new
AtomicDouble(5.0001), 10);
+ Throttler throttler = exponentialThrottler(10, new
AtomicReference<>(5.0001), 10);
assertEquals(20L, throttler.throttlingTime());
}
@Test
public void testThrottlingDoublePace_3() {
- Throttler throttler = exponentialThrottler(20, new
AtomicDouble(5.001), 10);
+ Throttler throttler = exponentialThrottler(20, new
AtomicReference<>(5.001), 10);
assertEquals(20L, throttler.throttlingTime());
}
@Test
public void testThrottlingQuadruplePace() {
- Throttler throttler = exponentialThrottler(20, new
AtomicDouble(5.0001), 10);
+ Throttler throttler = exponentialThrottler(20, new
AtomicReference<>(5.0001), 10);
assertEquals(40L, throttler.throttlingTime());
}
@Test
public void testThrottlingQuadruplePace_2() {
- Throttler throttler = exponentialThrottler(40, new
AtomicDouble(5.001), 10);
+ Throttler throttler = exponentialThrottler(40, new
AtomicReference<>(5.001), 10);
assertEquals(40L, throttler.throttlingTime());
}
@Test
public void testThrottlingOctagonalPace() {
- Throttler throttler = exponentialThrottler(80, new
AtomicDouble(5.0001), 10);
+ Throttler throttler = exponentialThrottler(80, new
AtomicReference<>(5.0001), 10);
assertEquals(80L, throttler.throttlingTime());
}
@Test
public void testThrottlingOctagonalPace_2() {
- Throttler throttler = exponentialThrottler(160, new
AtomicDouble(5.0001), 10);
+ Throttler throttler = exponentialThrottler(160, new
AtomicReference<>(5.0001), 10);
assertEquals(80L, throttler.throttlingTime());
}