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