From 9c954f1411d833f43c98ad3bc607c4ec4f07aaf5 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Fri, 08 Jun 2007 18:50:35 +0000
Subject: [PATCH] Fixed an issue where the error log doesn't actually log messages. Also improved the performance of the loggers when they are disabled.

---
 opends/src/server/org/opends/server/loggers/AccessLogger.java |  143 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 90 insertions(+), 53 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/AccessLogger.java b/opends/src/server/org/opends/server/loggers/AccessLogger.java
index 4c33238..390d771 100644
--- a/opends/src/server/org/opends/server/loggers/AccessLogger.java
+++ b/opends/src/server/org/opends/server/loggers/AccessLogger.java
@@ -28,7 +28,7 @@
 
 
 
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.List;
 import java.util.ArrayList;
 import java.lang.reflect.Method;
@@ -71,8 +71,8 @@
 
   // The set of access loggers that have been registered with the server.  It
    // will initially be empty.
-   static ConcurrentHashMap<DN, AccessLogPublisher> accessPublishers =
-       new ConcurrentHashMap<DN, AccessLogPublisher>();
+   static CopyOnWriteArrayList<AccessLogPublisher> accessPublishers =
+       new CopyOnWriteArrayList<AccessLogPublisher>();
 
    // The singleton instance of this class for configuration purposes.
    static final AccessLogger instance = new AccessLogger();
@@ -91,30 +91,31 @@
   /**
    * Add an access log publisher to the access logger.
    *
-   * @param dn The DN of the configuration entry for the publisher.
    * @param publisher The access log publisher to add.
    */
-  public synchronized static void addAccessLogPublisher(DN dn,
-                                                  AccessLogPublisher publisher)
+  public synchronized static void addAccessLogPublisher(
+      AccessLogPublisher publisher)
   {
-    accessPublishers.put(dn, publisher);
+    accessPublishers.add(publisher);
   }
 
   /**
    * Remove an access log publisher from the access logger.
    *
-   * @param dn The DN of the publisher to remove.
+   * @param publisher The access log publisher to remove.
    * @return The publisher that was removed or null if it was not found.
    */
-  public synchronized static AccessLogPublisher removeAccessLogPublisher(DN dn)
+  public synchronized static boolean removeAccessLogPublisher(
+      AccessLogPublisher publisher)
   {
-    AccessLogPublisher AccessLogPublisher = accessPublishers.get(dn);
-    if(AccessLogPublisher != null)
+    boolean removed = accessPublishers.remove(publisher);
+
+    if(removed)
     {
-      AccessLogPublisher.close();
+      publisher.close();
     }
 
-    return AccessLogPublisher;
+    return removed;
   }
 
   /**
@@ -122,7 +123,7 @@
    */
   public synchronized static void removeAllAccessLogPublishers()
   {
-    for(AccessLogPublisher publisher : accessPublishers.values())
+    for(AccessLogPublisher publisher : accessPublishers)
     {
       publisher.close();
     }
@@ -153,7 +154,7 @@
        {
          AccessLogPublisher AccessLogPublisher = getAccessPublisher(config);
 
-         addAccessLogPublisher(config.dn(), AccessLogPublisher);
+         addAccessLogPublisher(AccessLogPublisher);
        }
      }
    }
@@ -196,7 +197,7 @@
        {
          AccessLogPublisher AccessLogPublisher = getAccessPublisher(config);
 
-         addAccessLogPublisher(config.dn(), AccessLogPublisher);
+         addAccessLogPublisher(AccessLogPublisher);
        }
        catch(ConfigException e)
        {
@@ -234,9 +235,18 @@
      ArrayList<String> messages = new ArrayList<String>();
 
      DN dn = config.dn();
-     AccessLogPublisher AccessLogPublisher = accessPublishers.get(dn);
 
-     if(AccessLogPublisher == null)
+    AccessLogPublisher accessLogPublisher = null;
+    for(AccessLogPublisher publisher : accessPublishers)
+    {
+      if(publisher.getDN().equals(dn))
+      {
+        accessLogPublisher = publisher;
+        break;
+      }
+    }
+
+     if(accessLogPublisher == null)
      {
        if(config.isEnabled())
        {
@@ -254,7 +264,7 @@
          // indicate that administrative action is required for that
          // change to take effect.
          String className = config.getJavaImplementationClass();
-         if(!className.equals(AccessLogPublisher.getClass().getName()))
+         if(!className.equals(accessLogPublisher.getClass().getName()))
          {
            adminActionRequired = true;
          }
@@ -262,7 +272,7 @@
        else
        {
          // The publisher is being disabled so shut down and remove.
-         removeAccessLogPublisher(config.dn());
+         removeAccessLogPublisher(accessLogPublisher);
        }
      }
 
@@ -276,8 +286,18 @@
                                                List<String> unacceptableReasons)
    {
      DN dn = config.dn();
-     AccessLogPublisher AccessLogPublisher = accessPublishers.get(dn);
-     return AccessLogPublisher != null;
+
+    AccessLogPublisher accessLogPublisher = null;
+    for(AccessLogPublisher publisher : accessPublishers)
+    {
+      if(publisher.getDN().equals(dn))
+      {
+        accessLogPublisher = publisher;
+        break;
+      }
+    }
+
+     return accessLogPublisher != null;
 
    }
 
@@ -285,16 +305,33 @@
    * {@inheritDoc}
    */
    public ConfigChangeResult applyConfigurationDelete(
-       AccessLogPublisherCfg config)
-   {
-     // Default result code.
-     ResultCode resultCode = ResultCode.SUCCESS;
-     boolean adminActionRequired = false;
+      AccessLogPublisherCfg config)
+  {
+    // Default result code.
+    ResultCode resultCode = ResultCode.SUCCESS;
+    boolean adminActionRequired = false;
 
-     removeAccessLogPublisher(config.dn());
+    AccessLogPublisher accessLogPublisher = null;
+    for(AccessLogPublisher publisher : accessPublishers)
+    {
+      if(publisher.getDN().equals(config.dn()))
+      {
+        accessLogPublisher = publisher;
+        break;
+      }
+    }
 
-     return new ConfigChangeResult(resultCode, adminActionRequired);
-   }
+    if(accessLogPublisher != null)
+    {
+      removeAccessLogPublisher(accessLogPublisher);
+    }
+    else
+    {
+      resultCode = ResultCode.NO_SUCH_OBJECT;
+    }
+
+    return new ConfigChangeResult(resultCode, adminActionRequired);
+  }
 
    private boolean isJavaClassAcceptable(AccessLogPublisherCfg config,
                                          List<String> unacceptableReasons)
