From d4a53237446485c4de48fc81fe00d1335b09bfef Mon Sep 17 00:00:00 2001
From: fguigues <fguigues@localhost>
Date: Thu, 13 Aug 2009 11:44:47 +0000
Subject: [PATCH] Fix the LDAPStatistics data and objects of LDAPConnectionHandler Fix the uninstall tool on windows (classpath too long when stop server is called)

---
 opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java |  821 ++++++++++++++++++++--------------------------------------
 1 files changed, 284 insertions(+), 537 deletions(-)

diff --git a/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java b/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
index 74e28f0..65f5113 100644
--- a/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
+++ b/opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
@@ -30,20 +30,20 @@
 
 import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
-import static org.opends.server.types.OperationType.*;
 
 import java.util.ArrayList;
 
+import java.util.concurrent.atomic.AtomicLong;
 import org.opends.messages.Message;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.monitors.OperationMonitor;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeBuilder;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.AttributeValues;
+import org.opends.server.types.OperationType;
 
 
 
@@ -74,87 +74,61 @@
 {
 
   // The statistics maintained by this class.
-  private long abandonRequests;
-  private long addRequests;
-  private long addResponses;
-  private long bindRequests;
-  private long bindResponses;
-  private long bytesRead;
-  private long bytesWritten;
-  private long compareRequests;
-  private long compareResponses;
-  private long connectionsClosed;
-  private long connectionsEstablished;
-  private long deleteRequests;
-  private long deleteResponses;
-  private long extendedRequests;
-  private long extendedResponses;
-  private long messagesRead;
-  private long messagesWritten;
-  private long modifyRequests;
-  private long modifyResponses;
-  private long modifyDNRequests;
-  private long modifyDNResponses;
-  private long operationsAbandoned;
-  private long operationsCompleted;
-  private long operationsInitiated;
-  private long searchRequests;
-  private long searchResultEntries;
-  private long searchResultReferences;
-  private long searchResultsDone;
-  private long unbindRequests;
+  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 searchResultEntries = new AtomicLong(0);
+  private AtomicLong searchResultReferences = new AtomicLong(0);
+  private AtomicLong searchResultsDone = new AtomicLong(0);
+  private AtomicLong unbindRequests = new AtomicLong(0);
 
-  // The parent that should also be updated whenever statistics in this
-  // object are updated.
-  private final LDAPStatistics parent;
-
-  // The locks used to provide threadsafe access to this class. In this
-  // case, read and write refer to the type of LDAP communication, not
-  // access to the protected data.
-  private final Object abandonLock;
-  private final Object connectLock;
-  private final Object disconnectLock;
-  private final Object readLock;
-  private final Object writeLock;
 
   // The instance name for this monitor provider instance.
   private final String instanceName;
 
-  // Monitor Objects : for Operations.
-  private final OperationMonitor addRequestsMonitor =
-      OperationMonitor.getOperationMonitor(ADD);
-  private final OperationMonitor searchRequestsMonitor =
-      OperationMonitor.getOperationMonitor(SEARCH);
-  private final OperationMonitor delRequestsMonitor =
-      OperationMonitor.getOperationMonitor(DELETE);
-  private final OperationMonitor bindRequestsMonitor =
-      OperationMonitor.getOperationMonitor(BIND);
-  private final OperationMonitor unbindRequestsMonitor =
-      OperationMonitor.getOperationMonitor(UNBIND);
-  private final OperationMonitor compareRequestsMonitor =
-      OperationMonitor.getOperationMonitor(COMPARE);
-  private final OperationMonitor modRequestsMonitor =
-      OperationMonitor.getOperationMonitor(MODIFY);
-  private final OperationMonitor moddnRequestsMonitor =
-      OperationMonitor.getOperationMonitor(MODIFY);
-  private final OperationMonitor abandonRequestsMonitor =
-      OperationMonitor.getOperationMonitor(ABANDON);
-  private final OperationMonitor extendedRequestsMonitor =
-      OperationMonitor.getOperationMonitor(EXTENDED);
-
-
-
-  /**
-   * Creates a new instance of this class with no parent.
-   *
-   * @param instanceName
-   *          The name for this monitor provider instance.
-   */
-  public LDAPStatistics(String instanceName)
-  {
-    this(instanceName, null);
-  }
-
+  // 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);
 
 
   /**
@@ -162,53 +136,11 @@
    *
    * @param instanceName
    *          The name for this monitor provider instance.
-   * @param parent
-   *          The parent object that should also be updated whenever
-   *          this class is updated. It may be null if there should not
-   *          be a parent.
    */
-  public LDAPStatistics(String instanceName, LDAPStatistics parent)
+  public LDAPStatistics(String instanceName)
   {
     super("LDAP Statistics Monitor Provider");
-
     this.instanceName = instanceName;
-    this.parent = parent;
-
-    abandonLock = new Object();
-    connectLock = new Object();
-    disconnectLock = new Object();
-    readLock = new Object();
-    writeLock = new Object();
-
-    abandonRequests = 0;
-    addRequests = 0;
-    addResponses = 0;
-    bindRequests = 0;
-    bindResponses = 0;
-    bytesRead = 0;
-    bytesWritten = 0;
-    compareRequests = 0;
-    compareResponses = 0;
-    connectionsClosed = 0;
-    connectionsEstablished = 0;
-    deleteRequests = 0;
-    deleteResponses = 0;
-    extendedRequests = 0;
-    extendedResponses = 0;
-    messagesRead = 0;
-    messagesWritten = 0;
-    modifyRequests = 0;
-    modifyResponses = 0;
-    modifyDNRequests = 0;
-    modifyDNResponses = 0;
-    operationsAbandoned = 0;
-    operationsCompleted = 0;
-    operationsInitiated = 0;
-    searchRequests = 0;
-    searchResultEntries = 0;
-    searchResultReferences = 0;
-    searchResultsDone = 0;
-    unbindRequests = 0;
   }
 
 
@@ -295,86 +227,59 @@
   @Override
   public ArrayList<Attribute> getMonitorData()
   {
-    ArrayList<Attribute> attrs = new ArrayList<Attribute>(29);
 
-    long tmpAbandonRequests;
-    long tmpAddRequests;
-    long tmpAddResponses;
-    long tmpBindRequests;
-    long tmpBindResponses;
-    long tmpBytesRead;
-    long tmpBytesWritten;
-    long tmpCompareRequests;
-    long tmpCompareResponses;
-    long tmpConnectionsClosed;
-    long tmpConnectionsEstablished;
-    long tmpDeleteRequests;
-    long tmpDeleteResponses;
-    long tmpExtendedRequests;
-    long tmpExtendedResponses;
-    long tmpMessagesRead;
-    long tmpMessagesWritten;
-    long tmpModifyRequests;
-    long tmpModifyResponses;
-    long tmpModifyDNRequests;
-    long tmpModifyDNResponses;
-    long tmpOperationsAbandoned;
-    long tmpOperationsCompleted;
-    long tmpOperationsInitiated;
-    long tmpSearchRequests;
-    long tmpSearchEntries;
-    long tmpSearchReferences;
-    long tmpSearchResultsDone;
-    long tmpUnbindRequests;
+      ArrayList<Attribute> attrs = new ArrayList<Attribute>();
 
-    // Quickly grab the locks and store consistent copies of the
-    // information. Note that when grabbing multiple locks, it is
-    // essential that they are all acquired in the same order to prevent
-    // deadlocks.
-    synchronized (abandonLock)
-    {
-      synchronized (connectLock)
-      {
-        synchronized (disconnectLock)
-        {
-          synchronized (writeLock)
-          {
-            synchronized (readLock)
-            {
-              tmpAbandonRequests = abandonRequests;
-              tmpAddRequests = addRequests;
-              tmpAddResponses = addResponses;
-              tmpBindRequests = bindRequests;
-              tmpBindResponses = bindResponses;
-              tmpBytesRead = bytesRead;
-              tmpBytesWritten = bytesWritten;
-              tmpCompareRequests = compareRequests;
-              tmpCompareResponses = compareResponses;
-              tmpConnectionsClosed = connectionsClosed;
-              tmpConnectionsEstablished = connectionsEstablished;
-              tmpDeleteRequests = deleteRequests;
-              tmpDeleteResponses = deleteResponses;
-              tmpExtendedRequests = extendedRequests;
-              tmpExtendedResponses = extendedResponses;
-              tmpMessagesRead = messagesRead;
-              tmpMessagesWritten = messagesWritten;
-              tmpModifyRequests = modifyRequests;
-              tmpModifyResponses = modifyResponses;
-              tmpModifyDNRequests = modifyDNRequests;
-              tmpModifyDNResponses = modifyDNResponses;
-              tmpOperationsAbandoned = operationsAbandoned;
-              tmpOperationsCompleted = operationsCompleted;
-              tmpOperationsInitiated = operationsInitiated;
-              tmpSearchRequests = searchRequests;
-              tmpSearchEntries = searchResultEntries;
-              tmpSearchReferences = searchResultReferences;
-              tmpSearchResultsDone = searchResultsDone;
-              tmpUnbindRequests = unbindRequests;
-            }
-          }
-        }
-      }
-    }
+      long tmpAbandonRequests = abandonRequests.get();
+      long tmpAddRequests = addRequests.get();
+      long tmpAddResponses = addResponses.get();
+      long tmpBindRequests = bindRequests.get();
+      long tmpBindResponses = bindResponses.get();
+      long tmpBytesRead = bytesRead.get();
+      long tmpBytesWritten = bytesWritten.get();
+      long tmpCompareRequests = compareRequests.get();
+      long tmpCompareResponses = compareResponses.get();
+      long tmpConnectionsClosed = connectionsClosed.get();
+      long tmpConnectionsEstablished = connectionsEstablished.get();
+      long tmpDeleteRequests = deleteRequests.get();
+      long tmpDeleteResponses = deleteResponses.get();
+      long tmpExtendedRequests = extendedRequests.get();
+      long tmpExtendedResponses = extendedResponses.get();
+      long tmpMessagesRead = messagesRead.get();
+      long tmpMessagesWritten = messagesWritten.get();
+      long tmpModifyRequests = modifyRequests.get();
+      long tmpModifyResponses = modifyResponses.get();
+      long tmpModifyDNRequests = modifyDNRequests.get();
+      long tmpModifyDNResponses = modifyDNResponses.get();
+      long tmpOperationsAbandoned = operationsAbandoned.get();
+      long tmpOperationsCompleted = operationsCompleted.get();
+      long tmpOperationsInitiated = operationsInitiated.get();
+      long tmpSearchRequests = searchRequests.get();
+      long tmpSearchEntries = searchResultEntries.get();
+      long tmpSearchReferences = searchResultReferences.get();
+      long tmpSearchResultsDone = searchResultsDone.get();
+      long tmpUnbindRequests = unbindRequests.get();
+      long tmpAddOperationCount = addOperationCount.get();
+      long tmpAddOperationTime = addOperationTime.get();
+      long tmpSearchOperationCount = searchOperationCount.get();
+      long tmpSearchOperationTime = searchOperationTime.get();
+      long tmpDelOperationCount = delOperationCount.get();
+      long tmpDelOperationTime = delOperationTime.get();
+      long tmpBindOperationCount = bindOperationCount.get();
+      long tmpBindOperationTime = bindOperationTime.get();
+      long tmpUnbindOperationCount = unbindOperationCount.get();
+      long tmpUnbindOperationTime = unbindOperationTime.get();
+      long tmpCompOperationCount = compOperationCount.get();
+      long tmpCompOperationTime = compOperationTime.get();
+      long tmpModOperationCount = modOperationCount.get();
+      long tmpModOperationTime = modOperationTime.get();
+      long tmpModdnOperationCount = moddnOperationCount.get();
+      long tmpModdnOperationTime = moddnOperationTime.get();
+      long tmpAbandonOperationCount = abandonOperationCount.get();
+      long tmpAbandonOperationTime = abandonOperationTime.get();
+      long tmpExtOperationCount = extOperationCount.get();
+      long tmpExtOperationTime = extOperationTime.get();
+
 
     // Construct the list of attributes to return.
     attrs.add(createAttribute("connectionsEstablished", String
@@ -438,78 +343,76 @@
 
     // adds
     attrs.add(createAttribute("ds-mon-add-operations-total-count",
-        String.valueOf(addRequestsMonitor.getCounter().getCount())));
+        String.valueOf(tmpAddOperationCount)));
+
     attrs.add(createAttribute(
         "ds-mon-resident-time-add-operations-total-time", String
-            .valueOf(addRequestsMonitor.getTotalTime())));
+            .valueOf(tmpAddOperationTime)));
 
     // search
     attrs.add(createAttribute("ds-mon-search-operations-total-count",
-        String.valueOf(searchRequestsMonitor.getCounter().getCount())));
+        String.valueOf(tmpSearchOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-search-operations-total-time", String
-            .valueOf(searchRequestsMonitor.getTotalTime())));
+            .valueOf(tmpSearchOperationTime)));
 
     // bind
     attrs.add(createAttribute("ds-mon-bind-operations-total-count",
-        String.valueOf(bindRequestsMonitor.getCounter().getCount())));
+        String.valueOf(tmpBindOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-bind-operations-total-time", String
-            .valueOf(bindRequestsMonitor.getTotalTime())));
+            .valueOf(tmpBindOperationTime)));
 
     // unbind
     attrs.add(createAttribute("ds-mon-unbind-operations-total-count",
-        String.valueOf(unbindRequestsMonitor.getCounter().getCount())));
+        String.valueOf(tmpUnbindOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-unbind-operations-total-time", String
-            .valueOf(unbindRequestsMonitor.getTotalTime())));
+            .valueOf(tmpUnbindOperationTime)));
 
     // compare
     attrs
         .add(createAttribute("ds-mon-compare-operations-total-count",
-            String.valueOf(compareRequestsMonitor.getCounter()
-                .getCount())));
+            String.valueOf(tmpCompOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-compare-operations-total-time", String
-            .valueOf(compareRequestsMonitor.getTotalTime())));
+            .valueOf(tmpCompOperationTime)));
     // del
     attrs.add(createAttribute("ds-mon-delete-operations-total-count",
-        String.valueOf(delRequestsMonitor.getCounter().getCount())));
+        String.valueOf(tmpDelOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-delete-operations-total-time", String
-            .valueOf(delRequestsMonitor.getTotalTime())));
+            .valueOf(tmpDelOperationTime)));
 
     // mod
     attrs.add(createAttribute("ds-mon-mod-operations-total-count",
-        String.valueOf(modRequestsMonitor.getCounter().getCount())));
+        String.valueOf(tmpModOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-mod-operations-total-time", String
-            .valueOf(modRequestsMonitor.getTotalTime())));
+            .valueOf(tmpModOperationTime)));
 
     // moddn
     attrs.add(createAttribute("ds-mon-moddn-operations-total-count",
-        String.valueOf(moddnRequestsMonitor.getCounter().getCount())));
+        String.valueOf(tmpModdnOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-moddn-operations-total-time", String
-            .valueOf(moddnRequestsMonitor.getTotalTime())));
+            .valueOf(tmpModdnOperationTime)));
 
     // abandon
     attrs
         .add(createAttribute("ds-mon-abandon-operations-total-count",
-            String.valueOf(abandonRequestsMonitor.getCounter()
-                .getCount())));
+            String.valueOf(tmpAbandonOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-abandon-operations-total-time", String
-            .valueOf(abandonRequestsMonitor.getTotalTime())));
+            .valueOf(tmpAbandonOperationTime)));
 
     // extended
     attrs
         .add(createAttribute("ds-mon-extended-operations-total-count",
-            String.valueOf(extendedRequestsMonitor.getCounter()
-                .getCount())));
+            String.valueOf(tmpExtOperationCount)));
     attrs.add(createAttribute(
         "ds-mon-resident-time-extended-operations-total-time", String
-            .valueOf(extendedRequestsMonitor.getTotalTime())));
+            .valueOf(tmpExtOperationTime)));
 
     return attrs;
   }
