mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

neil_a_wilson
12.03.2007 47be44124da7f6ad42bed03a24701ca07c00918d
opends/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
@@ -25,27 +25,26 @@
 *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
 */
package org.opends.server.protocols.ldap;
import org.opends.messages.Message;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.concurrent.locks.ReentrantLock;
import org.opends.messages.Message;
import org.opends.server.admin.std.server.MonitorProviderCfg;
import org.opends.server.api.MonitorProvider;
import org.opends.server.core.DirectoryServer;
import org.opends.server.config.ConfigException;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeType;
import org.opends.server.types.AttributeValue;
import org.opends.server.types.DebugLogLevel;
import static org.opends.server.loggers.debug.DebugLogger.*;
import org.opends.server.loggers.debug.DebugTracer;
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.protocols.ldap.LDAPConstants.*;
@@ -120,11 +119,11 @@
  // 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 ReentrantLock abandonLock;
  private ReentrantLock connectLock;
  private ReentrantLock disconnectLock;
  private ReentrantLock readLock;
  private ReentrantLock writeLock;
  private Object abandonLock;
  private Object connectLock;
  private Object disconnectLock;
  private Object readLock;
  private Object writeLock;
  // The instance name for this monitor provider instance.
  private String instanceName;
@@ -162,11 +161,11 @@
    this.instanceName = instanceName;
    this.parent       = parent;
    abandonLock    = new ReentrantLock();
    connectLock    = new ReentrantLock();
    disconnectLock = new ReentrantLock();
    readLock       = new ReentrantLock();
    writeLock      = new ReentrantLock();
    abandonLock    = new Object();
    connectLock    = new Object();
    disconnectLock = new Object();
    readLock       = new Object();
    writeLock      = new Object();
    abandonRequests        = 0;
    addRequests            = 0;
@@ -307,25 +306,15 @@
    // 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.
    abandonLock.lock();
    try
    synchronized (abandonLock)
    {
      connectLock.lock();
      try
      synchronized (connectLock)
      {
        disconnectLock.lock();
        try
        synchronized (disconnectLock)
        {
          writeLock.lock();
          try
          synchronized (writeLock)
          {
            readLock.lock();
            try
            synchronized (readLock)
            {
              tmpAbandonRequests        = abandonRequests;
              tmpAddRequests            = addRequests;
@@ -357,74 +346,9 @@
              tmpSearchResultsDone      = searchResultsDone;
              tmpUnbindRequests         = unbindRequests;
            }
            catch (Exception e)
            {
              if (debugEnabled())
              {
                TRACER.debugCaught(DebugLogLevel.ERROR, e);
              }
              return attrs;
            }
            finally
            {
              readLock.unlock();
            }
          }
          catch (Exception e)
          {
            if (debugEnabled())
            {
              TRACER.debugCaught(DebugLogLevel.ERROR, e);
            }
            return attrs;
          }
          finally
          {
            writeLock.unlock();
          }
        }
        catch (Exception e)
        {
          if (debugEnabled())
          {
            TRACER.debugCaught(DebugLogLevel.ERROR, e);
          }
          return attrs;
        }
        finally
        {
          disconnectLock.unlock();
        }
      }
      catch (Exception e)
      {
        if (debugEnabled())
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
        return attrs;
      }
      finally
      {
        connectLock.unlock();
      }
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
      return attrs;
    }
    finally
    {
      abandonLock.unlock();
    }
@@ -496,25 +420,15 @@
    // 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.
    abandonLock.lock();
    try
    synchronized (abandonLock)
    {
      connectLock.lock();
      try
      synchronized (connectLock)
      {
        disconnectLock.lock();
        try
        synchronized (disconnectLock)
        {
          writeLock.lock();
          try
          synchronized (writeLock)
          {
            readLock.lock();
            try
            synchronized (readLock)
            {
              abandonRequests        = 0;
              addRequests            = 0;
@@ -546,64 +460,9 @@
              searchResultsDone      = 0;
              unbindRequests         = 0;
            }
            catch (Exception e)
            {
              if (debugEnabled())
              {
                TRACER.debugCaught(DebugLogLevel.ERROR, e);
              }
            }
            finally
            {
              readLock.unlock();
            }
          }
          catch (Exception e)
          {
            if (debugEnabled())
            {
              TRACER.debugCaught(DebugLogLevel.ERROR, e);
            }
          }
          finally
          {
            writeLock.unlock();
          }
        }
        catch (Exception e)
        {
          if (debugEnabled())
          {
            TRACER.debugCaught(DebugLogLevel.ERROR, e);
          }
        }
        finally
        {
          disconnectLock.unlock();
        }
      }
      catch (Exception e)
      {
        if (debugEnabled())
        {
          TRACER.debugCaught(DebugLogLevel.ERROR, e);
        }
      }
      finally
      {
        connectLock.unlock();
      }
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    finally
    {
      abandonLock.unlock();
    }
  }
