From 9f9f0ce1259b4d4bf87ef93c1eb90902819c2af3 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Thu, 06 Aug 2026 07:58:50 +0000
Subject: [PATCH] Use LongAdder for LDAPStatistics counters (#678)

---
 opendj-server-legacy/src/main/java/org/opends/server/protocols/ldap/LDAPStatistics.java |  492 +++++++++++++++++++++++++++---------------------------
 1 files changed, 248 insertions(+), 244 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/protocols/ldap/LDAPStatistics.java b/opendj-server-legacy/src/main/java/org/opends/server/protocols/ldap/LDAPStatistics.java
index c2aa2dc..0c50d1c 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/protocols/ldap/LDAPStatistics.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/protocols/ldap/LDAPStatistics.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2006-2010 Sun Microsystems, Inc.
  * Portions Copyright 2012-2016 ForgeRock AS.
+ * Portions Copyright 2026 3A Systems, LLC
  */
 package org.opends.server.protocols.ldap;
 
@@ -20,7 +21,7 @@
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 
-import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.LongAdder;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.config.server.ConfigException;
@@ -57,64 +58,67 @@
 public class LDAPStatistics extends MonitorProvider<MonitorProviderCfg>
 {
 
-  // The statistics maintained by this class.
-  private AtomicLong abandonRequests = new AtomicLong(0);
-  private AtomicLong addRequests = new AtomicLong(0);
-  private AtomicLong bindRequests = new AtomicLong(0);
-  private AtomicLong addResponses = new AtomicLong(0);
-  private AtomicLong bindResponses = new AtomicLong(0);
-  private AtomicLong bytesRead = new AtomicLong(0);
-  private AtomicLong bytesWritten = new AtomicLong(0);
-  private AtomicLong compareRequests = new AtomicLong(0);
-  private AtomicLong compareResponses = new AtomicLong(0);
-  private AtomicLong connectionsClosed = new AtomicLong(0);
-  private AtomicLong connectionsEstablished = new AtomicLong(0);
-  private AtomicLong deleteRequests = new AtomicLong(0);
-  private AtomicLong deleteResponses = new AtomicLong(0);
-  private AtomicLong extendedRequests = new AtomicLong(0);
-  private AtomicLong extendedResponses = new AtomicLong(0);
-  private AtomicLong messagesRead = new AtomicLong(0);
-  private AtomicLong messagesWritten = new AtomicLong(0);
-  private AtomicLong modifyRequests = new AtomicLong(0);
-  private AtomicLong modifyResponses = new AtomicLong(0);
-  private AtomicLong modifyDNRequests = new AtomicLong(0);
-  private AtomicLong modifyDNResponses = new AtomicLong(0);
-  private AtomicLong operationsAbandoned = new AtomicLong(0);
-  private AtomicLong operationsCompleted = new AtomicLong(0);
-  private AtomicLong operationsInitiated = new AtomicLong(0);
-  private AtomicLong searchRequests = new AtomicLong(0);
-  private AtomicLong searchOneRequests = new AtomicLong(0);
-  private AtomicLong searchSubRequests = new AtomicLong(0);
-  private AtomicLong searchResultEntries = new AtomicLong(0);
-  private AtomicLong searchResultReferences = new AtomicLong(0);
-  private AtomicLong searchResultsDone = new AtomicLong(0);
-  private AtomicLong unbindRequests = new AtomicLong(0);
+  // The statistics maintained by this class. These counters are updated for
+  // every LDAP message on every connection of the handler, so they use
+  // LongAdder: under concurrency striped cells avoid all worker threads
+  // CAS-ing the same cache line, and reads (monitoring only) pay the cost.
+  private final LongAdder abandonRequests = new LongAdder();
+  private final LongAdder addRequests = new LongAdder();
+  private final LongAdder bindRequests = new LongAdder();
+  private final LongAdder addResponses = new LongAdder();
+  private final LongAdder bindResponses = new LongAdder();
+  private final LongAdder bytesRead = new LongAdder();
+  private final LongAdder bytesWritten = new LongAdder();
+  private final LongAdder compareRequests = new LongAdder();
+  private final LongAdder compareResponses = new LongAdder();
+  private final LongAdder connectionsClosed = new LongAdder();
+  private final LongAdder connectionsEstablished = new LongAdder();
+  private final LongAdder deleteRequests = new LongAdder();
+  private final LongAdder deleteResponses = new LongAdder();
+  private final LongAdder extendedRequests = new LongAdder();
+  private final LongAdder extendedResponses = new LongAdder();
+  private final LongAdder messagesRead = new LongAdder();
+  private final LongAdder messagesWritten = new LongAdder();
+  private final LongAdder modifyRequests = new LongAdder();
+  private final LongAdder modifyResponses = new LongAdder();
+  private final LongAdder modifyDNRequests = new LongAdder();
+  private final LongAdder modifyDNResponses = new LongAdder();
+  private final LongAdder operationsAbandoned = new LongAdder();
+  private final LongAdder operationsCompleted = new LongAdder();
+  private final LongAdder operationsInitiated = new LongAdder();
+  private final LongAdder searchRequests = new LongAdder();
+  private final LongAdder searchOneRequests = new LongAdder();
+  private final LongAdder searchSubRequests = new LongAdder();
+  private final LongAdder searchResultEntries = new LongAdder();
+  private final LongAdder searchResultReferences = new LongAdder();
+  private final LongAdder searchResultsDone = new LongAdder();
+  private final LongAdder unbindRequests = new LongAdder();
 
 
   /** The instance name for this monitor provider instance. */
   private final String instanceName;
 
   // Monitor Objects : for Operations (count and time)
-  private AtomicLong addOperationCount = new AtomicLong(0);
-  private AtomicLong addOperationTime = new AtomicLong(0);
-  private AtomicLong searchOperationCount = new AtomicLong(0);
-  private AtomicLong searchOperationTime = new AtomicLong(0);
-  private AtomicLong delOperationCount = new AtomicLong(0);
-  private AtomicLong delOperationTime = new AtomicLong(0);
-  private AtomicLong bindOperationCount = new AtomicLong(0);
-  private AtomicLong bindOperationTime = new AtomicLong(0);
-  private AtomicLong unbindOperationCount = new AtomicLong(0);
-  private AtomicLong unbindOperationTime = new AtomicLong(0);
-  private AtomicLong compOperationCount = new AtomicLong(0);
-  private AtomicLong compOperationTime = new AtomicLong(0);
-  private AtomicLong modOperationCount = new AtomicLong(0);
-  private AtomicLong modOperationTime = new AtomicLong(0);
-  private AtomicLong moddnOperationCount = new AtomicLong(0);
-  private AtomicLong moddnOperationTime = new AtomicLong(0);
-  private AtomicLong abandonOperationCount = new AtomicLong(0);
-  private AtomicLong abandonOperationTime = new AtomicLong(0);
-  private AtomicLong extOperationCount = new AtomicLong(0);
-  private AtomicLong extOperationTime = new AtomicLong(0);
+  private final LongAdder addOperationCount = new LongAdder();
+  private final LongAdder addOperationTime = new LongAdder();
+  private final LongAdder searchOperationCount = new LongAdder();
+  private final LongAdder searchOperationTime = new LongAdder();
+  private final LongAdder delOperationCount = new LongAdder();
+  private final LongAdder delOperationTime = new LongAdder();
+  private final LongAdder bindOperationCount = new LongAdder();
+  private final LongAdder bindOperationTime = new LongAdder();
+  private final LongAdder unbindOperationCount = new LongAdder();
+  private final LongAdder unbindOperationTime = new LongAdder();
+  private final LongAdder compOperationCount = new LongAdder();
+  private final LongAdder compOperationTime = new LongAdder();
+  private final LongAdder modOperationCount = new LongAdder();
+  private final LongAdder modOperationTime = new LongAdder();
+  private final LongAdder moddnOperationCount = new LongAdder();
+  private final LongAdder moddnOperationTime = new LongAdder();
+  private final LongAdder abandonOperationCount = new LongAdder();
+  private final LongAdder abandonOperationTime = new LongAdder();
+  private final LongAdder extOperationCount = new LongAdder();
+  private final LongAdder extOperationTime = new LongAdder();
 
   /**
    * Creates a new instance of this class with the specified parent.
@@ -168,77 +172,77 @@
      *        OC_MONITOR_CONNHANDLERSTATS
      */
     final MonitorData attrs = new MonitorData(31 + 10 * 2);
-    attrs.add("connectionsEstablished", connectionsEstablished);
-    attrs.add("connectionsClosed", connectionsClosed);
-    attrs.add("bytesRead", bytesRead);
-    attrs.add("bytesWritten", bytesWritten);
-    attrs.add("ldapMessagesRead", messagesRead);
-    attrs.add("ldapMessagesWritten", messagesWritten);
-    attrs.add("operationsAbandoned", operationsAbandoned);
-    attrs.add("operationsInitiated", operationsInitiated);
-    attrs.add("operationsCompleted", operationsCompleted);
-    attrs.add("abandonRequests", abandonRequests);
-    attrs.add("addRequests", addRequests);
-    attrs.add("addResponses", addResponses);
-    attrs.add("bindRequests", bindRequests);
-    attrs.add("bindResponses", bindResponses);
-    attrs.add("compareRequests", compareRequests);
-    attrs.add("compareResponses", compareResponses);
-    attrs.add("deleteRequests", deleteRequests);
-    attrs.add("deleteResponses", deleteResponses);
-    attrs.add("extendedRequests", extendedRequests);
-    attrs.add("extendedResponses", extendedResponses);
-    attrs.add("modifyRequests", modifyRequests);
-    attrs.add("modifyResponses", modifyResponses);
-    attrs.add("modifyDNRequests", modifyDNRequests);
-    attrs.add("modifyDNResponses", modifyDNResponses);
-    attrs.add("searchRequests", searchRequests);
-    attrs.add("searchOneRequests", searchOneRequests);
-    attrs.add("searchSubRequests", searchSubRequests);
-    attrs.add("searchResultEntries", searchResultEntries);
-    attrs.add("searchResultReferences", searchResultReferences);
-    attrs.add("searchResultsDone", searchResultsDone);
-    attrs.add("unbindRequests", unbindRequests);
+    attrs.add("connectionsEstablished", connectionsEstablished.sum());
+    attrs.add("connectionsClosed", connectionsClosed.sum());
+    attrs.add("bytesRead", bytesRead.sum());
+    attrs.add("bytesWritten", bytesWritten.sum());
+    attrs.add("ldapMessagesRead", messagesRead.sum());
+    attrs.add("ldapMessagesWritten", messagesWritten.sum());
+    attrs.add("operationsAbandoned", operationsAbandoned.sum());
+    attrs.add("operationsInitiated", operationsInitiated.sum());
+    attrs.add("operationsCompleted", operationsCompleted.sum());
+    attrs.add("abandonRequests", abandonRequests.sum());
+    attrs.add("addRequests", addRequests.sum());
+    attrs.add("addResponses", addResponses.sum());
+    attrs.add("bindRequests", bindRequests.sum());
+    attrs.add("bindResponses", bindResponses.sum());
+    attrs.add("compareRequests", compareRequests.sum());
+    attrs.add("compareResponses", compareResponses.sum());
+    attrs.add("deleteRequests", deleteRequests.sum());
+    attrs.add("deleteResponses", deleteResponses.sum());
+    attrs.add("extendedRequests", extendedRequests.sum());
+    attrs.add("extendedResponses", extendedResponses.sum());
+    attrs.add("modifyRequests", modifyRequests.sum());
+    attrs.add("modifyResponses", modifyResponses.sum());
+    attrs.add("modifyDNRequests", modifyDNRequests.sum());
+    attrs.add("modifyDNResponses", modifyDNResponses.sum());
+    attrs.add("searchRequests", searchRequests.sum());
+    attrs.add("searchOneRequests", searchOneRequests.sum());
+    attrs.add("searchSubRequests", searchSubRequests.sum());
+    attrs.add("searchResultEntries", searchResultEntries.sum());
+    attrs.add("searchResultReferences", searchResultReferences.sum());
+    attrs.add("searchResultsDone", searchResultsDone.sum());
+    attrs.add("unbindRequests", unbindRequests.sum());
 
     // adds
-    attrs.add("ds-mon-add-operations-total-count", addOperationCount);
-    attrs.add("ds-mon-resident-time-add-operations-total-time", addOperationTime);
+    attrs.add("ds-mon-add-operations-total-count", addOperationCount.sum());
+    attrs.add("ds-mon-resident-time-add-operations-total-time", addOperationTime.sum());
 
     // search
-    attrs.add("ds-mon-search-operations-total-count", searchOperationCount);
-    attrs.add("ds-mon-resident-time-search-operations-total-time", searchOperationTime);
+    attrs.add("ds-mon-search-operations-total-count", searchOperationCount.sum());
+    attrs.add("ds-mon-resident-time-search-operations-total-time", searchOperationTime.sum());
 
     // bind
-    attrs.add("ds-mon-bind-operations-total-count", bindOperationCount);
-    attrs.add("ds-mon-resident-time-bind-operations-total-time", bindOperationTime);
+    attrs.add("ds-mon-bind-operations-total-count", bindOperationCount.sum());
+    attrs.add("ds-mon-resident-time-bind-operations-total-time", bindOperationTime.sum());
 
     // unbind
-    attrs.add("ds-mon-unbind-operations-total-count", unbindOperationCount);
-    attrs.add("ds-mon-resident-time-unbind-operations-total-time", unbindOperationTime);
+    attrs.add("ds-mon-unbind-operations-total-count", unbindOperationCount.sum());
+    attrs.add("ds-mon-resident-time-unbind-operations-total-time", unbindOperationTime.sum());
 
     // compare
-    attrs.add("ds-mon-compare-operations-total-count", compOperationCount);
-    attrs.add("ds-mon-resident-time-compare-operations-total-time", compOperationTime);
+    attrs.add("ds-mon-compare-operations-total-count", compOperationCount.sum());
+    attrs.add("ds-mon-resident-time-compare-operations-total-time", compOperationTime.sum());
 
     // del
-    attrs.add("ds-mon-delete-operations-total-count", delOperationCount);
-    attrs.add("ds-mon-resident-time-delete-operations-total-time", delOperationTime);
+    attrs.add("ds-mon-delete-operations-total-count", delOperationCount.sum());
+    attrs.add("ds-mon-resident-time-delete-operations-total-time", delOperationTime.sum());
 
     // mod
-    attrs.add("ds-mon-mod-operations-total-count", modOperationCount);
-    attrs.add("ds-mon-resident-time-mod-operations-total-time", modOperationTime);
+    attrs.add("ds-mon-mod-operations-total-count", modOperationCount.sum());
+    attrs.add("ds-mon-resident-time-mod-operations-total-time", modOperationTime.sum());
 
     // moddn
-    attrs.add("ds-mon-moddn-operations-total-count", moddnOperationCount);
-    attrs.add("ds-mon-resident-time-moddn-operations-total-time", moddnOperationTime);
+    attrs.add("ds-mon-moddn-operations-total-count", moddnOperationCount.sum());
+    attrs.add("ds-mon-resident-time-moddn-operations-total-time", moddnOperationTime.sum());
 
     // abandon
-    attrs.add("ds-mon-abandon-operations-total-count", abandonOperationCount);
-    attrs.add("ds-mon-resident-time-abandon-operations-total-time", abandonOperationTime);
+    attrs.add("ds-mon-abandon-operations-total-count", abandonOperationCount.sum());
+    attrs.add("ds-mon-resident-time-abandon-operations-total-time", abandonOperationTime.sum());
 
     // extended
-    attrs.add("ds-mon-extended-operations-total-count", extOperationCount);
-    attrs.add("ds-mon-resident-time-extended-operations-total-time", extOperationTime);
+    attrs.add("ds-mon-extended-operations-total-count", extOperationCount.sum());
+    attrs.add("ds-mon-resident-time-extended-operations-total-time", extOperationTime.sum());
 
     return attrs;
   }
@@ -246,58 +250,58 @@
   /** Clears any statistical information collected to this point. */
   public void clearStatistics()
   {
-      abandonRequests.set(0);
-      addRequests.set(0);
-      addResponses.set(0);
-      bindRequests.set(0);
-      bindResponses.set(0);
-      bytesRead.set(0);
-      bytesWritten.set(0);
-      compareRequests.set(0);
-      compareResponses.set(0);
-      connectionsClosed.set(0);
-      connectionsEstablished.set(0);
-      deleteRequests.set(0);
-      deleteResponses.set(0);
-      extendedRequests.set(0);
-      extendedResponses.set(0);
-      messagesRead.set(0);
-      messagesWritten.set(0);
-      modifyRequests.set(0);
-      modifyResponses.set(0);
-      modifyDNRequests.set(0);
-      modifyDNResponses.set(0);
-      operationsAbandoned.set(0);
-      operationsCompleted.set(0);
-      operationsInitiated.set(0);
-      searchRequests.set(0);
-      searchOneRequests.set(0);
-      searchSubRequests.set(0);
-      searchResultEntries.set(0);
-      searchResultReferences.set(0);
-      searchResultsDone.set(0);
-      unbindRequests.set(0);
+      abandonRequests.reset();
+      addRequests.reset();
+      addResponses.reset();
+      bindRequests.reset();
+      bindResponses.reset();
+      bytesRead.reset();
+      bytesWritten.reset();
+      compareRequests.reset();
+      compareResponses.reset();
+      connectionsClosed.reset();
+      connectionsEstablished.reset();
+      deleteRequests.reset();
+      deleteResponses.reset();
+      extendedRequests.reset();
+      extendedResponses.reset();
+      messagesRead.reset();
+      messagesWritten.reset();
+      modifyRequests.reset();
+      modifyResponses.reset();
+      modifyDNRequests.reset();
+      modifyDNResponses.reset();
+      operationsAbandoned.reset();
+      operationsCompleted.reset();
+      operationsInitiated.reset();
+      searchRequests.reset();
+      searchOneRequests.reset();
+      searchSubRequests.reset();
+      searchResultEntries.reset();
+      searchResultReferences.reset();
+      searchResultsDone.reset();
+      unbindRequests.reset();
 
-      addOperationCount.set(0);
-      addOperationTime.set(0);
-      searchOperationCount.set(0);
-      searchOperationTime.set(0);
-      delOperationCount.set(0);
-      delOperationTime.set(0);
-      bindOperationCount.set(0);
-      bindOperationTime.set(0);
-      unbindOperationCount.set(0);
-      unbindOperationTime.set(0);
-      compOperationCount.set(0);
-      compOperationTime.set(0);
-      modOperationCount.set(0);
-      modOperationTime.set(0);
-      moddnOperationCount.set(0);
-      moddnOperationTime.set(0);
-      abandonOperationCount.set(0);
-      abandonOperationTime.set(0);
-      extOperationCount.set(0);
-      extOperationTime.set(0);
+      addOperationCount.reset();
+      addOperationTime.reset();
+      searchOperationCount.reset();
+      searchOperationTime.reset();
+      delOperationCount.reset();
+      delOperationTime.reset();
+      bindOperationCount.reset();
+      bindOperationTime.reset();
+      unbindOperationCount.reset();
+      unbindOperationTime.reset();
+      compOperationCount.reset();
+      compOperationTime.reset();
+      modOperationCount.reset();
+      modOperationTime.reset();
+      moddnOperationCount.reset();
+      moddnOperationTime.reset();
+      abandonOperationCount.reset();
+      abandonOperationTime.reset();
+      extOperationCount.reset();
+      extOperationTime.reset();
   }
 
   /**
@@ -306,13 +310,13 @@
    */
   public void updateConnect()
   {
-    connectionsEstablished.getAndIncrement();
+    connectionsEstablished.increment();
   }
 
   /** Updates the appropriate set of counters to indicate that a connection has been closed. */
   public void updateDisconnect()
   {
-      connectionsClosed.getAndIncrement();
+      connectionsClosed.increment();
   }
 
   /**
@@ -324,7 +328,7 @@
    */
   public void updateBytesRead(int bytesRead)
   {
-     this.bytesRead.getAndAdd(bytesRead);
+     this.bytesRead.add(bytesRead);
   }
 
   /**
@@ -336,7 +340,7 @@
    */
   public void updateBytesWritten(int bytesWritten)
   {
-     this.bytesWritten.getAndAdd(bytesWritten);
+     this.bytesWritten.add(bytesWritten);
   }
 
   /**
@@ -348,37 +352,37 @@
    */
   public void updateMessageRead(LDAPMessage message)
   {
-      messagesRead.getAndIncrement();
-      operationsInitiated.getAndIncrement();
+      messagesRead.increment();
+      operationsInitiated.increment();
 
       switch (message.getProtocolOp().getType())
       {
       case OP_TYPE_ABANDON_REQUEST:
-        abandonRequests.getAndIncrement();
+        abandonRequests.increment();
         break;
       case OP_TYPE_ADD_REQUEST:
-        addRequests.getAndIncrement();
+        addRequests.increment();
         break;
       case OP_TYPE_BIND_REQUEST:
-        bindRequests.getAndIncrement();
+        bindRequests.increment();
         break;
       case OP_TYPE_COMPARE_REQUEST:
-        compareRequests.getAndIncrement();
+        compareRequests.increment();
         break;
       case OP_TYPE_DELETE_REQUEST:
-        deleteRequests.getAndIncrement();
+        deleteRequests.increment();
         break;
       case OP_TYPE_EXTENDED_REQUEST:
-        extendedRequests.getAndIncrement();
+        extendedRequests.increment();
         break;
       case OP_TYPE_MODIFY_REQUEST:
-        modifyRequests.getAndIncrement();
+        modifyRequests.increment();
         break;
       case OP_TYPE_MODIFY_DN_REQUEST:
-        modifyDNRequests.getAndIncrement();
+        modifyDNRequests.increment();
         break;
       case OP_TYPE_SEARCH_REQUEST:
-        searchRequests.getAndIncrement();
+        searchRequests.increment();
         SearchRequestProtocolOp s = (SearchRequestProtocolOp)message
             .getProtocolOp();
         switch (s.getScope().asEnum())
@@ -388,17 +392,17 @@
             // this value can be derived from the others
             break;
         case SINGLE_LEVEL:
-            searchOneRequests.getAndIncrement();
+            searchOneRequests.increment();
             break;
         case WHOLE_SUBTREE:
-            searchSubRequests.getAndIncrement();
+            searchSubRequests.increment();
             break;
         default:
             break;
         }
         break;
       case OP_TYPE_UNBIND_REQUEST:
-        unbindRequests.getAndIncrement();
+        unbindRequests.increment();
         break;
       }
   }