@@ -521,74 +424,68 @@
    */
   public void clearStatistics()
   {
-    // Quickly grab the locks and store consistent copies of the
-    // information. Note that when grabbing multiple locks, it is
-    // essential that they are all acquired in the same order to prevent
-    // deadlocks.
-    synchronized (abandonLock)
-    {
-      synchronized (connectLock)
-      {
-        synchronized (disconnectLock)
-        {
-          synchronized (writeLock)
-          {
-            synchronized (readLock)
-            {
-              abandonRequests = 0;
-              addRequests = 0;
-              addResponses = 0;
-              bindRequests = 0;
-              bindResponses = 0;
-              bytesRead = 0;
-              bytesWritten = 0;
-              compareRequests = 0;
-              compareResponses = 0;
-              connectionsClosed = 0;
-              connectionsEstablished = 0;
-              deleteRequests = 0;
-              deleteResponses = 0;
-              extendedRequests = 0;
-              extendedResponses = 0;
-              messagesRead = 0;
-              messagesWritten = 0;
-              modifyRequests = 0;
-              modifyResponses = 0;
-              modifyDNRequests = 0;
-              modifyDNResponses = 0;
-              operationsAbandoned = 0;
-              operationsCompleted = 0;
-              operationsInitiated = 0;
-              searchRequests = 0;
-              searchResultEntries = 0;
-              searchResultReferences = 0;
-              searchResultsDone = 0;
-              unbindRequests = 0;
-            }
-          }
-        }
-      }
-    }
+      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);
+      searchResultEntries.set(0);
+      searchResultReferences.set(0);
+      searchResultsDone.set(0);
+      unbindRequests.set(0);
+
+      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);
   }
 
 
 