@@ -615,23 +474,10 @@
   */
  public void updateConnect()
  {
    connectLock.lock();
    try
    synchronized (connectLock)
    {
      connectionsEstablished++;
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    finally
    {
      connectLock.unlock();
    }
    // Update the parent if there is one.
    if (parent != null)
@@ -648,23 +494,10 @@
   */
  public void updateDisconnect()
  {
    disconnectLock.lock();
    try
    synchronized (disconnectLock)
    {
      connectionsClosed++;
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    finally
    {
      disconnectLock.unlock();
    }
    // Update the parent if there is one.
    if (parent != null)
@@ -683,23 +516,10 @@
   */
  public void updateBytesRead(int bytesRead)
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      this.bytesRead += bytesRead;
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    finally
    {
      readLock.unlock();
    }
    // Update the parent if there is one.
    if (parent != null)
@@ -718,9 +538,7 @@
   */
  public void updateMessageRead(LDAPMessage message)
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      messagesRead++;
      operationsInitiated++;
@@ -759,17 +577,6 @@
          break;
      }
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    finally
    {
      readLock.unlock();
    }
    // Update the parent if there is one.
    if (parent != null)
@@ -789,9 +596,7 @@
   */
  public void updateMessageWritten(LDAPMessage message, int bytesWritten)
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      this.bytesWritten += bytesWritten;
      messagesWritten++;
@@ -844,17 +649,6 @@
          break;
      }
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    finally
    {
      writeLock.unlock();
    }
    // Update the parent if there is one.
    if (parent != null)
@@ -871,23 +665,10 @@
   */
  public void updateAbandonedOperation()
  {
    abandonLock.lock();
    try
    synchronized (abandonLock)
    {
      operationsAbandoned++;
    }
    catch (Exception e)
    {
      if (debugEnabled())
      {
        TRACER.debugCaught(DebugLogLevel.ERROR, e);
      }
    }
    finally
    {
      abandonLock.unlock();
    }
    // Update the parent if there is one.
    if (parent != null)
@@ -941,16 +722,10 @@
   */
  public long getConnectionsEstablished()
  {
    connectLock.lock();
    try
    synchronized (connectLock)
    {
      return connectionsEstablished;
    }
    finally
    {
      connectLock.unlock();
    }
  }
@@ -962,16 +737,10 @@
   */
  public long getConnectionsClosed()
  {
    disconnectLock.lock();
    try
    synchronized (disconnectLock)
    {
      return connectionsClosed;
    }
    finally
    {
      disconnectLock.unlock();
    }
  }
@@ -983,16 +752,10 @@
   */
  public long getBytesRead()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return bytesRead;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1004,16 +767,10 @@
   */
  public long getBytesWritten()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return bytesWritten;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1025,16 +782,10 @@
   */
  public long getMessagesRead()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return messagesRead;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1046,16 +797,10 @@
   */
  public long getMessagesWritten()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return messagesWritten;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1067,16 +812,10 @@
   */
  public long getOperationsInitiated()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return operationsInitiated;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1090,16 +829,10 @@
   */
  public long getOperationsCompleted()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return operationsCompleted;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1111,16 +844,10 @@
   */
  public long getOperationsAbandoned()
  {
    abandonLock.lock();
    try
    synchronized (abandonLock)
    {
      return operationsAbandoned;
    }
    finally
    {
      abandonLock.unlock();
    }
  }
@@ -1132,16 +859,10 @@
   */
  public long getAbandonRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return abandonRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1153,16 +874,10 @@
   */
  public long getAddRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return addRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1174,16 +889,10 @@
   */
  public long getAddResponses()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return addResponses;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1195,16 +904,10 @@
   */
  public long getBindRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return bindRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1216,16 +919,10 @@
   */
  public long getBindResponses()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return bindResponses;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1237,16 +934,10 @@
   */
  public long getCompareRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return compareRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1258,16 +949,10 @@
   */
  public long getCompareResponses()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return compareResponses;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1279,16 +964,10 @@
   */
  public long getDeleteRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return deleteRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1300,16 +979,10 @@
   */
  public long getDeleteResponses()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return deleteResponses;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1321,16 +994,10 @@
   */
  public long getExtendedRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return extendedRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1342,16 +1009,10 @@
   */
  public long getExtendedResponses()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return extendedResponses;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1363,16 +1024,10 @@
   */
  public long getModifyRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return modifyRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1384,16 +1039,10 @@
   */
  public long getModifyResponses()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return modifyResponses;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1405,16 +1054,10 @@
   */
  public long getModifyDNRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return modifyDNRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1426,16 +1069,10 @@
   */
  public long getModifyDNResponses()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return modifyDNResponses;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1447,16 +1084,10 @@
   */
  public long getSearchRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return searchRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }
@@ -1468,16 +1099,10 @@
   */
  public long getSearchResultEntries()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return searchResultEntries;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1489,16 +1114,10 @@
   */
  public long getSearchResultReferences()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return searchResultReferences;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1510,16 +1129,10 @@
   */
  public long getSearchResultsDone()
  {
    writeLock.lock();
    try
    synchronized (writeLock)
    {
      return searchResultsDone;
    }
    finally
    {
      writeLock.unlock();
    }
  }
@@ -1531,16 +1144,10 @@
   */
  public long getUnbindRequests()
  {
    readLock.lock();
    try
    synchronized (readLock)
    {
      return unbindRequests;
    }
    finally
    {
      readLock.unlock();
    }
  }