From 5a495b5d64f7a94ccb0e4973decaf0c1e762f88c Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Fri, 23 Oct 2009 19:44:22 +0000
Subject: [PATCH] Fix for issue 4313 (Control-panel stop triggers authentication pop-up) After getting the return code from stop-ds, verify that the server released its lock on the file used to test that it is running.
---
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericDialog.java | 6 +
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java | 29 ++++++---
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java | 55 ++++++++++++++++++
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java | 1
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericFrame.java | 2
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java | 14 ++++
opendj-sdk/opends/src/messages/messages/admin_tool.properties | 14 ++--
7 files changed, 101 insertions(+), 20 deletions(-)
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
index c1cb3c8..1962553 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/ControlPanelInfo.java
@@ -105,7 +105,6 @@
private LinkedHashSet<ConfigChangeListener> configListeners =
new LinkedHashSet<ConfigChangeListener>();
-
private LinkedHashSet<BackupCreatedListener> backupListeners =
new LinkedHashSet<BackupCreatedListener>();
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
index 69d182a..00be3e0 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
@@ -38,7 +38,7 @@
import org.opends.messages.Message;
/**
- * An abstract class used to refactor some code between the start, stop and
+ * An abstract class used to re-factor some code between the start, stop and
* restart tasks.
*
*/
@@ -98,8 +98,8 @@
// To display new status
try
{
- getInfo().regenerateDescriptor();
getInfo().stopPooling();
+ getInfo().regenerateDescriptor();
ArrayList<String> arguments = getCommandLineArguments();
@@ -108,14 +108,7 @@
arguments.toArray(args);
returnCode = executeCommandLine(getCommandLinePath(), args);
- if (returnCode != 0)
- {
- state = State.FINISHED_WITH_ERROR;
- }
- else
- {
- state = State.FINISHED_SUCCESSFULLY;
- }
+ postCommandLine();
}
catch (Throwable t)
{
@@ -133,4 +126,20 @@
ArrayList<String> args = new ArrayList<String>();
return args;
}
+
+ /**
+ * Method called just after calling the command-line. To be overwritten
+ * by the inheriting classes.
+ */
+ protected void postCommandLine()
+ {
+ if (returnCode != 0)
+ {
+ state = State.FINISHED_WITH_ERROR;
+ }
+ else
+ {
+ state = State.FINISHED_SUCCESSFULLY;
+ }
+ }
}
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java
index ece3aef..5545896 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java
@@ -29,6 +29,8 @@
import static org.opends.messages.AdminToolMessages.*;
+import java.io.File;
+
import javax.swing.SwingUtilities;
import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
@@ -79,6 +81,7 @@
super.runTask();
if (state == State.FINISHED_SUCCESSFULLY)
{
+ // Verify that the server is actually stopped
SwingUtilities.invokeLater(new Runnable()
{
public void run()
@@ -98,4 +101,56 @@
{
return getCommandLinePath("stop-ds");
}
+
+ /**
+ * Method called just after calling the command-line. To be overwritten
+ * by the inheriting classes.
+ */
+ protected void postCommandLine()
+ {
+ if (returnCode != 0)
+ {
+ state = State.FINISHED_WITH_ERROR;
+ }
+ else
+ {
+ File f = new File(getInfo().getServerDescriptor().getInstancePath());
+ // Check that the server is actually stopped.
+ boolean stopped = !Utilities.isServerRunning(f);
+ int nTries = 20;
+ while (!stopped && nTries > 0)
+ {
+ try
+ {
+ Thread.sleep(700);
+ }
+ catch (Throwable t)
+ {
+ }
+ stopped = !Utilities.isServerRunning(f);
+ nTries --;
+ }
+ if (!stopped)
+ {
+ SwingUtilities.invokeLater(new Runnable()
+ {
+ public void run()
+ {
+ getProgressDialog().appendProgressHtml(
+ Utilities.applyFont(
+ "<br>"+
+ ERR_CTRL_PANEL_STOPPING_SERVER_POST_CMD_LINE.get(
+ getCommandLinePath("stop-ds"))+"<br>",
+ ColorAndFontConstants.progressFont));
+ }
+ });
+ returnCode = -1;
+ state = State.FINISHED_WITH_ERROR;
+ }
+ else
+ {
+ state = State.FINISHED_SUCCESSFULLY;
+ }
+ }
+ }
}
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericDialog.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericDialog.java
index 6f35209..9cc3a47 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericDialog.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericDialog.java
@@ -234,13 +234,17 @@
*/
public void setVisible(boolean visible)
{
- if (lastComponentWithFocus == null)
+ if (visible && lastComponentWithFocus == null)
{
lastComponentWithFocus = panel.getPreferredFocusComponent();
}
if (visible && (lastComponentWithFocus != null) &&
lastComponentWithFocus.isVisible())
{
+ if (lastComponentWithFocus == null)
+ {
+ lastComponentWithFocus = panel.getPreferredFocusComponent();
+ }
lastComponentWithFocus.requestFocusInWindow();
}
updateDefaultButton(panel);
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericFrame.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericFrame.java
index 89693e4..6fdda91 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericFrame.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/GenericFrame.java
@@ -210,7 +210,7 @@
*/
public void setVisible(boolean visible)
{
- if (lastComponentWithFocus == null)
+ if (visible && lastComponentWithFocus == null)
{
lastComponentWithFocus = panel.getPreferredFocusComponent();
}
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
index fe35e15..8ab5a40 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
@@ -261,7 +261,14 @@
*/
public Component getPreferredFocusComponent()
{
- return pwd;
+ if (pwd.isVisible())
+ {
+ return pwd;
+ }
+ else
+ {
+ return combo;
+ }
}
/**
@@ -302,6 +309,11 @@
{
updateComponentState();
displayMainPanel();
+ Component comp = getPreferredFocusComponent();
+ if (comp != null)
+ {
+ comp.requestFocusInWindow();
+ }
}
};
displayMessage(INFO_CTRL_PANEL_LOADING_PANEL_SUMMARY.get());
diff --git a/opendj-sdk/opends/src/messages/messages/admin_tool.properties b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
index bfb7558..c2ad5e5 100644
--- a/opendj-sdk/opends/src/messages/messages/admin_tool.properties
+++ b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
@@ -1206,23 +1206,25 @@
INFO_CTRL_PANEL_STARTING_SERVER_SUCCESSFUL_DETAILS=The server started \
successfully
MILD_ERR_CTRL_PANEL_STARTING_SERVER_ERROR_SUMMARY=Error during server start
-MILD_ERR_CTRL_PANEL_STARTING_SERVER_ERROR_DETAILS=An error starting the \
- server. Error code: %d
+MILD_ERR_CTRL_PANEL_STARTING_SERVER_ERROR_DETAILS=An error occurred starting \
+ the server. Error code: %d
INFO_CTRL_PANEL_RESTARTING_SERVER_SUCCESSFUL_SUMMARY=Restart Complete
INFO_CTRL_PANEL_RESTARTING_SERVER_SUCCESSFUL_DETAILS=The server restarted \
successfully
MILD_ERR_CTRL_PANEL_RESTARTING_SERVER_ERROR_SUMMARY=Error during server restart
-MILD_ERR_CTRL_PANEL_RESTARTING_SERVER_ERROR_DETAILS=An error restarting the \
- server. Error code: %d
+MILD_ERR_CTRL_PANEL_RESTARTING_SERVER_ERROR_DETAILS=An error occurred \
+ restarting the server. Error code: %d
INFO_CTRL_PANEL_STOPPING_SERVER_SUMMARY=Stopping Server...
INFO_CTRL_PANEL_STOPPING_SERVER_SUCCESSFUL_SUMMARY=Stop Complete
INFO_CTRL_PANEL_STOPPING_SERVER_SUCCESSFUL_DETAILS=The server stopped \
successfully
MILD_ERR_CTRL_PANEL_STOPPING_SERVER_ERROR_SUMMARY=Error during Server Stop
-MILD_ERR_CTRL_PANEL_STOPPING_SERVER_ERROR_DETAILS=An error stopping the \
- server. Error code: %d
+MILD_ERR_CTRL_PANEL_STOPPING_SERVER_ERROR_DETAILS=An error occurred stopping \
+ the server. Error code: %d
+MILD_ERR_CTRL_PANEL_STOPPING_SERVER_POST_CMD_LINE=The command-line %s returned \
+ successfully but the server appears to be running.
INFO_CTRL_PANEL_CLOSE_WINDOW_WHEN_OPERATION_COMPLETES_LABEL=Close window when \
operation completes
--
Gitblit v1.10.0