+
   /**
    * Updates the appropriate set of counters to indicate that a new
    * connection has been established.
    */
   public void updateConnect()
   {
-    synchronized (connectLock)
-    {
-      connectionsEstablished++;
-    }
-
-    // Update the parent if there is one.
-    if (parent != null)
-    {
-      parent.updateConnect();
-    }
+    connectionsEstablished.getAndIncrement();
   }
 
 
@@ -599,16 +496,7 @@
    */
   public void updateDisconnect()
   {
-    synchronized (disconnectLock)
-    {
-      connectionsClosed++;
-    }
-
-    // Update the parent if there is one.
-    if (parent != null)
-    {
-      parent.updateDisconnect();
-    }
+      connectionsClosed.getAndIncrement();
   }
 
 
@@ -622,16 +510,7 @@
    */
   public void updateBytesRead(int bytesRead)
   {
-    synchronized (readLock)
-    {
-      this.bytesRead += bytesRead;
-    }
-
-    // Update the parent if there is one.
-    if (parent != null)
-    {
-      parent.updateBytesRead(bytesRead);
-    }
+     this.bytesRead.getAndAdd(bytesRead);
   }
 
 
@@ -645,51 +524,42 @@
    */
   public void updateMessageRead(LDAPMessage message)
   {
-    synchronized (readLock)
-    {
-      messagesRead++;
-      operationsInitiated++;
+      messagesRead.getAndIncrement();
+      operationsInitiated.getAndIncrement();
 
       switch (message.getProtocolOp().getType())
       {
       case OP_TYPE_ABANDON_REQUEST:
-        abandonRequests++;
+        abandonRequests.getAndIncrement();
         break;
       case OP_TYPE_ADD_REQUEST:
-        addRequests++;
+        addRequests.getAndIncrement();
         break;
       case OP_TYPE_BIND_REQUEST:
-        bindRequests++;
+        bindRequests.getAndIncrement();
         break;
       case OP_TYPE_COMPARE_REQUEST:
-        compareRequests++;
+        compareRequests.getAndIncrement();
         break;
       case OP_TYPE_DELETE_REQUEST:
-        deleteRequests++;
+        deleteRequests.getAndIncrement();
         break;
       case OP_TYPE_EXTENDED_REQUEST:
-        extendedRequests++;
+        extendedRequests.getAndIncrement();
         break;
       case OP_TYPE_MODIFY_REQUEST:
-        modifyRequests++;
+        modifyRequests.getAndIncrement();
         break;
       case OP_TYPE_MODIFY_DN_REQUEST:
-        modifyDNRequests++;
+        modifyDNRequests.getAndIncrement();
         break;
       case OP_TYPE_SEARCH_REQUEST:
-        searchRequests++;
+        searchRequests.getAndIncrement();
         break;
       case OP_TYPE_UNBIND_REQUEST:
-        unbindRequests++;
+        unbindRequests.getAndIncrement();
         break;
       }
-    }
-
-    // Update the parent if there is one.
-    if (parent != null)
-    {
-      parent.updateMessageRead(message);
-    }
   }
 
 
