From 6b3ef14a652f6be0d559365d2fd2c78a61524fec Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 17 Sep 2010 22:06:25 +0000
Subject: [PATCH] Minimize Historical Data (dsreplication/client side). The purge historical can be executed on the local server even when it is stopped. This is matches the functionality provided by utilities such import-ldif, backup, etc.
---
opends/src/server/org/opends/server/tools/tasks/TaskTool.java | 262 +++++++++------------------------------------------
1 files changed, 49 insertions(+), 213 deletions(-)
diff --git a/opends/src/server/org/opends/server/tools/tasks/TaskTool.java b/opends/src/server/org/opends/server/tools/tasks/TaskTool.java
index 929dd84..7c3e5af 100644
--- a/opends/src/server/org/opends/server/tools/tasks/TaskTool.java
+++ b/opends/src/server/org/opends/server/tools/tasks/TaskTool.java
@@ -27,6 +27,7 @@
package org.opends.server.tools.tasks;
+import org.opends.server.util.args.Argument;
import org.opends.server.util.args.BooleanArgument;
import org.opends.server.util.args.LDAPConnectionArgumentParser;
import org.opends.server.util.args.ArgumentException;
@@ -37,7 +38,6 @@
import static org.opends.server.util.StaticUtils.wrapText;
import static org.opends.server.util.StaticUtils.getExceptionMessage;
import static org.opends.server.util.ServerConstants.MAX_LINE_WIDTH;
-import org.opends.server.util.StaticUtils;
import org.opends.server.protocols.asn1.ASN1Exception;
import org.opends.server.tools.LDAPConnection;
import org.opends.server.tools.LDAPConnectionException;
@@ -46,6 +46,7 @@
import org.opends.server.types.LDAPException;
import org.opends.server.types.OpenDsException;
import org.opends.server.core.DirectoryServer;
+import org.opends.server.admin.client.cli.TaskScheduleArgs;
import org.opends.server.backends.task.TaskState;
import org.opends.server.backends.task.FailedDependencyAction;
import org.opends.messages.Message;
@@ -53,14 +54,10 @@
import static org.opends.messages.TaskMessages.*;
import java.io.PrintStream;
-import java.text.ParseException;
import java.util.Date;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
-import java.util.LinkedList;
-import java.util.EnumSet;
-import java.util.Collections;
import java.io.IOException;
/**
@@ -75,9 +72,17 @@
* this operation to run immediately as a task as opposed to running
* the operation in the local VM.
*/
- public static final String NOW = "0";
+ public static final String NOW = TaskScheduleArgs.NOW;
+ /**
+ * The error code used by the mixed-script to know if the java
+ * arguments for the off-line mode must be used.
+ */
private static final int RUN_OFFLINE = 51;
+ /**
+ * The error code used by the mixed-script to know if the java
+ * arguments for the on-line mode must be used.
+ */
private static final int RUN_ONLINE = 52;
// Number of milliseconds this utility will wait before reloading
@@ -86,25 +91,9 @@
private LDAPConnectionArgumentParser argParser;
- // Argument for describing the task's start time
- private StringArgument startArg;
+ private TaskScheduleArgs taskScheduleArgs;
- // Argument to indicate a recurring task
- private StringArgument recurringArg;
-
- // Argument for specifying completion notifications
- private StringArgument completionNotificationArg;
-
- // Argument for specifying error notifications
- private StringArgument errorNotificationArg;
-
- // Argument for specifying dependency
- private StringArgument dependencyArg;
-
- // Argument for specifying a failed dependency action
- private StringArgument failedDependencyActionArg;
-
- // Argument used to know whether we must test if we must run in offline
+ // Argument used to know whether we must test if we must run in off-line
// mode.
private BooleanArgument testIfOfflineArg;
@@ -160,66 +149,17 @@
argParser.addArgument(noPropertiesFileArgument);
argParser.setNoPropertiesFileArgument(noPropertiesFileArgument);
- startArg = new StringArgument(
- OPTION_LONG_START_DATETIME,
- OPTION_SHORT_START_DATETIME,
- OPTION_LONG_START_DATETIME, false, false,
- true, INFO_START_DATETIME_PLACEHOLDER.get(),
- null, null,
- INFO_DESCRIPTION_START_DATETIME.get());
- argParser.addArgument(startArg, taskGroup);
+ taskScheduleArgs = new TaskScheduleArgs();
- recurringArg = new StringArgument(
- OPTION_LONG_RECURRING_TASK,
- OPTION_SHORT_RECURRING_TASK,
- OPTION_LONG_RECURRING_TASK, false, false,
- true, INFO_RECURRING_TASK_PLACEHOLDER.get(),
- null, null,
- INFO_DESCRIPTION_RECURRING_TASK.get());
- argParser.addArgument(recurringArg, taskGroup);
+ for (Argument arg : taskScheduleArgs.getArguments())
+ {
+ argParser.addArgument(arg, taskGroup);
+ }
- completionNotificationArg = new StringArgument(
- OPTION_LONG_COMPLETION_NOTIFICATION_EMAIL,
- OPTION_SHORT_COMPLETION_NOTIFICATION_EMAIL,
- OPTION_LONG_COMPLETION_NOTIFICATION_EMAIL,
- false, true, true, INFO_EMAIL_ADDRESS_PLACEHOLDER.get(),
- null, null, INFO_DESCRIPTION_TASK_COMPLETION_NOTIFICATION.get());
- argParser.addArgument(completionNotificationArg, taskGroup);
-
- errorNotificationArg = new StringArgument(
- OPTION_LONG_ERROR_NOTIFICATION_EMAIL,
- OPTION_SHORT_ERROR_NOTIFICATION_EMAIL,
- OPTION_LONG_ERROR_NOTIFICATION_EMAIL,
- false, true, true, INFO_EMAIL_ADDRESS_PLACEHOLDER.get(),
- null, null, INFO_DESCRIPTION_TASK_ERROR_NOTIFICATION.get());
- argParser.addArgument(errorNotificationArg, taskGroup);
-
- dependencyArg = new StringArgument(
- OPTION_LONG_DEPENDENCY,
- OPTION_SHORT_DEPENDENCY,
- OPTION_LONG_DEPENDENCY,
- false, true, true, INFO_TASK_ID_PLACEHOLDER.get(),
- null, null, INFO_DESCRIPTION_TASK_DEPENDENCY_ID.get());
- argParser.addArgument(dependencyArg, taskGroup);
-
- Set<FailedDependencyAction> fdaValSet =
- EnumSet.allOf(FailedDependencyAction.class);
- failedDependencyActionArg = new StringArgument(
- OPTION_LONG_FAILED_DEPENDENCY_ACTION,
- OPTION_SHORT_FAILED_DEPENDENCY_ACTION,
- OPTION_LONG_FAILED_DEPENDENCY_ACTION,
- false, true, true, INFO_ACTION_PLACEHOLDER.get(),
- null, null, INFO_DESCRIPTION_TASK_FAILED_DEPENDENCY_ACTION.get(
- StaticUtils.collectionToString(fdaValSet, ","),
- FailedDependencyAction.defaultValue().name()));
- argParser.addArgument(failedDependencyActionArg, taskGroup);
-
- testIfOfflineArg = new BooleanArgument(
- "testIfOffline", null, "testIfOffline",
- INFO_DESCRIPTION_TEST_IF_OFFLINE.get());
+ testIfOfflineArg = new BooleanArgument("testIfOffline", null,
+ "testIfOffline", INFO_DESCRIPTION_TEST_IF_OFFLINE.get());
testIfOfflineArg.setHidden(true);
argParser.addArgument(testIfOfflineArg);
-
} catch (ArgumentException e) {
// should never happen
}
@@ -238,81 +178,13 @@
*/
protected void validateTaskArgs() throws ArgumentException, CLIException
{
- if ((startArg.isPresent() || recurringArg.isPresent()) &&
- !processAsTask())
+ if (processAsTask())
{
- throw new ArgumentException(
- ERR_TASK_TOOL_NO_VALID_LDAP_OPTIONS.get());
+ taskScheduleArgs.validateArgs();
}
-
- if (startArg.isPresent() && !NOW.equals(startArg.getValue())) {
- try {
- Date date = StaticUtils.parseDateTimeString(startArg.getValue());
- // Check that the provided date is not previous to the current date.
- Date currentDate = new Date(System.currentTimeMillis());
- if (currentDate.after(date))
- {
- throw new CLIException(ERR_START_DATETIME_ALREADY_PASSED.get(
- startArg.getValue()));
- }
- } catch (ParseException pe) {
- throw new ArgumentException(ERR_START_DATETIME_FORMAT.get());
- }
- }
-
- if (!processAsTask() && completionNotificationArg.isPresent()) {
- throw new ArgumentException(ERR_TASKTOOL_OPTIONS_FOR_TASK_ONLY.get(
- completionNotificationArg.getLongIdentifier()));
- }
-
- if (!processAsTask() && errorNotificationArg.isPresent()) {
- throw new ArgumentException(ERR_TASKTOOL_OPTIONS_FOR_TASK_ONLY.get(
- errorNotificationArg.getLongIdentifier()));
- }
-
- if (!processAsTask() && dependencyArg.isPresent()) {
- throw new ArgumentException(ERR_TASKTOOL_OPTIONS_FOR_TASK_ONLY.get(
- dependencyArg.getLongIdentifier()));
- }
-
- if (!processAsTask() && failedDependencyActionArg.isPresent()) {
- throw new ArgumentException(ERR_TASKTOOL_OPTIONS_FOR_TASK_ONLY.get(
- failedDependencyActionArg.getLongIdentifier()));
- }
-
- if (completionNotificationArg.isPresent()) {
- LinkedList<String> addrs = completionNotificationArg.getValues();
- for (String addr : addrs) {
- if (!StaticUtils.isEmailAddress(addr)) {
- throw new ArgumentException(ERR_TASKTOOL_INVALID_EMAIL_ADDRESS.get(
- addr, completionNotificationArg.getLongIdentifier()));
- }
- }
- }
-
- if (errorNotificationArg.isPresent()) {
- LinkedList<String> addrs = errorNotificationArg.getValues();
- for (String addr : addrs) {
- if (!StaticUtils.isEmailAddress(addr)) {
- throw new ArgumentException(ERR_TASKTOOL_INVALID_EMAIL_ADDRESS.get(
- addr, errorNotificationArg.getLongIdentifier()));
- }
- }
- }
-
- if (failedDependencyActionArg.isPresent()) {
-
- if (!dependencyArg.isPresent()) {
- throw new ArgumentException(ERR_TASKTOOL_FDA_WITH_NO_DEPENDENCY.get());
- }
-
- String fda = failedDependencyActionArg.getValue();
- if (null == FailedDependencyAction.fromString(fda)) {
- Set<FailedDependencyAction> fdaValSet =
- EnumSet.allOf(FailedDependencyAction.class);
- throw new ArgumentException(ERR_TASKTOOL_INVALID_FDA.get(fda,
- StaticUtils.collectionToString(fdaValSet, ",")));
- }
+ else
+ {
+ taskScheduleArgs.validateArgsIfOffline();
}
}
@@ -320,79 +192,42 @@
* {@inheritDoc}
*/
public Date getStartDateTime() {
- Date start = null;
-
- // If the start time arg is present parse its value
- if (startArg != null && startArg.isPresent()) {
- if (NOW.equals(startArg.getValue())) {
- start = new Date();
- } else {
- try {
- start = StaticUtils.parseDateTimeString(startArg.getValue());
- } catch (ParseException pe) {
- // ignore; validated in validateTaskArgs()
- }
- }
- }
- return start;
+ return taskScheduleArgs.getStartDateTime();
}
/**
* {@inheritDoc}
*/
public String getRecurringDateTime() {
- String pattern = null;
-
- // If the recurring task arg is present parse its value
- if (recurringArg != null && recurringArg.isPresent()) {
- pattern = recurringArg.getValue();
- }
- return pattern;
+ return taskScheduleArgs.getRecurringDateTime();
}
/**
* {@inheritDoc}
*/
public List<String> getDependencyIds() {
- if (dependencyArg.isPresent()) {
- return dependencyArg.getValues();
- } else {
- return Collections.emptyList();
- }
+ return taskScheduleArgs.getDependencyIds();
}
/**
* {@inheritDoc}
*/
public FailedDependencyAction getFailedDependencyAction() {
- FailedDependencyAction fda = null;
- if (failedDependencyActionArg.isPresent()) {
- String fdaString = failedDependencyActionArg.getValue();
- fda = FailedDependencyAction.fromString(fdaString);
- }
- return fda;
+ return taskScheduleArgs.getFailedDependencyAction();
}
/**
* {@inheritDoc}
*/
public List<String> getNotifyUponCompletionEmailAddresses() {
- if (completionNotificationArg.isPresent()) {
- return completionNotificationArg.getValues();
- } else {
- return Collections.emptyList();
- }
+ return taskScheduleArgs.getNotifyUponCompletionEmailAddresses();
}
/**
* {@inheritDoc}
*/
public List<String> getNotifyUponErrorEmailAddresses() {
- if (errorNotificationArg.isPresent()) {
- return errorNotificationArg.getValues();
- } else {
- return Collections.emptyList();
- }
+ return taskScheduleArgs.getNotifyUponErrorEmailAddresses();
}
/**
@@ -467,7 +302,7 @@
taskEntry.getScheduledStartTime()),
MAX_LINE_WIDTH));
}
- if (!startArg.isPresent()) {
+ if (!taskScheduleArgs.startArg.isPresent()) {
// Poll the task printing log messages until finished
String taskId = taskEntry.getId();
@@ -562,22 +397,6 @@
}
/**
- * Indicates whether we must return if the command must be run in offline
- * mode.
- * @return <CODE>true</CODE> if we must return if the command must be run in
- * offline mode and <CODE>false</CODE> otherwise.
- */
- private boolean testIfOffline()
- {
- boolean returnValue = false;
- if (testIfOfflineArg != null)
- {
- returnValue = testIfOfflineArg.isPresent();
- }
- return returnValue;
- }
-
- /**
* Returns {@code true} if the provided exception was caused by trying to
* connect to the wrong port and {@code false} otherwise.
* @param t the exception to be analyzed.
@@ -603,4 +422,21 @@
}
return isWrongPortException;
}
+
+
+ /**
+ * Indicates whether we must return if the command must be run in off-line
+ * mode.
+ * @return <CODE>true</CODE> if we must return if the command must be run in
+ * off-line mode and <CODE>false</CODE> otherwise.
+ */
+ public boolean testIfOffline()
+ {
+ boolean returnValue = false;
+ if (testIfOfflineArg != null)
+ {
+ returnValue = testIfOfflineArg.isPresent();
+ }
+ return returnValue;
+ }
}
--
Gitblit v1.10.0