@@ -390,7 +427,7 @@
    */
   public static void logConnect(ClientConnection clientConnection)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logConnect(clientConnection);
     }
@@ -412,7 +449,7 @@
                                    DisconnectReason disconnectReason,
                                    String message)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logDisconnect(clientConnection, disconnectReason, message);
     }
@@ -428,7 +465,7 @@
    */
   public static void logAbandonRequest(AbandonOperation abandonOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logAbandonRequest(abandonOperation);
     }
@@ -445,7 +482,7 @@
    */
   public static void logAbandonResult(AbandonOperation abandonOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logAbandonResult(abandonOperation);
     }
@@ -462,7 +499,7 @@
    */
   public static void logAddRequest(AddOperation addOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logAddRequest(addOperation);
     }
@@ -479,7 +516,7 @@
    */
   public static void logAddResponse(AddOperation addOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logAddResponse(addOperation);
     }
@@ -496,7 +533,7 @@
    */
   public static void logBindRequest(BindOperation bindOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logBindRequest(bindOperation);
     }
@@ -513,7 +550,7 @@
    */
   public static void logBindResponse(BindOperation bindOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logBindResponse(bindOperation);
     }
@@ -530,7 +567,7 @@
    */
   public static void logCompareRequest(CompareOperation compareOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logCompareRequest(compareOperation);
     }
@@ -547,7 +584,7 @@
    */
   public static void logCompareResponse(CompareOperation compareOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logCompareResponse(compareOperation);
     }
@@ -564,7 +601,7 @@
    */
   public static void logDeleteRequest(DeleteOperation deleteOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logDeleteRequest(deleteOperation);
     }
@@ -581,7 +618,7 @@
    */
   public static void logDeleteResponse(DeleteOperation deleteOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logDeleteResponse(deleteOperation);
     }
@@ -598,7 +635,7 @@
    */
   public static void logExtendedRequest(ExtendedOperation extendedOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logExtendedRequest(extendedOperation);
     }
@@ -615,7 +652,7 @@
    */
   public static void logExtendedResponse(ExtendedOperation extendedOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logExtendedResponse(extendedOperation);
     }
@@ -632,7 +669,7 @@
    */
   public static void logModifyRequest(ModifyOperation modifyOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logModifyRequest(modifyOperation);
     }
@@ -649,7 +686,7 @@
    */
   public static void logModifyResponse(ModifyOperation modifyOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logModifyResponse(modifyOperation);
     }
@@ -666,7 +703,7 @@
    */
   public static void logModifyDNRequest(ModifyDNOperation modifyDNOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logModifyDNRequest(modifyDNOperation);
     }
@@ -684,7 +721,7 @@
    */
   public static void logModifyDNResponse(ModifyDNOperation modifyDNOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logModifyDNResponse(modifyDNOperation);
     }
@@ -701,7 +738,7 @@
    */
   public static void logSearchRequest(SearchOperation searchOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logSearchRequest(searchOperation);
     }
@@ -721,7 +758,7 @@
   public static void logSearchResultEntry(SearchOperation searchOperation,
                                           SearchResultEntry searchEntry)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logSearchResultEntry(searchOperation, searchEntry);
     }
@@ -740,7 +777,7 @@
   public static void logSearchResultReference(SearchOperation searchOperation,
                           SearchResultReference searchReference)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logSearchResultReference(searchOperation, searchReference);
     }
@@ -757,7 +794,7 @@
    */
   public static void logSearchResultDone(SearchOperation searchOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logSearchResultDone(searchOperation);
     }
@@ -774,7 +811,7 @@
    */
   public static void logUnbind(UnbindOperation unbindOperation)
   {
-    for (AccessLogPublisher publisher : accessPublishers.values())
+    for (AccessLogPublisher publisher : accessPublishers)
     {
       publisher.logUnbind(unbindOperation);
     }

--
Gitblit v1.10.0