@@ -705,65 +575,56 @@
    */
   public void updateMessageWritten(LDAPMessage message, int bytesWritten)
   {
-    synchronized (writeLock)
-    {
-      this.bytesWritten += bytesWritten;
-      messagesWritten++;
+      this.bytesWritten.getAndAdd(bytesWritten);
+      messagesWritten.getAndIncrement();
 
       switch (message.getProtocolOp().getType())
       {
       case OP_TYPE_ADD_RESPONSE:
-        addResponses++;
-        operationsCompleted++;
+        addResponses.getAndIncrement();
+        operationsCompleted.getAndIncrement();
         break;
       case OP_TYPE_BIND_RESPONSE:
-        bindResponses++;
-        operationsCompleted++;
+        bindResponses.getAndIncrement();
+        operationsCompleted.getAndIncrement();
         break;
       case OP_TYPE_COMPARE_RESPONSE:
-        compareResponses++;
-        operationsCompleted++;
+        compareResponses.getAndIncrement();
+        operationsCompleted.getAndIncrement();
         break;
       case OP_TYPE_DELETE_RESPONSE:
-        deleteResponses++;
-        operationsCompleted++;
+        deleteResponses.getAndIncrement();
+        operationsCompleted.getAndIncrement();
         break;
       case OP_TYPE_EXTENDED_RESPONSE:
-        extendedResponses++;
+        extendedResponses.getAndIncrement();
 
         // We don't want to include unsolicited notifications as
         // "completed" operations.
         if (message.getMessageID() > 0)
         {
-          operationsCompleted++;
+          operationsCompleted.getAndIncrement();
         }
         break;
       case OP_TYPE_MODIFY_RESPONSE:
-        modifyResponses++;
-        operationsCompleted++;
+        modifyResponses.getAndIncrement();
+        operationsCompleted.getAndIncrement();
         break;
       case OP_TYPE_MODIFY_DN_RESPONSE:
-        modifyDNResponses++;
-        operationsCompleted++;
+        modifyDNResponses.getAndIncrement();
+        operationsCompleted.getAndIncrement();
         break;
       case OP_TYPE_SEARCH_RESULT_ENTRY:
-        searchResultEntries++;
+        searchResultEntries.getAndIncrement();
         break;
       case OP_TYPE_SEARCH_RESULT_REFERENCE:
-        searchResultReferences++;
+        searchResultReferences.getAndIncrement();
         break;
       case OP_TYPE_SEARCH_RESULT_DONE:
-        searchResultsDone++;
-        operationsCompleted++;
+        searchResultsDone.getAndIncrement();
+        operationsCompleted.getAndIncrement();
         break;
       }
-    }
-
-    // Update the parent if there is one.
-    if (parent != null)
-    {
-      parent.updateMessageWritten(message, bytesWritten);
-    }
   }
 
 