@@ -413,52 +417,52 @@
    *          The message id that was written to the client
    */
   public void updateMessageWritten(byte messageType, int messageId) {
-      messagesWritten.getAndIncrement();
+      messagesWritten.increment();
       switch (messageType)
       {
       case OP_TYPE_ADD_RESPONSE:
-        addResponses.getAndIncrement();
-        operationsCompleted.getAndIncrement();
+        addResponses.increment();
+        operationsCompleted.increment();
         break;
       case OP_TYPE_BIND_RESPONSE:
-        bindResponses.getAndIncrement();
-        operationsCompleted.getAndIncrement();
+        bindResponses.increment();
+        operationsCompleted.increment();
         break;
       case OP_TYPE_COMPARE_RESPONSE:
-        compareResponses.getAndIncrement();
-        operationsCompleted.getAndIncrement();
+        compareResponses.increment();
+        operationsCompleted.increment();
         break;
       case OP_TYPE_DELETE_RESPONSE:
-        deleteResponses.getAndIncrement();
-        operationsCompleted.getAndIncrement();
+        deleteResponses.increment();
+        operationsCompleted.increment();
         break;
       case OP_TYPE_EXTENDED_RESPONSE:
-        extendedResponses.getAndIncrement();
+        extendedResponses.increment();
 
         // We don't want to include unsolicited notifications as
         // "completed" operations.
         if (messageId > 0)
         {
-          operationsCompleted.getAndIncrement();
+          operationsCompleted.increment();
         }
         break;
       case OP_TYPE_MODIFY_RESPONSE:
-        modifyResponses.getAndIncrement();
-        operationsCompleted.getAndIncrement();
+        modifyResponses.increment();
+        operationsCompleted.increment();
         break;
       case OP_TYPE_MODIFY_DN_RESPONSE:
-        modifyDNResponses.getAndIncrement();
-        operationsCompleted.getAndIncrement();
+        modifyDNResponses.increment();
+        operationsCompleted.increment();
         break;
       case OP_TYPE_SEARCH_RESULT_ENTRY:
-        searchResultEntries.getAndIncrement();
+        searchResultEntries.increment();
         break;
       case OP_TYPE_SEARCH_RESULT_REFERENCE:
-        searchResultReferences.getAndIncrement();
+        searchResultReferences.increment();
         break;
       case OP_TYPE_SEARCH_RESULT_DONE:
-        searchResultsDone.getAndIncrement();
-        operationsCompleted.getAndIncrement();
+        searchResultsDone.increment();
+        operationsCompleted.increment();
         break;
       }
   }
