From ba04f8f7aeeea23a2b27dd68294d882e98481882 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Tue, 11 Sep 2007 01:43:50 +0000
Subject: [PATCH] Make a number of relatively simple changes to provide basic performance improvements, including:
---
opends/src/server/org/opends/server/core/NetworkGroup.java | 4
opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java | 6
opends/src/guitools/org/opends/guitools/statuspanel/StatusLog.java | 2
opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java | 6
opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java | 8
opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java | 2
opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java | 6
opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java | 8
opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java | 38 +++---
opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java | 2
opends/src/server/org/opends/server/core/WorkflowTopologyNode.java | 4
opends/src/server/org/opends/server/types/DN.java | 33 +++--
opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java | 1
opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java | 14 +-
opends/src/server/org/opends/server/core/NetworkGroupNamingContexts.java | 4
opends/src/server/org/opends/server/util/StaticUtils.java | 2
opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java | 8
opends/src/server/org/opends/server/types/FilePermission.java | 17 +-
opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java | 4
opends/src/server/org/opends/server/types/Entry.java | 9
opends/src/server/org/opends/server/backends/jeb/ImportJob.java | 53 ++++++++
opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java | 2
opends/src/quicksetup/org/opends/quicksetup/util/Utils.java | 6
opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java | 6
opends/src/server/org/opends/server/core/RootDseWorkflowTopology.java | 4
opends/src/quicksetup/org/opends/quicksetup/QuickSetupLog.java | 2
opends/src/server/org/opends/server/backends/jeb/DN2URI.java | 85 +++++++++++++
27 files changed, 237 insertions(+), 99 deletions(-)
diff --git a/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java b/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
index 6993107..dabebba 100644
--- a/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
+++ b/opends/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
@@ -56,7 +56,6 @@
import java.util.HashSet;
import java.util.Set;
import java.util.EnumSet;
-import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
diff --git a/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java b/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java
index a3f5e43..9f901b4 100644
--- a/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java
+++ b/opends/src/build-tools/org/opends/build/tools/MessagePropertyKey.java
@@ -213,7 +213,7 @@
* @return name of message descriptor
*/
public String getMessageDescriptorName() {
- return new StringBuffer()
+ return new StringBuilder()
.append(this.severity.messageDesciptorName())
.append("_")
.append(this.description).toString();
diff --git a/opends/src/guitools/org/opends/guitools/statuspanel/StatusLog.java b/opends/src/guitools/org/opends/guitools/statuspanel/StatusLog.java
index 59c5a58..e138881 100644
--- a/opends/src/guitools/org/opends/guitools/statuspanel/StatusLog.java
+++ b/opends/src/guitools/org/opends/guitools/statuspanel/StatusLog.java
@@ -77,7 +77,7 @@
}
static private String getInitialLogRecord() {
- StringBuffer sb = new StringBuffer()
+ StringBuilder sb = new StringBuilder()
.append("Status application launched " +
DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG).
diff --git a/opends/src/quicksetup/org/opends/quicksetup/QuickSetupLog.java b/opends/src/quicksetup/org/opends/quicksetup/QuickSetupLog.java
index 9511cd6..6a0211e 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/QuickSetupLog.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/QuickSetupLog.java
@@ -113,7 +113,7 @@
static private String getInitialLogRecord() {
// Note; currently the logs are not internationalized.
- StringBuffer sb = new StringBuffer()
+ StringBuilder sb = new StringBuilder()
.append("QuickSetup application launched " +
DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG).
diff --git a/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java b/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
index fa9f86a..02f1dfd 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -855,7 +855,7 @@
String[] args = new String[argList.size()];
argList.toArray(args);
- StringBuffer cmd = new StringBuffer();
+ StringBuilder cmd = new StringBuilder();
for (String s : argList)
{
if (cmd.length() > 0)
diff --git a/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java b/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
index b97621a..2a980f0 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/upgrader/RemoteBuildManager.java
@@ -325,7 +325,7 @@
Build build = parseBuildLine(line);
builds.add(build);
} catch (IllegalArgumentException iae) {
- StringBuffer msg = new StringBuffer()
+ StringBuilder msg = new StringBuilder()
.append("Error parsing line '")
.append(line)
.append("': ")
@@ -367,7 +367,7 @@
if (displayName == null ||
downloadUrlString == null ||
categoryString == null) {
- StringBuffer msg = new StringBuffer()
+ StringBuilder msg = new StringBuilder()
.append("Line '")
.append(line)
.append("' is incomplete or is not correctly delimited")
@@ -378,7 +378,7 @@
try {
downloadUrl = new URL(downloadUrlString);
} catch (MalformedURLException e) {
- StringBuffer msg = new StringBuffer()
+ StringBuilder msg = new StringBuilder()
.append("URL '")
.append(downloadUrlString)
.append("' is invalid");
@@ -386,7 +386,7 @@
}
category = Build.Category.fromString(categoryString);
if (category == null) {
- StringBuffer msg = new StringBuffer()
+ StringBuilder msg = new StringBuilder()
.append("Category '")
.append(categoryString)
.append("' is invalid; must be one of ");
diff --git a/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
index 0cc093c..10845d3 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -517,7 +517,7 @@
public static String getStringFromCollection(Collection<String> col,
String separator)
{
- StringBuffer msg = new StringBuffer();
+ StringBuilder msg = new StringBuilder();
for (String m : col)
{
@@ -1139,7 +1139,7 @@
*/
static public String listToString(List<?> list, String separator,
String prefix, String suffix) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
if (prefix != null) {
sb.append(prefix);
@@ -1163,7 +1163,7 @@
* @return String representing the list
*/
static public String stringArrayToString(String[] array, String separator) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < array.length; i++) {
sb.append(array[i]);
if (i < array.length - 1) {
diff --git a/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java b/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java
index d883c2b..ca3f00f 100644
--- a/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java
+++ b/opends/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServerGroup.java
@@ -549,7 +549,7 @@
Set<Map<ServerGroupProperty, Object>> result = adsCtx
.readServerGroupRegistry();
- StringBuffer buffer = new StringBuffer();
+ StringBuilder buffer = new StringBuilder();
// if not verbose mode, print group name (1 per line)
if (! verboseArg.isPresent())
@@ -797,7 +797,7 @@
{
returnCode = SUCCESSFUL;
}
- StringBuffer buffer = new StringBuffer();
+ StringBuilder buffer = new StringBuilder();
for (String member : memberList)
{
// We shouldn't print out the "cn="
@@ -831,7 +831,7 @@
.readServerGroupRegistry();
String MemberId = listMembershipMemberNameArg.getValue();
- StringBuffer buffer = new StringBuffer();
+ StringBuilder buffer = new StringBuilder();
for (Map<ServerGroupProperty, Object> groupProps : result)
{
// Get the group name;
diff --git a/opends/src/server/org/opends/server/backends/jeb/DN2URI.java b/opends/src/server/org/opends/server/backends/jeb/DN2URI.java
index 1c06e12..b2a14c7 100644
--- a/opends/src/server/org/opends/server/backends/jeb/DN2URI.java
+++ b/opends/src/server/org/opends/server/backends/jeb/DN2URI.java
@@ -25,17 +25,20 @@
* Portions Copyright 2006-2007 Sun Microsystems, Inc.
*/
package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
import com.sleepycat.je.*;
+import org.opends.messages.Message;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
+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.ConditionResult;
+import org.opends.server.types.DebugLogLevel;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
@@ -55,8 +58,6 @@
import static org.opends.server.util.ServerConstants.ATTR_REFERRAL_URL;
import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.DebugLogLevel;
import static org.opends.messages.JebMessages.
INFO_JEB_REFERRAL_RESULT_MESSAGE;
/**
@@ -84,10 +85,19 @@
* The standard attribute type that is used to specify the set of referral
* URLs in a referral entry.
*/
- public AttributeType referralType =
+ private final AttributeType referralType =
DirectoryServer.getAttributeType(ATTR_REFERRAL_URL);
/**
+ * A flag that indicates whether there are any referrals contained in this
+ * database. It should only be set to {@code false} when it is known that
+ * there are no referrals.
+ */
+ private volatile ConditionResult containsReferrals =
+ ConditionResult.UNDEFINED;
+
+
+ /**
* Create a new object representing a referral database in a given
* entryContainer.
*
@@ -155,6 +165,7 @@
{
return false;
}
+ containsReferrals = ConditionResult.TRUE;
return true;
}
@@ -180,6 +191,7 @@
{
return false;
}
+ containsReferrals = containsReferrals(txn);
return true;
}
@@ -220,10 +232,55 @@
{
return false;
}
+ containsReferrals = containsReferrals(txn);
return true;
}
/**
+ * Indicates whether the underlying database contains any referrals.
+ *
+ * @param txn The transaction to use when making the determination.
+ *
+ * @return {@code true} if it is believed that the underlying database may
+ * contain at least one referral, or {@code false} if it is certain
+ * that it doesn't.
+ */
+ private ConditionResult containsReferrals(Transaction txn)
+ {
+ try
+ {
+ Cursor cursor = openCursor(txn, null);
+ DatabaseEntry key = new DatabaseEntry();
+ DatabaseEntry data = new DatabaseEntry();
+
+ OperationStatus status = cursor.getFirst(key, data, null);
+ cursor.close();
+
+ if (status == OperationStatus.SUCCESS)
+ {
+ return ConditionResult.TRUE;
+ }
+ else if (status == OperationStatus.NOTFOUND)
+ {
+ return ConditionResult.FALSE;
+ }
+ else
+ {
+ return ConditionResult.UNDEFINED;
+ }
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+
+ return ConditionResult.UNDEFINED;
+ }
+ }
+
+ /**
* Update the referral database for an entry that has been modified. Does
* not do anything unless the entry before the modification or the entry after
* the modification is a referral entry.
@@ -478,6 +535,16 @@
public void targetEntryReferrals(DN targetDN, SearchScope searchScope)
throws DirectoryException
{
+ if (containsReferrals == ConditionResult.UNDEFINED)
+ {
+ containsReferrals = containsReferrals(null);
+ }
+
+ if (containsReferrals == ConditionResult.FALSE)
+ {
+ return;
+ }
+
Transaction txn = null;
CursorConfig cursorConfig = null;
@@ -549,6 +616,16 @@
public boolean returnSearchReferences(SearchOperation searchOp)
throws DirectoryException
{
+ if (containsReferrals == ConditionResult.UNDEFINED)
+ {
+ containsReferrals = containsReferrals(null);
+ }
+
+ if (containsReferrals == ConditionResult.FALSE)
+ {
+ return true;
+ }
+
Transaction txn = null;
CursorConfig cursorConfig = null;
diff --git a/opends/src/server/org/opends/server/backends/jeb/ImportJob.java b/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
index 8b0ef2f..9dbebda 100644
--- a/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
+++ b/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
@@ -98,6 +98,17 @@
new HashMap<DN, ImportContext>();
/**
+ * The maximum number of parent ID values that we will remember.
+ */
+ private static final int PARENT_ID_MAP_SIZE = 50;
+
+ /**
+ * Map of likely parent entry DNs to their entry IDs.
+ */
+ private HashMap<DN,EntryID> parentIDMap =
+ new HashMap<DN,EntryID>(PARENT_ID_MAP_SIZE);
+
+ /**
* The number of entries imported.
*/
private int importedCount;
@@ -867,7 +878,7 @@
getParentWithinBase(entryDN);
if (parentDN != null)
{
- parentID = dn2id.get(txn, parentDN);
+ parentID = getParentID(parentDN, dn2id, txn);
if (parentID == null)
{
// Reject the entry.
@@ -952,6 +963,46 @@
}
/**
+ * Retrieves the entry ID for the entry with the given DN. This will use an
+ * in-memory hash if possible, or will go to the database if it's not in
+ * cache. This should only be used for cacheable operations (like getting the
+ * entry ID for the parent entry) where the same parent ID is likely to be
+ * used multiple times.
+ *
+ * @param parentDN The DN of the parent entry for which to retrieve the
+ * corresponding entry ID.
+ * @param dn2id The handle to the dn2id database to use if the parent DN
+ * isn't found in the local cache.
+ * @param txn The transaction to use when interacting with the dn2id
+ * database.
+ *
+ * @return The entry ID for the entry with the given DN, or {@code null} if
+ * no such entry exists.
+ */
+ private EntryID getParentID(DN parentDN, DN2ID dn2id, Transaction txn)
+ throws DatabaseException
+ {
+ EntryID parentID = parentIDMap.get(parentDN);
+ if (parentID != null)
+ {
+ return parentID;
+ }
+
+ parentID = dn2id.get(txn, parentDN);
+ if (parentID != null)
+ {
+ if (parentIDMap.size() >= PARENT_ID_MAP_SIZE)
+ {
+ parentIDMap.keySet().iterator().remove();
+ }
+
+ parentIDMap.put(parentDN, parentID);
+ }
+
+ return parentID;
+ }
+
+ /**
* Get a statistic of the number of keys that reached the entry limit.
* @return The number of keys that reached the entry limit.
*/
diff --git a/opends/src/server/org/opends/server/core/NetworkGroup.java b/opends/src/server/org/opends/server/core/NetworkGroup.java
index 3e62c7f..aef2519 100644
--- a/opends/src/server/org/opends/server/core/NetworkGroup.java
+++ b/opends/src/server/org/opends/server/core/NetworkGroup.java
@@ -553,9 +553,9 @@
* @param leftMargin white spaces used to indent traces
* @return a string buffer that contains trace information
*/
- public StringBuffer toString(String leftMargin)
+ public StringBuilder toString(String leftMargin)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
String newMargin = leftMargin + " ";
sb.append (leftMargin + "Networkgroup (" + networkGroupID+ "\n");
diff --git a/opends/src/server/org/opends/server/core/NetworkGroupNamingContexts.java b/opends/src/server/org/opends/server/core/NetworkGroupNamingContexts.java
index f71df58..4e88135 100644
--- a/opends/src/server/org/opends/server/core/NetworkGroupNamingContexts.java
+++ b/opends/src/server/org/opends/server/core/NetworkGroupNamingContexts.java
@@ -128,9 +128,9 @@
* @param leftMargin white spaces used to indent traces
* @return a string buffer that contains trace information
*/
- public StringBuffer toString (String leftMargin)
+ public StringBuilder toString (String leftMargin)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
String newMargin = leftMargin + " ";
sb.append (leftMargin + "List of naming contexts:\n");
diff --git a/opends/src/server/org/opends/server/core/RootDseWorkflowTopology.java b/opends/src/server/org/opends/server/core/RootDseWorkflowTopology.java
index 1e526d2..eb0ff47 100644
--- a/opends/src/server/org/opends/server/core/RootDseWorkflowTopology.java
+++ b/opends/src/server/org/opends/server/core/RootDseWorkflowTopology.java
@@ -162,9 +162,9 @@
* @param leftMargin white spaces used to indent the traces
* @return a string buffer that contains trace information
*/
- public StringBuffer toString(String leftMargin)
+ public StringBuilder toString(String leftMargin)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
// display the baseDN
sb.append(leftMargin + "Workflow baseDN:[ \"\" ]\n");
diff --git a/opends/src/server/org/opends/server/core/WorkflowTopologyNode.java b/opends/src/server/org/opends/server/core/WorkflowTopologyNode.java
index cc93f7a..fa5457f 100644
--- a/opends/src/server/org/opends/server/core/WorkflowTopologyNode.java
+++ b/opends/src/server/org/opends/server/core/WorkflowTopologyNode.java
@@ -494,9 +494,9 @@
* @param leftMargin white spaces used to indent the traces
* @return a string buffer that contains trace information
*/
- public StringBuffer toString(String leftMargin)
+ public StringBuilder toString(String leftMargin)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
// display the baseDN
DN baseDN = getBaseDN();
diff --git a/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java b/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
index b997b0f..9ac5196 100644
--- a/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
+++ b/opends/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
@@ -29,8 +29,8 @@
import java.security.MessageDigest;
-import java.security.SecureRandom;
import java.util.Arrays;
+import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import org.opends.messages.Message;
@@ -97,7 +97,7 @@
private ReentrantLock digestLock;
// The secure random number generator to use to generate the salt values.
- private SecureRandom random;
+ private Random random;
@@ -140,7 +140,7 @@
digestLock = new ReentrantLock();
- random = new SecureRandom();
+ random = new Random();
}
diff --git a/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java b/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
index eee7a91..91e26d7 100644
--- a/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
+++ b/opends/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
@@ -29,8 +29,8 @@
import java.security.MessageDigest;
-import java.security.SecureRandom;
import java.util.Arrays;
+import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import org.opends.messages.Message;
@@ -97,7 +97,7 @@
private ReentrantLock digestLock;
// The secure random number generator to use to generate the salt values.
- private SecureRandom random;
+ private Random random;
@@ -138,7 +138,7 @@
}
digestLock = new ReentrantLock();
- random = new SecureRandom();
+ random = new Random();
}
@@ -536,7 +536,7 @@
throws DirectoryException
{
byte[] saltBytes = new byte[NUM_SALT_BYTES];
- new SecureRandom().nextBytes(saltBytes);
+ new Random().nextBytes(saltBytes);
byte[] passwordPlusSalt = new byte[passwordBytes.length + NUM_SALT_BYTES];
System.arraycopy(passwordBytes, 0, passwordPlusSalt, 0,
diff --git a/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java b/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
index 401e192..3b21156 100644
--- a/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
+++ b/opends/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
@@ -29,8 +29,8 @@
import java.security.MessageDigest;
-import java.security.SecureRandom;
import java.util.Arrays;
+import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import org.opends.messages.Message;
@@ -98,7 +98,7 @@
private ReentrantLock digestLock;
// The secure random number generator to use to generate the salt values.
- private SecureRandom random;
+ private Random random;
@@ -141,7 +141,7 @@
digestLock = new ReentrantLock();
- random = new SecureRandom();
+ random = new Random();
}
diff --git a/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java b/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
index bfb25ff..9f05505 100644
--- a/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
+++ b/opends/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
@@ -29,8 +29,8 @@
import java.security.MessageDigest;
-import java.security.SecureRandom;
import java.util.Arrays;
+import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import org.opends.messages.Message;
@@ -98,7 +98,7 @@
private ReentrantLock digestLock;
// The secure random number generator to use to generate the salt values.
- private SecureRandom random;
+ private Random random;
@@ -141,7 +141,7 @@
digestLock = new ReentrantLock();
- random = new SecureRandom();
+ random = new Random();
}
diff --git a/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java b/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
index 7a57e37..793a30f 100644
--- a/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
+++ b/opends/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
@@ -29,8 +29,8 @@
import java.security.MessageDigest;
-import java.security.SecureRandom;
import java.util.Arrays;
+import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import org.opends.messages.Message;
@@ -98,7 +98,7 @@
private ReentrantLock digestLock;
// The secure random number generator to use to generate the salt values.
- private SecureRandom random;
+ private Random random;
@@ -140,7 +140,7 @@
}
digestLock = new ReentrantLock();
- random = new SecureRandom();
+ random = new Random();
}
@@ -538,7 +538,7 @@
throws DirectoryException
{
byte[] saltBytes = new byte[NUM_SALT_BYTES];
- new SecureRandom().nextBytes(saltBytes);
+ new Random().nextBytes(saltBytes);
byte[] passwordPlusSalt = new byte[passwordBytes.length + NUM_SALT_BYTES];
System.arraycopy(passwordBytes, 0, passwordPlusSalt, 0,
diff --git a/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java b/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
index 5da3423..079af66 100644
--- a/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
+++ b/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
@@ -138,7 +138,7 @@
public static String formatStackTrace(Throwable t, int maxDepth,
boolean includeCause)
{
- StringBuffer buffer= new StringBuffer();
+ StringBuilder buffer= new StringBuilder();
while(t != null)
{
@@ -191,7 +191,7 @@
public static String formatStackTrace(StackTraceElement[] stackTrace,
int maxDepth)
{
- StringBuffer buffer= new StringBuffer();
+ StringBuilder buffer= new StringBuilder();
if (stackTrace != null) {
int frameLimit= Math.min(maxDepth, stackTrace.length);
diff --git a/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java b/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
index 2b250c4..4b34bb4 100644
--- a/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
+++ b/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
@@ -921,7 +921,7 @@
private String buildDefaultEntryMessage(Object[] args)
{
- StringBuffer format = new StringBuffer();
+ StringBuilder format = new StringBuilder();
for (int i = 0; i < args.length; i++)
{
if (i != 0) format.append(", ");
diff --git a/opends/src/server/org/opends/server/types/DN.java b/opends/src/server/org/opends/server/types/DN.java
index 4b02d31..d5ca252 100644
--- a/opends/src/server/org/opends/server/types/DN.java
+++ b/opends/src/server/org/opends/server/types/DN.java
@@ -29,17 +29,17 @@
import java.io.Serializable;
-import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import org.opends.messages.Message;
import org.opends.server.core.DirectoryServer;
+import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.protocols.asn1.ASN1OctetString;
+import static org.opends.messages.SchemaMessages.*;
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.SchemaMessages.*;
-import org.opends.messages.Message;
-
import static org.opends.server.util.StaticUtils.*;
@@ -148,7 +148,7 @@
* @param rdnComponents The set of RDN components that make up
* this DN.
*/
- public DN(ArrayList<RDN> rdnComponents)
+ public DN(List<RDN> rdnComponents)
{
if ((rdnComponents == null) || rdnComponents.isEmpty())
{
@@ -491,14 +491,14 @@
// A null or empty DN is acceptable.
if (dnString == null)
{
- return new DN(new ArrayList<RDN>(0));
+ return NULL_DN;
}
byte[] dnBytes = dnString.value();
int length = dnBytes.length;
if (length == 0)
{
- return new DN(new ArrayList<RDN>(0));
+ return NULL_DN;
}
@@ -527,7 +527,7 @@
// This means that the DN was completely comprised of spaces
// and therefore should be considered the same as a null or
// empty DN.
- return new DN(new ArrayList<RDN>(0));
+ return NULL_DN;
}
else
{
@@ -541,7 +541,7 @@
// components.
boolean allowExceptions =
DirectoryServer.allowAttributeNameExceptions();
- ArrayList<RDN> rdnComponents = new ArrayList<RDN>();
+ LinkedList<RDN> rdnComponents = new LinkedList<RDN>();
while (true)
{
StringBuilder attributeName = new StringBuilder();
@@ -885,13 +885,13 @@
// A null or empty DN is acceptable.
if (dnString == null)
{
- return new DN(new ArrayList<RDN>(0));
+ return NULL_DN;
}
int length = dnString.length();
if (length == 0)
{
- return new DN(new ArrayList<RDN>(0));
+ return NULL_DN;
}
@@ -907,7 +907,7 @@
// This means that the DN was completely comprised of spaces
// and therefore should be considered the same as a null or
// empty DN.
- return new DN(new ArrayList<RDN>(0));
+ return NULL_DN;
}
else
{
@@ -921,7 +921,7 @@
// components.
boolean allowExceptions =
DirectoryServer.allowAttributeNameExceptions();
- ArrayList<RDN> rdnComponents = new ArrayList<RDN>();
+ LinkedList<RDN> rdnComponents = new LinkedList<RDN>();
while (true)
{
StringBuilder attributeName = new StringBuilder();
@@ -2675,6 +2675,11 @@
StringBuilder hexChars)
throws DirectoryException
{
+ if (hexChars.length() == 0)
+ {
+ return;
+ }
+
try
{
byte[] hexBytes = hexStringToByteArray(hexChars.toString());
diff --git a/opends/src/server/org/opends/server/types/Entry.java b/opends/src/server/org/opends/server/types/Entry.java
index 973fd2f..5e0fc17 100644
--- a/opends/src/server/org/opends/server/types/Entry.java
+++ b/opends/src/server/org/opends/server/types/Entry.java
@@ -5447,9 +5447,10 @@
// Next, the set of objectclasses.
+ final boolean typesOnly = exportConfig.typesOnly();
if (exportConfig.includeObjectClasses())
{
- if (exportConfig.typesOnly())
+ if (typesOnly)
{
StringBuilder ocLine = new StringBuilder("objectClass:");
writeLDIFLine(ocLine, writer, wrapLines, wrapColumn);
@@ -5490,7 +5491,7 @@
continue;
}
- if (exportConfig.typesOnly())
+ if (typesOnly)
{
StringBuilder attrName = new StringBuilder(a.getName());
for (String o : a.getOptions())
@@ -5552,7 +5553,7 @@
continue;
}
- if (exportConfig.typesOnly())
+ if (typesOnly)
{
StringBuilder attrName = new StringBuilder(a.getName());
for (String o : a.getOptions())
@@ -5620,7 +5621,7 @@
{
for (Attribute a : suppressedAttributes.get(t))
{
- if (exportConfig.typesOnly())
+ if (typesOnly)
{
StringBuilder attrName = new StringBuilder(a.getName());
for (String o : a.getOptions())
diff --git a/opends/src/server/org/opends/server/types/FilePermission.java b/opends/src/server/org/opends/server/types/FilePermission.java
index 4af5138..1bf847f 100644
--- a/opends/src/server/org/opends/server/types/FilePermission.java
+++ b/opends/src/server/org/opends/server/types/FilePermission.java
@@ -539,6 +539,17 @@
}
+ // If we're running Java 6, then we'll use the methods that Java
+ // provides. Even though it's potentially less fine-grained on a
+ // UNIX-based system, it is more efficient and doesn't require an
+ // external process.
+ if ((setReadableMethod != null) && (setWritableMethod != null) &&
+ (setExecutableMethod != null))
+ {
+ return setUsingJava(f, p);
+ }
+
+
// If it's a UNIX-based system, then try using the chmod command
// to set the permissions. Otherwise (or if that fails), then try
// to use the Java 6 API.
@@ -550,12 +561,6 @@
// FIXME -- Consider using cacls on Windows.
- if ((setReadableMethod != null) && (setWritableMethod != null) &&
- (setExecutableMethod != null))
- {
- return setUsingJava(f, p);
- }
-
// We have no way to set file permissions on this system.
return false;
diff --git a/opends/src/server/org/opends/server/util/StaticUtils.java b/opends/src/server/org/opends/server/util/StaticUtils.java
index e4db103..2976d40 100644
--- a/opends/src/server/org/opends/server/util/StaticUtils.java
+++ b/opends/src/server/org/opends/server/util/StaticUtils.java
@@ -3262,7 +3262,7 @@
*/
static public String listToString(List<?> list, String separator)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
if (i < list.size() - 1) {
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java
index b82a372..c341d7f 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/core/NetworkGroupTest.java
@@ -121,7 +121,7 @@
/**
* Provides a single DN to search a workflow in a network group.
- *
+ *
* Each set of DNs is composed of:
* - one baseDN
* - one subordinateDN
@@ -273,10 +273,10 @@
//
//===========================================================================
-
+
/**
* Tests the network group registration.
- *
+ *
* @param networkGroupID the ID of the network group to register
* @param workflowBaseDN1 the base DN of the first workflow node to register
* in the network group
@@ -291,7 +291,7 @@
// Create and register the network group with the server.
NetworkGroup networkGroup = new NetworkGroup(networkGroupID);
networkGroup.register();
-
+
// Register again the network group with the server and catch the
// expected DirectoryServer exception.
boolean exceptionRaised = false;
@@ -312,10 +312,10 @@
WorkflowElement nullWE = null;
WorkflowImpl workflow = new WorkflowImpl(
workflowBaseDN.toString(), workflowBaseDN, nullWE);
-
+
// Register the workflow with the network group.
networkGroup.registerWorkflow(workflow);
-
+
// Register again the workflow with the network group and catch the
// expected DirectoryServer exception.
exceptionRaised = false;
@@ -331,7 +331,7 @@
ERR_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS);
}
assertEquals(exceptionRaised, true);
-
+
// Clean the network group
networkGroup.deregisterWorkflow(workflow.getWorkflowId());
networkGroup.deregister();
@@ -450,7 +450,7 @@
doCheckNetworkGroup(networkGroup, dn2, subordinate2, unrelatedDN, true);
doCheckNetworkGroup(networkGroup, dn3, subordinate3, unrelatedDN, true);
}
-
+
if (w2 != null)
{
networkGroup.deregisterWorkflow(w2.getWorkflowId());
@@ -458,7 +458,7 @@
doCheckNetworkGroup(networkGroup, dn2, subordinate2, unrelatedDN, false);
doCheckNetworkGroup(networkGroup, dn3, subordinate3, unrelatedDN, true);
}
-
+
if (w3 != null)
{
networkGroup.deregisterWorkflow(w3.getWorkflowId());
@@ -466,7 +466,7 @@
doCheckNetworkGroup(networkGroup, dn2, subordinate2, unrelatedDN, false);
doCheckNetworkGroup(networkGroup, dn3, subordinate3, unrelatedDN, false);
}
-
+
// Deregister the network group
networkGroup.deregister();
}
@@ -515,7 +515,7 @@
Workflow workflow2 = networkGroup.getWorkflowCandidate(dnSubordinate);
assertEquals(workflow2, workflow);
}
-
+
// Check that the unrelatedDN is not handled by any workflow
if (unrelatedDN != null)
{
@@ -561,8 +561,8 @@
return workflow;
}
-
-
+
+
/**
* Prints a text to System.out.
*/
@@ -570,8 +570,8 @@
{
System.out.print(msg);
}
-
-
+
+
/**
* Prints a text to System.out.
*/
@@ -580,8 +580,8 @@
write(msg + "\n");
}
-
-
+
+
/**
* Dump the network group info to the console.
*/
@@ -591,8 +591,8 @@
if (doDump)
{
- StringBuffer sb = networkGroup.toString(prompt);
- writeln(sb.toString());
+ StringBuilder sb = networkGroup.toString(prompt);
+ writeln(sb.toString());
}
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
index 708c6dc..8cdc869 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java
@@ -741,7 +741,7 @@
assertEquals (readDN1, null);
assertEquals (readDN2, null);
assertEquals (readDN3, null);
-
+
// ======================================================
// Remove a workflow in the chain and check that
// the route algorithm is still working
@@ -764,7 +764,7 @@
assertEquals (readDN1, baseDN1);
assertEquals (readDN2, baseDN1); // was baseDN2 before the removal...
assertEquals (readDN3, baseDN3);
-
+
// sanity check1
// subordinate3 should be handled by w3 only
readDN1 = w3.getParentBaseDN (subordinateDN1);
@@ -773,7 +773,7 @@
assertEquals (readDN1, null);
assertEquals (readDN2, null);
assertEquals (readDN3, baseDN3);
-
+
// sanity check2
// unrelatedDN should be handled by none of the workflows
readDN1 = w1.getParentBaseDN (unrelatedDN);
@@ -782,7 +782,7 @@
assertEquals (readDN1, null);
assertEquals (readDN2, null);
assertEquals (readDN3, null);
-
+
} // createWorkflow_simpleTopology2
@@ -914,7 +914,7 @@
}
// dump the topology
- StringBuffer sb = w1.toString ("");
+ StringBuilder sb = w1.toString ("");
System.out.println (sb);
} // createWorkflow_complexTopology1
@@ -958,11 +958,11 @@
// Create a workflow to handle the baseDN with no workflow element
WorkflowImpl workflow = new WorkflowImpl(
baseDN.toString(), baseDN, nullWE);
-
+
// Register the workflow with the server. Don't catch the
// DirectoryException that could be thrown by the register() method.
workflow.register();
-
+
// Register the same workflow twice and catch the expected
// DirectoryException.
boolean exceptionRaised = false;
--
Gitblit v1.10.0