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

Reply via email to