From 47be44124da7f6ad42bed03a24701ca07c00918d Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Wed, 12 Sep 2007 00:03:02 +0000
Subject: [PATCH] Make a couple of changes to help improve server performance:
---
opends/src/server/org/opends/server/config/ConfigEntry.java | 101 +++++++++++++++++++-------------------------------
1 files changed, 38 insertions(+), 63 deletions(-)
diff --git a/opends/src/server/org/opends/server/config/ConfigEntry.java b/opends/src/server/org/opends/server/config/ConfigEntry.java
index cdf8d8e..56930d9 100644
--- a/opends/src/server/org/opends/server/config/ConfigEntry.java
+++ b/opends/src/server/org/opends/server/config/ConfigEntry.java
@@ -25,7 +25,6 @@
* Portions Copyright 2006-2007 Sun Microsystems, Inc.
*/
package org.opends.server.config;
-import org.opends.messages.Message;
@@ -34,12 +33,13 @@
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.locks.ReentrantLock;
+import org.opends.messages.Message;
import org.opends.server.api.ConfigAddListener;
import org.opends.server.api.ConfigChangeListener;
import org.opends.server.api.ConfigDeleteListener;
import org.opends.server.core.DirectoryServer;
+import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeType;
import org.opends.server.types.DN;
@@ -47,10 +47,9 @@
import org.opends.server.types.ObjectClass;
import org.opends.server.types.DebugLogLevel;
+import static org.opends.messages.ConfigMessages.*;
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.messages.ConfigMessages.*;
import static org.opends.server.util.StaticUtils.*;
@@ -94,7 +93,7 @@
private Entry entry;
// The lock used to provide threadsafe access to this configuration entry.
- private ReentrantLock entryLock;
+ private Object entryLock;
@@ -115,7 +114,7 @@
addListeners = new CopyOnWriteArrayList<ConfigAddListener>();
changeListeners = new CopyOnWriteArrayList<ConfigChangeListener>();
deleteListeners = new CopyOnWriteArrayList<ConfigDeleteListener>();
- entryLock = new ReentrantLock();
+ entryLock = new Object();
}
@@ -144,16 +143,10 @@
*/
public void setEntry(Entry entry)
{
- entryLock.lock();
-
- try
+ synchronized (entryLock)
{
this.entry = entry;
}
- finally
- {
- entryLock.unlock();
- }
}
@@ -358,25 +351,10 @@
{
ConfigEntry conflictingChild;
- entryLock.lock();
-
- try
+ synchronized (entryLock)
{
conflictingChild = children.putIfAbsent(childEntry.getDN(), childEntry);
}
- catch (Exception e)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
-
- conflictingChild = null;
- }
- finally
- {
- entryLock.unlock();
- }
if (conflictingChild != null)
{
@@ -405,47 +383,44 @@
public ConfigEntry removeChild(DN childDN)
throws ConfigException
{
- entryLock.lock();
-
- try
+ synchronized (entryLock)
{
- ConfigEntry childEntry = children.get(childDN);
- if (childEntry == null)
+ try
{
- Message message = ERR_CONFIG_ENTRY_NO_SUCH_CHILD.get(
- childDN.toString(), entry.getDN().toString());
- throw new ConfigException(message);
- }
+ ConfigEntry childEntry = children.get(childDN);
+ if (childEntry == null)
+ {
+ Message message = ERR_CONFIG_ENTRY_NO_SUCH_CHILD.get(
+ childDN.toString(), entry.getDN().toString());
+ throw new ConfigException(message);
+ }
- if (childEntry.hasChildren())
+ if (childEntry.hasChildren())
+ {
+ Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF.get(
+ childDN.toString(), entry.getDN().toString());
+ throw new ConfigException(message);
+ }
+
+ children.remove(childDN);
+ return childEntry;
+ }
+ catch (ConfigException ce)
{
- Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF.get(
- childDN.toString(), entry.getDN().toString());
- throw new ConfigException(message);
+ throw ce;
}
-
- children.remove(childDN);
- return childEntry;
- }
- catch (ConfigException ce)
- {
- throw ce;
- }
- catch (Exception e)
- {
- if (debugEnabled())
+ catch (Exception e)
{
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
- Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_CHILD.
- get(String.valueOf(childDN), String.valueOf(entry.getDN()),
- stackTraceToSingleLineString(e));
- throw new ConfigException(message, e);
- }
- finally
- {
- entryLock.unlock();
+ Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_CHILD.
+ get(String.valueOf(childDN), String.valueOf(entry.getDN()),
+ stackTraceToSingleLineString(e));
+ throw new ConfigException(message, e);
+ }
}
}
--
Gitblit v1.10.0