This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new c7702ba81c2 CAMEL-21422: LoadTriplet should use lock just in case some
crazy high concurrency would read and update values at the same time (#16202)
c7702ba81c2 is described below
commit c7702ba81c28292fe94fb275bb31a5e9ff671293
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Nov 10 07:17:54 2024 +0100
CAMEL-21422: LoadTriplet should use lock just in case some crazy high
concurrency would read and update values at the same time (#16202)
---
.../apache/camel/management/mbean/LoadTriplet.java | 47 +++++++++++++++++-----
1 file changed, 38 insertions(+), 9 deletions(-)
diff --git
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/LoadTriplet.java
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/LoadTriplet.java
index fba87014e15..83a6f5df365 100644
---
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/LoadTriplet.java
+++
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/LoadTriplet.java
@@ -16,6 +16,9 @@
*/
package org.apache.camel.management.mbean;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
/**
* Holds the loads averaged over 1min, 5min, and 15min.
*/
@@ -26,6 +29,7 @@ public final class LoadTriplet {
private static final double EXP_5 = Math.exp(-1 / (60.0 * 5.0));
private static final double EXP_15 = Math.exp(-1 / (60.0 * 15.0));
+ private static final Lock LOCK = new ReentrantLock();
private double load01 = Double.NaN;
private double load05 = Double.NaN;
private double load15 = Double.NaN;
@@ -36,9 +40,14 @@ public final class LoadTriplet {
* @param currentReading the current reading
*/
public void update(int currentReading) {
- load01 = updateLoad(currentReading, EXP_1, load01);
- load05 = updateLoad(currentReading, EXP_5, load05);
- load15 = updateLoad(currentReading, EXP_15, load15);
+ LOCK.lock();
+ try {
+ load01 = updateLoad(currentReading, EXP_1, load01);
+ load05 = updateLoad(currentReading, EXP_5, load05);
+ load15 = updateLoad(currentReading, EXP_15, load15);
+ } finally {
+ LOCK.unlock();
+ }
}
private double updateLoad(int reading, double exp, double recentLoad) {
@@ -46,21 +55,41 @@ public final class LoadTriplet {
}
public double getLoad1() {
- return load01;
+ LOCK.lock();
+ try {
+ return load01;
+ } finally {
+ LOCK.unlock();
+ }
}
public double getLoad5() {
- return load05;
+ LOCK.lock();
+ try {
+ return load05;
+ } finally {
+ LOCK.unlock();
+ }
}
public double getLoad15() {
- return load15;
+ LOCK.lock();
+ try {
+ return load15;
+ } finally {
+ LOCK.unlock();
+ }
}
public void reset() {
- load01 = Double.NaN;
- load05 = Double.NaN;
- load15 = Double.NaN;
+ LOCK.lock();
+ try {
+ load01 = Double.NaN;
+ load05 = Double.NaN;
+ load15 = Double.NaN;
+ } finally {
+ LOCK.unlock();
+ }
}
@Override