Darrel Schneider created GEODE-6890:
---------------------------------------

             Summary: sentMessagesMaxTime stat calculation needs improvement
                 Key: GEODE-6890
                 URL: https://issues.apache.org/jira/browse/GEODE-6890
             Project: Geode
          Issue Type: Improvement
          Components: statistics
            Reporter: Darrel Schneider


The sentMessagesMaxTime stat is calculated by reading the old value. This read 
is an expensive synchronized operation.

The following is a prototype fix that uses a local atomic:

{noformat}
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java
index d591e35570..0b5017b857 100644
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java
@@ -1035,6 +1035,8 @@ public class DistributionStats implements DMStats {
     return this.stats.getLong(sentMessagesTimeId);
   }
 
+  private final AtomicLong sentMessagesMaxTime = new AtomicLong();
+
   /**
    * Increments the total number of nanoseconds spend sending messages.
    * <p>
@@ -1045,8 +1047,17 @@ public class DistributionStats implements DMStats {
     if (enableClockStats) {
       this.stats.incLong(sentMessagesTimeId, nanos);
       long millis = nanos / 1000000;
-      if (getSentMessagesMaxTime() < millis) {
-        this.stats.setLong(sentMessagesMaxTimeId, millis);
+      boolean done = false;
+      while (!done) {
+        long currentSentMessagesMaxTime = sentMessagesMaxTime.get();
+        if (millis > currentSentMessagesMaxTime) {
+          done = replyWaitMaxTime.compareAndSet(currentSentMessagesMaxTime, 
millis);
+          if (done) {
+            stats.setLong(sentMessagesMaxTimeId, millis);
+          }
+        } else {
+          done = true;
+        }
       }
     }
   }
{noformat}




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to