From cf3a52a7591faffc24a890b5baebfd260b929fcd 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.

---
 opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java |   77 +++++++++++++++++++++++++++-----------
 1 files changed, 54 insertions(+), 23 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
index 4f1d514..1d45247 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugLogger.java
@@ -28,6 +28,7 @@
 package org.opends.server.loggers.debug;
 
 import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ConcurrentHashMap;
 import java.lang.reflect.Method;
 import java.lang.reflect.InvocationTargetException;
@@ -81,10 +82,8 @@
 
   // The set of debug loggers that have been registered with the server.  It
   // will initially be empty.
-  private static ConcurrentHashMap<DN,
-      DebugLogPublisher> debugPublishers =
-      new ConcurrentHashMap<DN,
-          DebugLogPublisher>();
+  private static CopyOnWriteArrayList<DebugLogPublisher> debugPublishers =
+      new CopyOnWriteArrayList<DebugLogPublisher>();
 
   // Trace methods will use this static boolean to determine if debug is
   // enabled so to not incur the cost of calling debugPublishers.isEmtpty().
@@ -96,13 +95,12 @@
   /**
    * Add an debug log publisher to the debug logger.
    *
-   * @param dn The DN of the configuration entry for the publisher.
    * @param publisher The error log publisher to add.
    */
-  public synchronized static void addDebugLogPublisher(DN dn,
-                                                 DebugLogPublisher publisher)
+  public synchronized static void addDebugLogPublisher(
+      DebugLogPublisher publisher)
   {
-    debugPublishers.put(dn, publisher);
+    debugPublishers.add(publisher);
 
     updateTracerSettings();
 
@@ -112,16 +110,17 @@
   /**
    * Remove an debug log publisher from the debug logger.
    *
-   * @param dn The DN of the publisher to remove.
+   * @param publisher The debug log publisher to remove.
    * @return The publisher that was removed or null if it was not found.
    */
-  public synchronized static DebugLogPublisher removeDebugLogPublisher(DN dn)
+  public synchronized static boolean removeDebugLogPublisher(
+      DebugLogPublisher publisher)
   {
-    DebugLogPublisher removed =  debugPublishers.remove(dn);
+    boolean removed = debugPublishers.remove(publisher);
 
-    if(removed != null)
+    if(removed)
     {
-      removed.close();
+      publisher.close();
     }
 
     updateTracerSettings();
@@ -139,7 +138,7 @@
    */
   public synchronized static void removeAllDebugLogPublishers()
   {
-    for(DebugLogPublisher publisher : debugPublishers.values())
+    for(DebugLogPublisher publisher : debugPublishers)
     {
       publisher.close();
     }
@@ -174,7 +173,7 @@
       {
         DebugLogPublisher debugLogPublisher = getDebugPublisher(config);
 
-        addDebugLogPublisher(config.dn(), debugLogPublisher);
+        addDebugLogPublisher(debugLogPublisher);
       }
     }
   }
@@ -218,7 +217,7 @@
         DebugLogPublisher debugLogPublisher =
             getDebugPublisher(config);
 
-        addDebugLogPublisher(config.dn(), debugLogPublisher);
+        addDebugLogPublisher(debugLogPublisher);
       }
       catch(ConfigException e)
       {
@@ -248,7 +247,15 @@
     ArrayList<String> messages = new ArrayList<String>();
 
     DN dn = config.dn();
-    DebugLogPublisher debugLogPublisher = debugPublishers.get(dn);
+
+    DebugLogPublisher debugLogPublisher = null;
+    for(DebugLogPublisher publisher : debugPublishers)
+    {
+      if(publisher.getDN().equals(dn))
+      {
+        debugLogPublisher = publisher;
+      }
+    }
 
     if(debugLogPublisher == null)
     {
@@ -276,7 +283,7 @@
       else
       {
         // The publisher is being disabled so shut down and remove.
-        removeDebugLogPublisher(config.dn());
+        removeDebugLogPublisher(debugLogPublisher);
       }
     }
 
@@ -290,7 +297,16 @@
                                                List<String> unacceptableReasons)
   {
     DN dn = config.dn();
-    DebugLogPublisher debugLogPublisher = debugPublishers.get(dn);
+
+    DebugLogPublisher debugLogPublisher = null;
+    for(DebugLogPublisher publisher : debugPublishers)
+    {
+      if(publisher.getDN().equals(dn))
+      {
+        debugLogPublisher = publisher;
+      }
+    }
+
     return debugLogPublisher != null;
 
   }
@@ -305,7 +321,23 @@
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
 
-    DebugLogPublisher publisher = removeDebugLogPublisher(config.dn());
+    DebugLogPublisher debugLogPublisher = null;
+    for(DebugLogPublisher publisher : debugPublishers)
+    {
+      if(publisher.getDN().equals(config.dn()))
+      {
+        debugLogPublisher = publisher;
+      }
+    }
+
+    if(debugLogPublisher != null)
+    {
+      removeDebugLogPublisher(debugLogPublisher);
+    }
+    else
+    {
+      resultCode = ResultCode.NO_SUCH_OBJECT;
+    }
 
     return new ConfigChangeResult(resultCode, adminActionRequired);
   }
@@ -399,7 +431,7 @@
   static void updateTracerSettings()
   {
     DebugLogPublisher[] publishers =
-        debugPublishers.values().toArray(new DebugLogPublisher[0]);
+        debugPublishers.toArray(new DebugLogPublisher[0]);
 
     for(DebugTracer tracer : classTracers.values())
     {
@@ -436,8 +468,7 @@
   public static DebugTracer getTracer()
   {
     DebugTracer tracer =
-        new DebugTracer(debugPublishers.values().
-            toArray(new DebugLogPublisher[0]));
+        new DebugTracer(debugPublishers.toArray(new DebugLogPublisher[0]));
     classTracers.put(tracer.getTracedClassName(), tracer);
 
     return tracer;

--
Gitblit v1.10.0