@@ -774,16 +635,7 @@
    */
   public void updateAbandonedOperation()
   {
-    synchronized (abandonLock)
-    {
-      operationsAbandoned++;
-    }
-
-    // Update the parent if there is one.
-    if (parent != null)
-    {
-      parent.updateAbandonedOperation();
-    }
+      operationsAbandoned.getAndIncrement();
   }
 
 
@@ -820,10 +672,7 @@
    */
   public long getConnectionsEstablished()
   {
-    synchronized (connectLock)
-    {
-      return connectionsEstablished;
-    }
+   return connectionsEstablished.get();
   }
 
 
@@ -835,10 +684,8 @@
    */
   public long getConnectionsClosed()
   {
-    synchronized (disconnectLock)
-    {
-      return connectionsClosed;
-    }
+      return connectionsClosed.get();
+
   }
 
 
@@ -850,10 +697,7 @@
    */
   public long getBytesRead()
   {
-    synchronized (readLock)
-    {
-      return bytesRead;
-    }
+      return bytesRead.get();
   }
 
 
@@ -865,10 +709,7 @@
    */
   public long getBytesWritten()
   {
-    synchronized (writeLock)
-    {
-      return bytesWritten;
-    }
+      return bytesWritten.get();
   }
 
 
@@ -882,10 +723,7 @@
    */
   public long getMessagesRead()
   {
-    synchronized (readLock)
-    {
-      return messagesRead;
-    }
+    return messagesRead.get();
   }
 
 