@@ -481,7 +485,7 @@
    */
   public void updateAbandonedOperation()
   {
-      operationsAbandoned.getAndIncrement();
+      operationsAbandoned.increment();
   }
 
   /**
@@ -493,7 +497,7 @@
    */
   public long getConnectionsEstablished()
   {
-    return connectionsEstablished.get();
+    return connectionsEstablished.sum();
   }
 
   /**
@@ -503,7 +507,7 @@
    */
   public long getConnectionsClosed()
   {
-    return connectionsClosed.get();
+    return connectionsClosed.sum();
   }
 
   /**
@@ -513,7 +517,7 @@
    */
   public long getBytesRead()
   {
-      return bytesRead.get();
+      return bytesRead.sum();
   }
 
   /**
@@ -523,7 +527,7 @@
    */
   public long getBytesWritten()
   {
-      return bytesWritten.get();
+      return bytesWritten.sum();
   }
 
   /**
@@ -535,7 +539,7 @@
    */
   public long getMessagesRead()
   {
-    return messagesRead.get();
+    return messagesRead.sum();
   }
 
   /**
@@ -547,7 +551,7 @@
    */
   public long getMessagesWritten()
   {
-   return messagesWritten.get();
+   return messagesWritten.sum();
   }
 
   /**
@@ -559,7 +563,7 @@
    */
   public long getOperationsInitiated()
   {
-    return operationsInitiated.get();
+    return operationsInitiated.sum();
   }
 
   /**
@@ -571,7 +575,7 @@
    */
   public long getOperationsCompleted()
   {
-      return operationsCompleted.get();
+      return operationsCompleted.sum();
   }
 
   /**
@@ -583,7 +587,7 @@
    */
   public long getOperationsAbandoned()
   {
-      return operationsAbandoned.get();
+      return operationsAbandoned.sum();
   }
 
   /**
@@ -593,7 +597,7 @@
    */
   public long getAbandonRequests()
   {
-      return abandonRequests.get();
+      return abandonRequests.sum();
   }
 
   /**
@@ -603,7 +607,7 @@
    */
   public long getAddRequests()
   {
-      return addRequests.get();
+      return addRequests.sum();
   }
 
   /**
@@ -613,7 +617,7 @@
    */
   public long getAddResponses()
   {
-      return addResponses.get();
+      return addResponses.sum();
   }
 
   /**
@@ -623,7 +627,7 @@
    */
   public long getBindRequests()
   {
-      return bindRequests.get();
+      return bindRequests.sum();
   }
 
   /**
@@ -633,7 +637,7 @@
    */
   public long getBindResponses()
   {
-      return bindResponses.get();
+      return bindResponses.sum();
   }
 
   /**
@@ -643,7 +647,7 @@
    */
   public long getCompareRequests()
   {
-      return compareRequests.get();
+      return compareRequests.sum();
   }
 
   /**
@@ -653,7 +657,7 @@
    */
   public long getCompareResponses()
   {
-      return compareResponses.get();
+      return compareResponses.sum();
   }
 
   /**
@@ -663,7 +667,7 @@
    */
   public long getDeleteRequests()
   {
-      return deleteRequests.get();
+      return deleteRequests.sum();
   }
 
   /**
@@ -673,7 +677,7 @@
    */
   public long getDeleteResponses()
   {
-      return deleteResponses.get();
+      return deleteResponses.sum();
   }
 
   /**
@@ -683,7 +687,7 @@
    */
   public long getExtendedRequests()
   {
-      return extendedRequests.get();
+      return extendedRequests.sum();
   }
 
   /**
@@ -693,7 +697,7 @@
    */
   public long getExtendedResponses()
   {
-      return extendedResponses.get();
+      return extendedResponses.sum();
   }
 
   /**
@@ -703,7 +707,7 @@
    */
   public long getModifyRequests()
   {
-      return modifyRequests.get();
+      return modifyRequests.sum();
   }
 
   /**
@@ -713,7 +717,7 @@
    */
   public long getModifyResponses()
   {
-      return modifyResponses.get();
+      return modifyResponses.sum();
   }
 
   /**
@@ -723,7 +727,7 @@
    */
   public long getModifyDNRequests()
   {
-      return modifyDNRequests.get();
+      return modifyDNRequests.sum();
   }
 
   /**
@@ -733,7 +737,7 @@
    */
   public long getModifyDNResponses()
   {
-      return modifyDNResponses.get();
+      return modifyDNResponses.sum();
   }
 
   /**
@@ -743,7 +747,7 @@
    */
   public long getSearchRequests()
   {
-      return searchRequests.get();
+      return searchRequests.sum();
   }
 
   /**
@@ -753,7 +757,7 @@
    */
   public long getSearchOneRequests()
   {
-      return searchOneRequests.get();
+      return searchOneRequests.sum();
   }
 
   /**
@@ -763,7 +767,7 @@
    */
   public long getSearchSubRequests()
   {
-      return searchSubRequests.get();
+      return searchSubRequests.sum();
   }
 
   /**
@@ -773,7 +777,7 @@
    */
   public long getSearchResultEntries()
   {
-      return searchResultEntries.get();
+      return searchResultEntries.sum();
   }
 
   /**
@@ -784,7 +788,7 @@
    */
   public long getSearchResultReferences()
   {
-      return searchResultReferences.get();
+      return searchResultReferences.sum();
   }
 
   /**
@@ -796,7 +800,7 @@
    */
   public long getSearchResultsDone()
   {
-      return searchResultsDone.get();
+      return searchResultsDone.sum();
   }
 
   /**
@@ -806,7 +810,7 @@
    */
   public long getUnbindRequests()
   {
-      return unbindRequests.get();
+      return unbindRequests.sum();
   }
 
   /**
@@ -817,44 +821,44 @@
 
   public void updateOperationMonitoringData(OperationType type, long time) {
       if (type.equals(OperationType.ADD)) {
-          addOperationCount.getAndIncrement();
-          addOperationTime.getAndAdd(time);
+          addOperationCount.increment();
+          addOperationTime.add(time);
       }
       else if (type.equals(OperationType.SEARCH)) {
-          searchOperationCount.getAndIncrement();
-          searchOperationTime.getAndAdd(time);
+          searchOperationCount.increment();
+          searchOperationTime.add(time);
       }
       else if (type.equals(OperationType.ABANDON)) {
-          abandonOperationCount.getAndIncrement();
-          abandonOperationTime.getAndAdd(time);
+          abandonOperationCount.increment();
+          abandonOperationTime.add(time);
       }
       else if (type.equals(OperationType.BIND)) {
-          bindOperationCount.getAndIncrement();
-          bindOperationTime.getAndAdd(time);
+          bindOperationCount.increment();
+          bindOperationTime.add(time);
       }
       else if (type.equals(OperationType.UNBIND)) {
-          unbindOperationCount.getAndIncrement();
-          unbindOperationTime.getAndAdd(time);
+          unbindOperationCount.increment();
+          unbindOperationTime.add(time);
       }
       else if (type.equals(OperationType.COMPARE)) {
-          compOperationCount.getAndIncrement();
-          compOperationTime.getAndAdd(time);
+          compOperationCount.increment();
+          compOperationTime.add(time);
       }
       else if (type.equals(OperationType.DELETE)) {
-          delOperationCount.getAndIncrement();
-          delOperationTime.getAndAdd(time);
+          delOperationCount.increment();
+          delOperationTime.add(time);
       }
       else if (type.equals(OperationType.EXTENDED)) {
-          extOperationCount.getAndIncrement();
-          extOperationTime.getAndAdd(time);
+          extOperationCount.increment();
+          extOperationTime.add(time);
       }
       else if (type.equals(OperationType.MODIFY)) {
-          modOperationCount.getAndIncrement();
-          modOperationTime.getAndAdd(time);
+          modOperationCount.increment();
+          modOperationTime.add(time);
       }
       else if (type.equals(OperationType.MODIFY_DN)) {
-          moddnOperationCount.getAndIncrement();
-          moddnOperationTime.getAndAdd(time);
+          moddnOperationCount.increment();
+          moddnOperationTime.add(time);
       }
   }
 }

--
Gitblit v1.10.0