From f2160f4bd1c8ac67e5a86a6710d431e8932877f9 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 28 May 2010 11:47:51 +0000
Subject: [PATCH] Synchronize SDK on java.net with internal repository.
---
sdk/src/com/sun/opends/sdk/tools/SearchRate.java | 583 +++++++++++++++++++++++++++++----------------------------
1 files changed, 295 insertions(+), 288 deletions(-)
diff --git a/sdk/src/com/sun/opends/sdk/tools/SearchRate.java b/sdk/src/com/sun/opends/sdk/tools/SearchRate.java
index 81b3009..830a88a 100644
--- a/sdk/src/com/sun/opends/sdk/tools/SearchRate.java
+++ b/sdk/src/com/sun/opends/sdk/tools/SearchRate.java
@@ -31,7 +31,7 @@
import static com.sun.opends.sdk.messages.Messages.*;
import static com.sun.opends.sdk.tools.ToolConstants.*;
-import static com.sun.opends.sdk.tools.Utils.*;
+import static com.sun.opends.sdk.tools.Utils.filterExitCode;
import java.io.InputStream;
import java.io.OutputStream;
@@ -49,14 +49,167 @@
-
/**
- * A load generation tool that can be used to load a Directory Server
- * with Search requests using one or more LDAP connections.
+ * A load generation tool that can be used to load a Directory Server with
+ * Search requests using one or more LDAP connections.
*/
public final class SearchRate extends ConsoleApplication
{
- private BooleanArgument verbose;
+ private final class SearchPerformanceRunner extends PerformanceRunner
+ {
+ private final class SearchStatsHandler extends
+ UpdateStatsResultHandler<Result> implements SearchResultHandler
+ {
+ private SearchStatsHandler(final long eTime)
+ {
+ super(eTime);
+ }
+
+
+
+ public boolean handleEntry(final SearchResultEntry entry)
+ {
+ entryRecentCount.getAndIncrement();
+ return true;
+ }
+
+
+
+ public boolean handleReference(final SearchResultReference reference)
+ {
+ return true;
+ }
+ }
+
+
+
+ private final class SearchStatsThread extends StatsThread
+ {
+ private long totalEntryCount;
+
+ private final String[] extraColumn;
+
+
+
+ private SearchStatsThread()
+ {
+ super(new String[] { "Entries/Srch" });
+ extraColumn = new String[1];
+ }
+
+
+
+ @Override
+ String[] getAdditionalColumns()
+ {
+ final int entryCount = entryRecentCount.getAndSet(0);
+ totalEntryCount += entryCount;
+ if (successCount > 0)
+ {
+ extraColumn[0] = String.format("%.1f", (double) entryCount
+ / successCount);
+ }
+ else
+ {
+ extraColumn[0] = String.format("%.1f", 0.0);
+ }
+ return extraColumn;
+ }
+ }
+
+
+
+ private final class SearchWorkerThread extends
+ WorkerThread<SearchStatsHandler>
+ {
+ private SearchRequest sr;
+
+ private Object[] data;
+
+
+
+ private SearchWorkerThread(final AsynchronousConnection connection,
+ final ConnectionFactory connectionFactory)
+ {
+ super(connection, connectionFactory);
+ }
+
+
+
+ @Override
+ public SearchStatsHandler getHandler(final long startTime)
+ {
+ return new SearchStatsHandler(startTime);
+ }
+
+
+
+ @Override
+ public FutureResult<?> performOperation(
+ final AsynchronousConnection connection,
+ final SearchStatsHandler handler, final DataSource[] dataSources)
+ {
+ if (sr == null)
+ {
+ if (dataSources == null)
+ {
+ sr = Requests.newSearchRequest(baseDN, scope, filter, attributes);
+ }
+ else
+ {
+ data = DataSource.generateData(dataSources, data);
+ sr = Requests.newSearchRequest(String.format(baseDN, data), scope,
+ String.format(filter, data), attributes);
+ }
+ sr.setDereferenceAliasesPolicy(dereferencesAliasesPolicy);
+ }
+ else if (dataSources != null)
+ {
+ data = DataSource.generateData(dataSources, data);
+ sr.setFilter(String.format(filter, data));
+ sr.setName(String.format(baseDN, data));
+ }
+ return connection.search(sr, handler, handler);
+ }
+ }
+
+
+
+ private String filter;
+
+ private String baseDN;
+
+ private SearchScope scope;
+
+ private DereferenceAliasesPolicy dereferencesAliasesPolicy;
+
+ private String[] attributes;
+
+
+
+ private SearchPerformanceRunner(final ArgumentParser argParser,
+ final ConsoleApplication app) throws ArgumentException
+ {
+ super(argParser, app);
+ }
+
+
+
+ @Override
+ StatsThread newStatsThread()
+ {
+ return new SearchStatsThread();
+ }
+
+
+
+ @Override
+ WorkerThread<?> newWorkerThread(final AsynchronousConnection connection,
+ final ConnectionFactory connectionFactory)
+ {
+ return new SearchWorkerThread(connection, connectionFactory);
+ }
+ }
@@ -67,25 +220,24 @@
* The command-line arguments provided to this program.
*/
- public static void main(String[] args)
+ public static void main(final String[] args)
{
- int retCode = mainSearchRate(args, System.in, System.out,
- System.err);
+ final int retCode = mainSearchRate(args, System.in, System.out, System.err);
System.exit(filterExitCode(retCode));
}
/**
- * Parses the provided command-line arguments and uses that
- * information to run the ldapsearch tool.
+ * Parses the provided command-line arguments and uses that information to run
+ * the ldapsearch tool.
*
* @param args
* The command-line arguments provided to this program.
* @return The error code.
*/
- static int mainSearchRate(String[] args)
+ static int mainSearchRate(final String[] args)
{
return mainSearchRate(args, System.in, System.out, System.err);
}
@@ -93,25 +245,25 @@
/**
- * Parses the provided command-line arguments and uses that
- * information to run the ldapsearch tool.
+ * Parses the provided command-line arguments and uses that information to run
+ * the ldapsearch tool.
*
* @param args
* The command-line arguments provided to this program.
* @param inStream
- * The input stream to use for standard input, or
- * <CODE>null</CODE> if standard input is not needed.
+ * The input stream to use for standard input, or <CODE>null</CODE>
+ * if standard input is not needed.
* @param outStream
- * The output stream to use for standard output, or
- * <CODE>null</CODE> if standard output is not needed.
+ * The output stream to use for standard output, or <CODE>null</CODE>
+ * if standard output is not needed.
* @param errStream
- * The output stream to use for standard error, or
- * <CODE>null</CODE> if standard error is not needed.
+ * The output stream to use for standard error, or <CODE>null</CODE>
+ * if standard error is not needed.
* @return The error code.
*/
- static int mainSearchRate(String[] args, InputStream inStream,
- OutputStream outStream, OutputStream errStream)
+ static int mainSearchRate(final String[] args, final InputStream inStream,
+ final OutputStream outStream, final OutputStream errStream)
{
return new SearchRate(inStream, outStream, errStream).run(args);
@@ -119,7 +271,14 @@
- private SearchRate(InputStream in, OutputStream out, OutputStream err)
+ private BooleanArgument verbose;
+
+ private final AtomicInteger entryRecentCount = new AtomicInteger();
+
+
+
+ private SearchRate(final InputStream in, final OutputStream out,
+ final OutputStream err)
{
super(in, out, err);
@@ -127,15 +286,98 @@
- private int run(String[] args)
+ /**
+ * Indicates whether or not the user has requested advanced mode.
+ *
+ * @return Returns <code>true</code> if the user has requested advanced mode.
+ */
+ @Override
+ public boolean isAdvancedMode()
+ {
+ return false;
+ }
+
+
+
+ /**
+ * Indicates whether or not the user has requested interactive behavior.
+ *
+ * @return Returns <code>true</code> if the user has requested interactive
+ * behavior.
+ */
+ @Override
+ public boolean isInteractive()
+ {
+ return false;
+ }
+
+
+
+ /**
+ * Indicates whether or not this console application is running in its
+ * menu-driven mode. This can be used to dictate whether output should go to
+ * the error stream or not. In addition, it may also dictate whether or not
+ * sub-menus should display a cancel option as well as a quit option.
+ *
+ * @return Returns <code>true</code> if this console application is running in
+ * its menu-driven mode.
+ */
+ @Override
+ public boolean isMenuDrivenMode()
+ {
+ return false;
+ }
+
+
+
+ /**
+ * Indicates whether or not the user has requested quiet output.
+ *
+ * @return Returns <code>true</code> if the user has requested quiet output.
+ */
+ @Override
+ public boolean isQuiet()
+ {
+ return false;
+ }
+
+
+
+ /**
+ * Indicates whether or not the user has requested script-friendly output.
+ *
+ * @return Returns <code>true</code> if the user has requested script-friendly
+ * output.
+ */
+ @Override
+ public boolean isScriptFriendly()
+ {
+ return false;
+ }
+
+
+
+ /**
+ * Indicates whether or not the user has requested verbose output.
+ *
+ * @return Returns <code>true</code> if the user has requested verbose output.
+ */
+ @Override
+ public boolean isVerbose()
+ {
+ return verbose.isPresent();
+ }
+
+
+
+ private int run(final String[] args)
{
// Create the command-line argument parser for use with this
// program.
- LocalizableMessage toolDescription = LocalizableMessage
- .raw("This utility can be used to "
- + "measure search performance");
+ final LocalizableMessage toolDescription = LocalizableMessage
+ .raw("This utility can be used to " + "measure search performance");
// TODO: correct usage
- ArgumentParser argParser = new ArgumentParser(SearchRate.class
+ final ArgumentParser argParser = new ArgumentParser(SearchRate.class
.getName(), toolDescription, false, true, 1, 0,
"[filter] [attributes ...]");
@@ -151,12 +393,11 @@
try
{
- connectionFactory = new ArgumentParserConnectionFactory(
- argParser, this);
+ connectionFactory = new ArgumentParserConnectionFactory(argParser, this);
runner = new SearchPerformanceRunner(argParser, this);
- propertiesFileArgument = new StringArgument("propertiesFilePath",
- null, OPTION_LONG_PROP_FILE_PATH, false, false, true,
+ propertiesFileArgument = new StringArgument("propertiesFilePath", null,
+ OPTION_LONG_PROP_FILE_PATH, false, false, true,
INFO_PROP_FILE_PATH_PLACEHOLDER.get(), null, null,
INFO_DESCRIPTION_PROP_FILE_PATH.get());
argParser.addArgument(propertiesFileArgument);
@@ -174,25 +415,24 @@
argParser.setUsageArgument(showUsage, getOutputStream());
baseDN = new StringArgument("baseDN", OPTION_SHORT_BASEDN,
- OPTION_LONG_BASEDN, true, false, true,
- INFO_BASEDN_PLACEHOLDER.get(), null, null,
- INFO_SEARCH_DESCRIPTION_BASEDN.get());
+ OPTION_LONG_BASEDN, true, false, true, INFO_BASEDN_PLACEHOLDER.get(),
+ null, null, INFO_SEARCH_DESCRIPTION_BASEDN.get());
baseDN.setPropertyName(OPTION_LONG_BASEDN);
argParser.addArgument(baseDN);
- searchScope = new MultiChoiceArgument<SearchScope>("searchScope",
- 's', "searchScope", false, true,
- INFO_SEARCH_SCOPE_PLACEHOLDER.get(), SearchScope.values(),
- false, INFO_SEARCH_DESCRIPTION_SEARCH_SCOPE.get());
+ searchScope = new MultiChoiceArgument<SearchScope>("searchScope", 's',
+ "searchScope", false, true, INFO_SEARCH_SCOPE_PLACEHOLDER.get(),
+ SearchScope.values(), false, INFO_SEARCH_DESCRIPTION_SEARCH_SCOPE
+ .get());
searchScope.setPropertyName("searchScope");
searchScope.setDefaultValue(SearchScope.WHOLE_SUBTREE);
argParser.addArgument(searchScope);
dereferencePolicy = new MultiChoiceArgument<DereferenceAliasesPolicy>(
"derefpolicy", 'a', "dereferencePolicy", false, true,
- INFO_DEREFERENCE_POLICE_PLACEHOLDER.get(),
- DereferenceAliasesPolicy.values(), false,
- INFO_SEARCH_DESCRIPTION_DEREFERENCE_POLICY.get());
+ INFO_DEREFERENCE_POLICE_PLACEHOLDER.get(), DereferenceAliasesPolicy
+ .values(), false, INFO_SEARCH_DESCRIPTION_DEREFERENCE_POLICY
+ .get());
dereferencePolicy.setPropertyName("dereferencePolicy");
dereferencePolicy.setDefaultValue(DereferenceAliasesPolicy.NEVER);
argParser.addArgument(dereferencePolicy);
@@ -202,9 +442,10 @@
verbose.setPropertyName("verbose");
argParser.addArgument(verbose);
}
- catch (ArgumentException ae)
+ catch (final ArgumentException ae)
{
- LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+ final LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae
+ .getMessage());
println(message);
return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
}
@@ -216,9 +457,10 @@
connectionFactory.validate();
runner.validate();
}
- catch (ArgumentException ae)
+ catch (final ArgumentException ae)
{
- LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+ final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
+ .getMessage());
println(message);
println(argParser.getUsageMessage());
return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
@@ -231,8 +473,8 @@
return 0;
}
- List<String> attributes = new LinkedList<String>();
- ArrayList<String> filterAndAttributeStrings = argParser
+ final List<String> attributes = new LinkedList<String>();
+ final ArrayList<String> filterAndAttributeStrings = argParser
.getTrailingArguments();
if (filterAndAttributeStrings.size() > 0)
{
@@ -241,21 +483,19 @@
// considered the filter, the other as attributes.
runner.filter = filterAndAttributeStrings.remove(0);
// The rest are attributes
- for (String s : filterAndAttributeStrings)
+ for (final String s : filterAndAttributeStrings)
{
attributes.add(s);
}
}
- runner.attributes = attributes
- .toArray(new String[attributes.size()]);
+ runner.attributes = attributes.toArray(new String[attributes.size()]);
runner.baseDN = baseDN.getValue();
try
{
runner.scope = searchScope.getTypedValue();
- runner.dereferencesAliasesPolicy = dereferencePolicy
- .getTypedValue();
+ runner.dereferencesAliasesPolicy = dereferencePolicy.getTypedValue();
}
- catch (ArgumentException ex1)
+ catch (final ArgumentException ex1)
{
println(ex1.getMessageObject());
return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
@@ -265,12 +505,12 @@
{
// Try it out to make sure the format string and data sources
// match.
- Object[] data = DataSource.generateData(runner.getDataSources(),
+ final Object[] data = DataSource.generateData(runner.getDataSources(),
null);
String.format(runner.filter, data);
String.format(runner.baseDN, data);
}
- catch (Exception ex1)
+ catch (final Exception ex1)
{
println(LocalizableMessage.raw("Error formatting filter or base DN: "
+ ex1.toString()));
@@ -279,237 +519,4 @@
return runner.run(connectionFactory);
}
-
-
-
- private final AtomicInteger entryRecentCount = new AtomicInteger();
-
-
-
- private class SearchPerformanceRunner extends PerformanceRunner
- {
- private String filter;
-
- private String baseDN;
-
- private SearchScope scope;
-
- private DereferenceAliasesPolicy dereferencesAliasesPolicy;
-
- private String[] attributes;
-
-
-
- private SearchPerformanceRunner(ArgumentParser argParser,
- ConsoleApplication app) throws ArgumentException
- {
- super(argParser, app);
- }
-
-
-
- WorkerThread<?> newWorkerThread(AsynchronousConnection connection,
- ConnectionFactory connectionFactory)
- {
- return new SearchWorkerThread(connection, connectionFactory);
- }
-
-
-
- StatsThread newStatsThread()
- {
- return new SearchStatsThread();
- }
-
-
-
- private class SearchStatsHandler extends
- UpdateStatsResultHandler<Result> implements SearchResultHandler
- {
- private SearchStatsHandler(long eTime)
- {
- super(eTime);
- }
-
-
-
- public void handleEntry(SearchResultEntry entry)
- {
- entryRecentCount.getAndIncrement();
- }
-
-
-
- public void handleReference(SearchResultReference reference)
- {
- }
- }
-
-
-
- private class SearchWorkerThread extends
- WorkerThread<SearchStatsHandler>
- {
- private SearchRequest sr;
-
- private Object[] data;
-
-
-
- private SearchWorkerThread(AsynchronousConnection connection,
- ConnectionFactory connectionFactory)
- {
- super(connection, connectionFactory);
- }
-
-
-
- public SearchStatsHandler getHandler(long startTime)
- {
- return new SearchStatsHandler(startTime);
- }
-
-
-
- public FutureResult<?> performOperation(
- AsynchronousConnection connection,
- SearchStatsHandler handler, DataSource[] dataSources)
- {
- if (sr == null)
- {
- if (dataSources == null)
- {
- sr = Requests.newSearchRequest(baseDN, scope, filter,
- attributes);
- }
- else
- {
- data = DataSource.generateData(dataSources, data);
- sr = Requests.newSearchRequest(String.format(baseDN, data),
- scope, String.format(filter, data), attributes);
- }
- sr.setDereferenceAliasesPolicy(dereferencesAliasesPolicy);
- }
- else if (dataSources != null)
- {
- data = DataSource.generateData(dataSources, data);
- sr.setFilter(String.format(filter, data));
- sr.setName(String.format(baseDN, data));
- }
- return connection.search(sr, handler, handler);
- }
- }
-
-
-
- private class SearchStatsThread extends StatsThread
- {
- private long totalEntryCount;
-
- private final String[] extraColumn;
-
-
-
- private SearchStatsThread()
- {
- super(new String[] { "Entries/Srch" });
- extraColumn = new String[1];
- }
-
-
-
- String[] getAdditionalColumns()
- {
- int entryCount = entryRecentCount.getAndSet(0);
- totalEntryCount += entryCount;
- extraColumn[0] = String.format("%.1f", (double) entryCount
- / successCount);
- return extraColumn;
- }
- }
- }
-
-
-
- /**
- * Indicates whether or not the user has requested advanced mode.
- *
- * @return Returns <code>true</code> if the user has requested
- * advanced mode.
- */
- public boolean isAdvancedMode()
- {
- return false;
- }
-
-
-
- /**
- * Indicates whether or not the user has requested interactive
- * behavior.
- *
- * @return Returns <code>true</code> if the user has requested
- * interactive behavior.
- */
- public boolean isInteractive()
- {
- return false;
- }
-
-
-
- /**
- * Indicates whether or not this console application is running in its
- * menu-driven mode. This can be used to dictate whether output should
- * go to the error stream or not. In addition, it may also dictate
- * whether or not sub-menus should display a cancel option as well as
- * a quit option.
- *
- * @return Returns <code>true</code> if this console application is
- * running in its menu-driven mode.
- */
- public boolean isMenuDrivenMode()
- {
- return false;
- }
-
-
-
- /**
- * Indicates whether or not the user has requested quiet output.
- *
- * @return Returns <code>true</code> if the user has requested quiet
- * output.
- */
- public boolean isQuiet()
- {
- return false;
- }
-
-
-
- /**
- * Indicates whether or not the user has requested script-friendly
- * output.
- *
- * @return Returns <code>true</code> if the user has requested
- * script-friendly output.
- */
- public boolean isScriptFriendly()
- {
- return false;
- }
-
-
-
- /**
- * Indicates whether or not the user has requested verbose output.
- *
- * @return Returns <code>true</code> if the user has requested verbose
- * output.
- */
- public boolean isVerbose()
- {
- return verbose.isPresent();
- }
}
--
Gitblit v1.10.0