@@ -899,10 +737,7 @@
    */
   public long getMessagesWritten()
   {
-    synchronized (writeLock)
-    {
-      return messagesWritten;
-    }
+   return messagesWritten.get();
   }
 
 
@@ -916,10 +751,7 @@
    */
   public long getOperationsInitiated()
   {
-    synchronized (readLock)
-    {
-      return operationsInitiated;
-    }
+    return operationsInitiated.get();
   }
 
 
@@ -933,10 +765,7 @@
    */
   public long getOperationsCompleted()
   {
-    synchronized (writeLock)
-    {
-      return operationsCompleted;
-    }
+      return operationsCompleted.get();
   }
 
 
@@ -950,10 +779,7 @@
    */
   public long getOperationsAbandoned()
   {
-    synchronized (abandonLock)
-    {
-      return operationsAbandoned;
-    }
+      return operationsAbandoned.get();
   }
 
 
@@ -965,10 +791,7 @@
    */
   public long getAbandonRequests()
   {
-    synchronized (readLock)
-    {
-      return abandonRequests;
-    }
+      return abandonRequests.get();
   }
 
 
@@ -980,10 +803,7 @@
    */
   public long getAddRequests()
   {
-    synchronized (readLock)
-    {
-      return addRequests;
-    }
+      return addRequests.get();
   }
 
 
