From c22f0fcf3eb1eb76298874d6143b1acc42ee208c Mon Sep 17 00:00:00 2001
From: jcambon <jcambon@localhost>
Date: Thu, 09 Apr 2009 10:08:41 +0000
Subject: [PATCH] Fix for issue #3814 : start-ds script return before server has started
---
opends/src/server/org/opends/server/core/DirectoryServer.java | 16 ++++++++
opends/src/server/org/opends/server/tools/WaitForFileDelete.java | 19 +++++++++
opends/src/messages/messages/core.properties | 13 +++++-
opends/resource/bin/start-ds | 8 ++--
opends/resource/bin/start-ds.bat | 10 ++--
5 files changed, 53 insertions(+), 13 deletions(-)
diff --git a/opends/resource/bin/start-ds b/opends/resource/bin/start-ds
index 3ca2128..5f1ea84 100755
--- a/opends/resource/bin/start-ds
+++ b/opends/resource/bin/start-ds
@@ -23,7 +23,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006-2008 Sun Microsystems, Inc.
+# Copyright 2006-2009 Sun Microsystems, Inc.
# Capture the current working directory so that we can change to it later.
@@ -109,10 +109,10 @@
if test ${EC} -eq 99
then
"${OPENDS_JAVA_BIN}" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete \
- --targetFile "${STARTING_FILE}" --logFile "${LOG_FILE}"
+ --targetFile "${STARTING_FILE}" --logFile "${LOG_FILE}" "${@}"
else
"${OPENDS_JAVA_BIN}" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete \
- --targetFile "${STARTING_FILE}"
+ --targetFile "${STARTING_FILE}" "${@}"
fi
EC=${?}
if test ${EC} -eq 0
@@ -130,7 +130,7 @@
exit 1
fi
fi
- exit ${?}
+ exit ${EC}
else
if test ${EC} -eq 100
then
diff --git a/opends/resource/bin/start-ds.bat b/opends/resource/bin/start-ds.bat
index b66ea50..040e760 100644
--- a/opends/resource/bin/start-ds.bat
+++ b/opends/resource/bin/start-ds.bat
@@ -23,7 +23,7 @@
rem CDDL HEADER END
rem
rem
-rem Copyright 2006-2008 Sun Microsystems, Inc.
+rem Copyright 2006-2009 Sun Microsystems, Inc.
setlocal
for %%i in (%~sf0) do set DIR_HOME=%%~dPsi..
@@ -101,7 +101,7 @@
if exist "%INSTANCE_ROOT%\lib\set-java-args.bat" DO call "%INSTANCE_ROOT%\lib\set-java-args.bat"
"%INSTALL_ROOT%\lib\winlauncher.exe" start "%INSTANCE_ROOT%" "%OPENDS_JAVA_BIN%" %OPENDS_JAVA_ARGS% %SCRIPT_NAME_ARG% org.opends.server.core.DirectoryServer --configClass org.opends.server.extensions.ConfigFileHandler --configFile "%INSTANCE_ROOT%\config\config.ldif" %*
echo %SCRIPT%: Waiting for "%INSTANCE_ROOT%\logs\server.out" to be deleted >> %LOG%
-"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.starting" --logFile "%INSTANCE_ROOT%\logs\server.out"
+"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.starting" --logFile "%INSTANCE_ROOT%\logs\server.out" %*
goto checkStarted
:runDetachQuiet
@@ -111,7 +111,7 @@
if exist "%INSTANCE_ROOT%\lib\set-java-args.bat" DO call "%INSTANCE_ROOT%\lib\set-java-args.bat"
"%INSTALL_ROOT%\lib\winlauncher.exe" start "%INSTANCE_ROOT%" "%OPENDS_JAVA_BIN%" %OPENDS_JAVA_ARGS% %SCRIPT_NAME_ARG% org.opends.server.core.DirectoryServer --configClass org.opends.server.extensions.ConfigFileHandler --configFile "%INSTANCE_ROOT%\config\config.ldif" %*
echo %SCRIPT%: Waiting for "%INSTANCE_ROOT%\logs\server.out" to be deleted >> %LOG%
-"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.starting" --logFile "%INSTANCE_ROOT%\logs\server.out" >> %LOG%
+"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.starting" --logFile "%INSTANCE_ROOT%\logs\server.out" %* >> %LOG%
goto checkStarted
:runDetachCalledByWinService
@@ -124,7 +124,7 @@
if exist "%INSTANCE_ROOT%\lib\set-java-args.bat" DO call "%INSTANCE_ROOT%\lib\set-java-args.bat"
"%INSTALL_ROOT%\lib\winlauncher.exe" start "%INSTANCE_ROOT%" "%OPENDS_JAVA_BIN%" -Xrs %OPENDS_JAVA_ARGS% %SCRIPT_NAME_ARG% org.opends.server.core.DirectoryServer --configClass org.opends.server.extensions.ConfigFileHandler --configFile "%INSTANCE_ROOT%\config\config.ldif" %*
echo %SCRIPT%: Waiting for "%INSTANCE_ROOT%\logs\server.out" to be deleted >> %LOG%
-"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.starting" --logFile "%INSTANCE_ROOT%\logs\server.out" --outputFile "%INSTANCE_ROOT%\logs\winservice.out"
+"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.starting" --logFile "%INSTANCE_ROOT%\logs\server.out" --outputFile "%INSTANCE_ROOT%\logs\winservice.out" %*
erase "%INSTANCE_ROOT%\logs\server.startingservice"
goto checkStarted
@@ -132,7 +132,7 @@
echo %SCRIPT%: Run as service >> %LOG%
"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.StartWindowsService
echo %SCRIPT%: Waiting for "%INSTANCE_ROOT%\logs\server.startingservice" to be deleted >> %LOG%
-"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.startingservice"
+"%OPENDS_JAVA_BIN%" -Xms8M -Xmx8M org.opends.server.tools.WaitForFileDelete --targetFile "%INSTANCE_ROOT%\logs\server.startingservice" %*
rem Type the contents the winwervice.out file and delete it.
if exist "%INSTANCE_ROOT%\logs\winservice.out" type "%INSTANCE_ROOT%\logs\winservice.out"
if exist "%INSTANCE_ROOT%\logs\winservice.out" erase "%INSTANCE_ROOT%\logs\winservice.out"
diff --git a/opends/src/messages/messages/core.properties b/opends/src/messages/messages/core.properties
index 390e72a..27ce32c 100644
--- a/opends/src/messages/messages/core.properties
+++ b/opends/src/messages/messages/core.properties
@@ -20,7 +20,7 @@
#
# CDDL HEADER END
#
-# Copyright 2006-2008 Sun Microsystems, Inc.
+# Copyright 2006-2009 Sun Microsystems, Inc.
@@ -1428,7 +1428,8 @@
SEVERE_ERR_MODIFY_NO_MODIFICATIONS_566=Entry %s cannot be updated because the \
request did not contain any modifications
INFO_DSCORE_DESCRIPTION_NODETACH_567=Do not detach from the terminal and \
- continue running in the foreground
+ continue running in the foreground. This option cannot be used with the \
+-t, --timeout option.
MILD_ERR_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE_568=Unable to increment the value \
of attribute %s because that attribute does not exist in the entry
INFO_DSCORE_TOOL_DESCRIPTION_569=This utility can be used to start the \
@@ -1821,4 +1822,10 @@
SEVERE_ERR_CRYPTOMGR_FAILED_INSTANCE_CERTIFICATE_NULL_721=The CryptoManager \
entry "%s" (the instance-key-pair public-key-certificate) does not contain \
a public-key certificate
-
+INFO_DSCORE_DESCRIPTION_TIMEOUT_722=Maximum time (in seconds) to wait before \
+the command returns (the server continues the startup process, regardless). \
+A value of '0' indicates an infinite timeout, which means that the command \
+returns only when the server startup is completed. The default value is \
+60 seconds. This option cannot be used with the -N, --nodetach option.
+FATAL_ERR_DSCORE_ERROR_NODETACH_TIMEOUT_723=In no-detach mode, the 'timeout' option \
+cannot be used.
diff --git a/opends/src/server/org/opends/server/core/DirectoryServer.java b/opends/src/server/org/opends/server/core/DirectoryServer.java
index efa1d16..f07e184 100644
--- a/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -227,6 +227,7 @@
import org.opends.server.util.args.ArgumentException;
import org.opends.server.util.args.ArgumentParser;
import org.opends.server.util.args.BooleanArgument;
+import org.opends.server.util.args.IntegerArgument;
import org.opends.server.util.args.StringArgument;
import org.opends.server.workflowelement.WorkflowElement;
import org.opends.server.workflowelement.WorkflowElementConfigManager;
@@ -9127,6 +9128,7 @@
// Define the arguments that may be provided to the server.
BooleanArgument checkStartability = null;
BooleanArgument quietMode = null;
+ IntegerArgument timeout = null;
BooleanArgument windowsNetStart = null;
BooleanArgument displayUsage = null;
BooleanArgument fullVersion = null;
@@ -9210,6 +9212,14 @@
argParser.addArgument(quietMode);
+ // Not used in this class, but required by the start-ds script
+ // (see issue #3814)
+ timeout = new IntegerArgument("timeout", 't', "timeout", true, false,
+ true, INFO_SECONDS_PLACEHOLDER.get(), 60,
+ null, true, 0, false,
+ 0, INFO_DSCORE_DESCRIPTION_TIMEOUT.get());
+ argParser.addArgument(timeout);
+
displayUsage = new BooleanArgument("help", 'H', "help",
INFO_DSCORE_DESCRIPTION_USAGE.get());
argParser.addArgument(displayUsage);
@@ -9303,6 +9313,12 @@
RuntimeInformation.printInfo();
return;
}
+ else if (noDetach.isPresent() && timeout.isPresent()) {
+ Message message = ERR_DSCORE_ERROR_NODETACH_TIMEOUT.get();
+ System.err.println(message);
+ System.err.println(argParser.getUsage());
+ System.exit(1);
+ }
// At this point, we know that we're going to try to start the server.
diff --git a/opends/src/server/org/opends/server/tools/WaitForFileDelete.java b/opends/src/server/org/opends/server/tools/WaitForFileDelete.java
index 41d0f8f..85bfda7 100644
--- a/opends/src/server/org/opends/server/tools/WaitForFileDelete.java
+++ b/opends/src/server/org/opends/server/tools/WaitForFileDelete.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Copyright 2006-2009 Sun Microsystems, Inc.
*/
package org.opends.server.tools;
import org.opends.messages.Message;
@@ -39,6 +39,7 @@
import org.opends.server.util.args.StringArgument;
import static org.opends.messages.ToolMessages.*;
+import static org.opends.messages.CoreMessages.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
@@ -125,6 +126,8 @@
StringArgument logFilePath = null;
StringArgument targetFilePath = null;
StringArgument outputFilePath = null;
+ BooleanArgument useLastKnownGoodConfig = null;
+ BooleanArgument quietMode = null;
Message toolDescription = INFO_WAIT4DEL_TOOL_DESCRIPTION.get();
ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
@@ -161,6 +164,20 @@
argParser.addArgument(timeout);
+ // Not used in this class, but required by the start-ds script
+ // (see issue #3814)
+ useLastKnownGoodConfig =
+ new BooleanArgument("lastknowngoodconfig", 'L',
+ "useLastKnownGoodConfig",
+ INFO_DSCORE_DESCRIPTION_LASTKNOWNGOODCFG.get());
+ argParser.addArgument(useLastKnownGoodConfig);
+
+ // Not used in this class, but required by the start-ds script
+ // (see issue #3814)
+ quietMode = new BooleanArgument("quiet", 'Q', "quiet",
+ INFO_DESCRIPTION_QUIET.get());
+ argParser.addArgument(quietMode);
+
showUsage = new BooleanArgument("help", 'H', "help",
INFO_WAIT4DEL_DESCRIPTION_HELP.get());
argParser.addArgument(showUsage);
--
Gitblit v1.10.0