@@ -995,10 +815,7 @@
    */
   public long getAddResponses()
   {
-    synchronized (writeLock)
-    {
-      return addResponses;
-    }
+      return addResponses.get();
   }
 
 
@@ -1010,10 +827,7 @@
    */
   public long getBindRequests()
   {
-    synchronized (readLock)
-    {
-      return bindRequests;
-    }
+      return bindRequests.get();
   }
 
 
@@ -1025,10 +839,7 @@
    */
   public long getBindResponses()
   {
-    synchronized (writeLock)
-    {
-      return bindResponses;
-    }
+      return bindResponses.get();
   }
 
 
@@ -1040,10 +851,7 @@
    */
   public long getCompareRequests()
   {
-    synchronized (readLock)
-    {
-      return compareRequests;
-    }
+      return compareRequests.get();
   }
 
 
@@ -1055,10 +863,7 @@
    */
   public long getCompareResponses()
   {
-    synchronized (writeLock)
-    {
-      return compareResponses;
-    }
+      return compareResponses.get();
   }
 
 
@@ -1070,10 +875,7 @@
    */
   public long getDeleteRequests()
   {
-    synchronized (readLock)
-    {
-      return deleteRequests;
-    }
+      return deleteRequests.get();
   }
 
 
@@ -1085,10 +887,7 @@
    */
   public long getDeleteResponses()
   {
-    synchronized (writeLock)
-    {
-      return deleteResponses;
-    }
+      return deleteResponses.get();
   }
 
 
@@ -1100,10 +899,7 @@
    */
   public long getExtendedRequests()
   {
-    synchronized (readLock)
-    {
-      return extendedRequests;
-    }
+      return extendedRequests.get();
   }
 
 
@@ -1115,10 +911,7 @@
    */
   public long getExtendedResponses()
   {
-    synchronized (writeLock)
-    {
-      return extendedResponses;
-    }
+      return extendedResponses.get();
   }
 
 
@@ -1130,10 +923,7 @@
    */
   public long getModifyRequests()
   {
-    synchronized (readLock)
-    {
-      return modifyRequests;
-    }
+      return modifyRequests.get();
   }
 
 
@@ -1145,10 +935,7 @@
    */
   public long getModifyResponses()
   {
-    synchronized (writeLock)
-    {
-      return modifyResponses;
-    }
+      return modifyResponses.get();
   }
 
 
@@ -1160,10 +947,7 @@
    */
   public long getModifyDNRequests()
   {
-    synchronized (readLock)
-    {
-      return modifyDNRequests;
-    }
+      return modifyDNRequests.get();
   }
 
 
@@ -1175,10 +959,7 @@
    */
   public long getModifyDNResponses()
   {
-    synchronized (writeLock)
-    {
-      return modifyDNResponses;
-    }
+      return modifyDNResponses.get();
   }
 
 
@@ -1190,10 +971,7 @@
    */
   public long getSearchRequests()
   {
-    synchronized (readLock)
-    {
-      return searchRequests;
-    }
+      return searchRequests.get();
   }
 
 
@@ -1205,10 +983,7 @@
    */
   public long getSearchResultEntries()
   {
-    synchronized (writeLock)
-    {
-      return searchResultEntries;
-    }
+      return searchResultEntries.get();
   }
 
 
@@ -1221,10 +996,7 @@
    */
   public long getSearchResultReferences()
   {
-    synchronized (writeLock)
-    {
-      return searchResultReferences;
-    }
+      return searchResultReferences.get();
   }
 
 
@@ -1238,10 +1010,7 @@
    */
   public long getSearchResultsDone()
   {
-    synchronized (writeLock)
-    {
-      return searchResultsDone;
-    }
+      return searchResultsDone.get();
   }
 
 
@@ -1253,78 +1022,56 @@
    */
   public long getUnbindRequests()
   {
-    synchronized (readLock)
-    {
-      return unbindRequests;
-    }
+      return unbindRequests.get();
   }
 
-
-
   /**
-   * Retrieves the parent statistics tracker that will also be updated
-   * whenever this tracker is updated.
-   *
-   * @return The parent statistics tracker, or {@code null} if there is
-   *         none.
+   * Update the operation counters and times depending on the OperationType.
+   * @param type of the operation.
+   * @param time of the operation execution.
    */
-  public LDAPStatistics getParent()
-  {
-    return parent;
-  }
 
-
-
-  /**
-   * Updates the monitor object.
-   *
-   * @param opMonitor
-   *          monitor object.
-   */
-  public void updateMonitor(OperationMonitor opMonitor)
-  {
-    synchronized (readLock)
-    {
-      switch (opMonitor.getType())
-      {
-      case ABANDON:
-        this.abandonRequestsMonitor.add(opMonitor);
-        break;
-      case ADD:
-        this.addRequestsMonitor.add(opMonitor);
-        break;
-      case BIND:
-        this.bindRequestsMonitor.add(opMonitor);
-        break;
-      case COMPARE:
-        this.compareRequestsMonitor.add(opMonitor);
-        break;
-      case DELETE:
-        this.delRequestsMonitor.add(opMonitor);
-        break;
-      case EXTENDED:
-        this.extendedRequestsMonitor.add(opMonitor);
-        break;
-      case MODIFY:
-        this.modRequestsMonitor.add(opMonitor);
-        break;
-      case MODIFY_DN:
-        this.moddnRequestsMonitor.add(opMonitor);
-        break;
-      case SEARCH:
-        this.searchRequestsMonitor.add(opMonitor);
-        break;
-      case UNBIND:
-        this.unbindRequestsMonitor.add(opMonitor);
-        break;
-      default:
+  public void updateOperationMonitoringData(OperationType type, long time) {
+      if (type.equals(OperationType.ADD)) {
+          addOperationCount.getAndIncrement();
+          addOperationTime.getAndAdd(time);
       }
-      if (parent != null)
-      {
-        parent.updateMonitor(opMonitor);
+      else if (type.equals(OperationType.SEARCH)) {
+          searchOperationCount.getAndIncrement();
+          searchOperationTime.getAndAdd(time);
       }
-      opMonitor.reset();
-    }
+      else if (type.equals(OperationType.ABANDON)) {
+          abandonOperationCount.getAndIncrement();
+          abandonOperationTime.getAndAdd(time);
+      }
+      else if (type.equals(OperationType.BIND)) {
+          bindOperationCount.getAndIncrement();
+          bindOperationTime.getAndAdd(time);
+      }
+      else if (type.equals(OperationType.UNBIND)) {
+          unbindOperationCount.getAndIncrement();
+          unbindOperationTime.getAndAdd(time);
+      }
+      else if (type.equals(OperationType.COMPARE)) {
+          compOperationCount.getAndIncrement();
+          compOperationTime.getAndAdd(time);
+      }
+      else if (type.equals(OperationType.DELETE)) {
+          delOperationCount.getAndIncrement();
+          delOperationTime.getAndAdd(time);
+      }
+      else if (type.equals(OperationType.EXTENDED)) {
+          extOperationCount.getAndIncrement();
+          extOperationTime.getAndAdd(time);
+      }
+      else if (type.equals(OperationType.MODIFY)) {
+          modOperationCount.getAndIncrement();
+          modOperationTime.getAndAdd(time);
+      }
+      else if (type.equals(OperationType.MODIFY_DN)) {
+          moddnOperationCount.getAndIncrement();
+          moddnOperationTime.getAndAdd(time);
+      }
   }
 
 }

--
Gitblit v1.10.0