Michael Blow has submitted this change and it was merged. Change subject: Parameter To Shutdown API to Terminate NC Services ......................................................................
Parameter To Shutdown API to Terminate NC Services POST to /admin/shutdown?all=true causes NC Services to exit as part of cluster shutdown Change-Id: Ic3009a13f4498f36dd18ea26f861506bf7d930e7 Reviewed-on: https://asterix-gerrit.ics.uci.edu/1172 Tested-by: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Till Westmann <[email protected]> --- M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java M asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java M asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java A asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownAllCommand.java M asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java M asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat M asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh M hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java M hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java M hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java M hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java M hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java M hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java M hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java 21 files changed, 120 insertions(+), 54 deletions(-) Approvals: Till Westmann: Looks good to me, approved Jenkins: Verified; Verified Objections: Jenkins: Violations found diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java index c786dc7..7d2a272 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/ShutdownAPIServlet.java @@ -45,9 +45,10 @@ ServletContext context = getServletContext(); IHyracksClientConnection hcc = (IHyracksClientConnection) context.getAttribute(HYRACKS_CONNECTION_ATTR); + boolean terminateNCServices = "true".equalsIgnoreCase(request.getParameter("all")); Thread t = new Thread(() -> { try { - hcc.stopCluster(); + hcc.stopCluster(terminateNCServices); } catch (Exception e) { GlobalConfig.ASTERIX_LOGGER.log(Level.SEVERE, "Exception stopping cluster", e); } diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java index 419e660..424c1e3 100644 --- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java +++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/AsterixHelperExecution.java @@ -24,6 +24,7 @@ import org.apache.asterix.clienthelper.commands.ClientCommand; import org.apache.asterix.clienthelper.commands.ClientCommand.Command; import org.apache.asterix.clienthelper.commands.GetClusterStateCommand; +import org.apache.asterix.clienthelper.commands.ShutdownAllCommand; import org.apache.asterix.clienthelper.commands.ShutdownCommand; import org.apache.asterix.clienthelper.commands.WaitForClusterCommand; import org.kohsuke.args4j.CmdLineException; @@ -108,6 +109,8 @@ return new WaitForClusterCommand(args); case SHUTDOWN_CLUSTER: return new ShutdownCommand(args); + case SHUTDOWN_CLUSTER_ALL: + return new ShutdownAllCommand(args); default: throw new IllegalStateException("NYI: " + command); } diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java index 8f0cac0..c86ea36 100644 --- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java +++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ClientCommand.java @@ -30,7 +30,8 @@ public enum Command { GET_CLUSTER_STATE("Get state of cluster (errorcode 0 = UP, non-zero = DOWN)"), WAIT_FOR_CLUSTER("Wait for cluster to be ready (errorcode 0 = UP, non-zero = UNKNOWN)"), - SHUTDOWN_CLUSTER("Instructs the cluster to shut down"),; + SHUTDOWN_CLUSTER("Instructs the cluster to shut down, leaving NCService processes intact"), + SHUTDOWN_CLUSTER_ALL("Instructs the cluster to shut down, including NCService processes"); private final String usage; private static final Map<String, Command> nameMap = new HashMap<>(); diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownAllCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownAllCommand.java new file mode 100644 index 0000000..3903262 --- /dev/null +++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownAllCommand.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.clienthelper.commands; + +import org.apache.asterix.clienthelper.Args; + +public class ShutdownAllCommand extends ShutdownCommand { + + public ShutdownAllCommand(Args args) { + super(args, "?all=true"); + } +} diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java index ee6e1a7..688f4ad 100644 --- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java +++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java @@ -27,9 +27,13 @@ public class ShutdownCommand extends RemoteCommand { private final String shutdownPath; - public ShutdownCommand(Args args) { + public ShutdownCommand(Args args, String extra) { super(args); - shutdownPath = args.getShutdownPath(); + shutdownPath = args.getShutdownPath() + extra; + } + + public ShutdownCommand(Args args) { + this(args, ""); } private void clusterLog(String suffix) { diff --git a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat index 7cbf107..dfd1ada 100644 --- a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat +++ b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.bat @@ -37,15 +37,12 @@ call %INSTALLDIR%\bin\${HELPER_COMMAND} get_cluster_state -quiet if %ERRORLEVEL% EQU 0 ( - call %INSTALLDIR%\bin\${HELPER_COMMAND} shutdown_cluster + call %INSTALLDIR%\bin\${HELPER_COMMAND} shutdown_cluster_all ) else ( - echo WARNING: sample cluster does not appear to be running, will attempt to kill any running - echo NCServices and wait for CCDriver to terminate if running. + echo WARNING: sample cluster does not appear to be running, will attempt to wait for + echo CCDriver to terminate if running. ) echo. -echo Terminating NC services... -powershell "%JAVA_HOME%\bin\jps.exe -v | select-string -pattern ${NC_SERVICE_COMMAND} | %%{ $_.ToString().Split(' ')[0] } | %%{ Stop-Process $_ }" - powershell "Write-Host "Waiting for CCDriver to terminate..." -nonewline; do { if ($running) { Start-Sleep 1 }; %JAVA_HOME%\bin\jps.exe -v | select-string -pattern ${CC_COMMAND} -quiet -outvariable running | Out-Null; Write-Host "." -nonewline } while ($running)" echo .done. goto :END diff --git a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh index 7451e4e..462d53d 100755 --- a/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh +++ b/asterixdb/asterix-server/src/main/samples/local/bin/stop-sample-cluster.sh @@ -43,13 +43,12 @@ if $INSTALLDIR/bin/${HELPER_COMMAND} get_cluster_state -quiet; then - $INSTALLDIR/bin/${HELPER_COMMAND} shutdown_cluster + $INSTALLDIR/bin/${HELPER_COMMAND} shutdown_cluster_all else - echo "WARNING: sample cluster does not appear to be running, will attempt to kill any running NCServices and" - echo " wait for CCDriver to terminate if running." + echo "WARNING: sample cluster does not appear to be running, will attempt to wait for" + echo " CCDriver to terminate if running." fi -$JAVA_HOME/bin/jps | awk '/NCService/ { print $1 }' | xargs kill 2>/dev/null first=1 while [ -n "$($JAVA_HOME/bin/jps | awk '/CCDriver/')" ]; do if [ $first ]; then diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java index 88c4edb..a7c2a36 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceFunctions.java @@ -289,11 +289,20 @@ public static class ClusterShutdownFunction extends Function { private static final long serialVersionUID = 1L; + private final boolean terminateNCService; + + public ClusterShutdownFunction(boolean terminateNCService) { + this.terminateNCService = terminateNCService; + } @Override public FunctionId getFunctionId() { return FunctionId.CLUSTER_SHUTDOWN; } + + public boolean isTerminateNCService() { + return terminateNCService; + } } public static class GetNodeDetailsJSONFunction extends Function { diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java index 86a8ceb..f88f30f 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksClientInterfaceRemoteProxy.java @@ -118,8 +118,9 @@ } @Override - public void stopCluster() throws Exception { - HyracksClientInterfaceFunctions.ClusterShutdownFunction csdf = new HyracksClientInterfaceFunctions.ClusterShutdownFunction(); + public void stopCluster(boolean terminateNCService) throws Exception { + HyracksClientInterfaceFunctions.ClusterShutdownFunction csdf = + new HyracksClientInterfaceFunctions.ClusterShutdownFunction(terminateNCService); rpci.call(ipcHandle, csdf); //give the CC some time to do final settling after it returns our request for (int i = 3; ipcHandle.isConnected() && i > 0; i--) { diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java index 4b27caf..8c0557e 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/HyracksConnection.java @@ -189,8 +189,8 @@ } @Override - public void stopCluster() throws Exception{ - hci.stopCluster(); + public void stopCluster(boolean terminateNCService) throws Exception { + hci.stopCluster(terminateNCService); } @Override diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java index 6c15da2..fd4d21b 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientConnection.java @@ -185,8 +185,9 @@ /** * Shuts down all NCs and then the CC. + * @param terminateNCService */ - public void stopCluster() throws Exception; + public void stopCluster(boolean terminateNCService) throws Exception; /** * Get details of specified node as JSON object diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java index c2af2e7..3f3c120 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/client/IHyracksClientInterface.java @@ -54,7 +54,7 @@ public JobInfo getJobInfo(JobId jobId) throws Exception; - public void stopCluster() throws Exception; + public void stopCluster(boolean terminateNCService) throws Exception; public String getNodeDetailsJSON(String nodeId, boolean includeStats, boolean includeConfig) throws Exception; diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java index ce272eb..685a36b 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/ClusterControllerService.java @@ -516,8 +516,10 @@ return; } case CLUSTER_SHUTDOWN: { + HyracksClientInterfaceFunctions.ClusterShutdownFunction csf = + (HyracksClientInterfaceFunctions.ClusterShutdownFunction) fn; workQueue.schedule(new ClusterShutdownWork(ClusterControllerService.this, - new IPCResponder<>(handle, mid))); + csf.isTerminateNCService(), new IPCResponder<>(handle, mid))); return; } diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java index 6acab12..63ca4ae 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/work/ClusterShutdownWork.java @@ -33,13 +33,16 @@ import org.apache.hyracks.ipc.exceptions.IPCException; public class ClusterShutdownWork extends SynchronizableWork { + private static final Logger LOGGER = Logger.getLogger(ClusterShutdownWork.class.getName()); - private ClusterControllerService ccs; - private IResultCallback<Boolean> callback; - private static Logger LOGGER = Logger.getLogger(ClusterShutdownWork.class.getName()); + private final ClusterControllerService ccs; + private final boolean terminateNCService; + private final IResultCallback<Boolean> callback; - public ClusterShutdownWork(ClusterControllerService ncs, IResultCallback<Boolean> callback) { + public ClusterShutdownWork(ClusterControllerService ncs, boolean terminateNCService, + IResultCallback<Boolean> callback) { this.ccs = ncs; + this.terminateNCService = terminateNCService; this.callback = callback; } @@ -106,7 +109,7 @@ protected void shutdownNode(String key, NodeControllerState ncState) { try { - ncState.getNodeController().shutdown(); + ncState.getNodeController().shutdown(terminateNCService); } catch (Exception e) { LOGGER.log( Level.INFO, "Exception shutting down NC " + key + " (possibly dead?), continuing shutdown...", e); diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java index bd550b5..dff5827 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/base/INodeController.java @@ -51,7 +51,7 @@ public void dumpState(String stateDumpId) throws Exception; - public void shutdown() throws Exception; + public void shutdown(boolean terminateNCService) throws Exception; public void sendApplicationMessageToNC(byte[] data, DeploymentId deploymentId, String nodeId) throws Exception; diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java index aeb2de7..aa9a4fe 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/CCNCFunctions.java @@ -1158,10 +1158,20 @@ public static class ShutdownRequestFunction extends Function { private static final long serialVersionUID = 1L; + private final boolean terminateNCService; + + public ShutdownRequestFunction(boolean terminateNCService) { + this.terminateNCService = terminateNCService; + } + @Override public FunctionId getFunctionId() { return FunctionId.SHUTDOWN_REQUEST; } + + public boolean isTerminateNCService() { + return terminateNCService; + } } public static class ShutdownResponseFunction extends Function { diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java index e4682dc..c3376e6 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/ipc/NodeControllerRemoteProxy.java @@ -90,8 +90,8 @@ } @Override - public void shutdown() throws Exception { - CCNCFunctions.ShutdownRequestFunction sdrf = new CCNCFunctions.ShutdownRequestFunction(); + public void shutdown(boolean terminateNCService) throws Exception { + CCNCFunctions.ShutdownRequestFunction sdrf = new CCNCFunctions.ShutdownRequestFunction(terminateNCService); ipcHandle.send(-1, sdrf, null); } diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java index dbf3af0..d7facf0 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/NodeControllerService.java @@ -572,7 +572,8 @@ return; case SHUTDOWN_REQUEST: - queue.schedule(new ShutdownWork(NodeControllerService.this)); + final CCNCFunctions.ShutdownRequestFunction sdrf = (CCNCFunctions.ShutdownRequestFunction) fn; + queue.schedule(new ShutdownWork(NodeControllerService.this, sdrf.isTerminateNCService())); return; case THREAD_DUMP_REQUEST: diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java index f81882b..4558a91 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/work/ShutdownWork.java @@ -19,49 +19,49 @@ package org.apache.hyracks.control.nc.work; -import java.net.URL; -import java.util.List; +import java.util.logging.Level; import java.util.logging.Logger; -import org.apache.hyracks.api.deployment.DeploymentId; import org.apache.hyracks.control.common.base.IClusterController; -import org.apache.hyracks.control.common.deployment.DeploymentStatus; -import org.apache.hyracks.control.common.deployment.DeploymentUtils; import org.apache.hyracks.control.common.work.AbstractWork; import org.apache.hyracks.control.nc.NodeControllerService; public class ShutdownWork extends AbstractWork { - - private final NodeControllerService ncs; private static Logger LOGGER = Logger.getLogger(ShutdownWork.class.getName()); + private final NodeControllerService ncs; + private final boolean terminateNCService; - public ShutdownWork(NodeControllerService ncs) { + public ShutdownWork(NodeControllerService ncs, boolean terminateNCService) { this.ncs = ncs; + this.terminateNCService = terminateNCService; } @Override public void run() { + IClusterController ccs = ncs.getClusterController(); try { - IClusterController ccs = ncs.getClusterController(); ccs.notifyShutdown(ncs.getId()); - LOGGER.info("JVM Exiting.. Bye!"); + } catch (Exception e) { + LOGGER.log(Level.WARNING, "Exception notifying CC of shutdown acknowledgment", e); + throw new RuntimeException(e); + } + + LOGGER.info("JVM Exiting.. Bye!"); //run the shutdown in a new thread, so we don't block this last work task - Thread t = new Thread() { + Thread t = new Thread("NC " + ncs.getId() + " Shutdown") { + @Override public void run() { try { ncs.stop(); } catch (Exception e) { - LOGGER.severe(e.getMessage()); + LOGGER.log(Level.SEVERE, "Exception stopping node controller service", e); } finally { Runtime rt = Runtime.getRuntime(); - rt.exit(0); + rt.exit(terminateNCService ? 99 : 0); } } }; t.start(); - } catch (Exception e) { - throw new RuntimeException(e); - } } } diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java index 4102b4c..5b032d9 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-nc-service/src/main/java/org/apache/hyracks/control/nc/service/NCService.java @@ -18,11 +18,6 @@ */ package org.apache.hyracks.control.nc.service; -import org.apache.commons.lang3.SystemUtils; -import org.apache.hyracks.control.common.controllers.IniUtils; -import org.ini4j.Ini; -import org.kohsuke.args4j.CmdLineParser; - import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -36,6 +31,11 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; + +import org.apache.commons.lang3.SystemUtils; +import org.apache.hyracks.control.common.controllers.IniUtils; +import org.ini4j.Ini; +import org.kohsuke.args4j.CmdLineParser; /** * Stand-alone process which listens for configuration information from the @@ -164,7 +164,13 @@ if (LOGGER.isLoggable(Level.INFO)) { LOGGER.info("NCDriver exited with return value " + retval); } - return (retval == 0); + if (retval == 99) { + if (LOGGER.isLoggable(Level.INFO)) { + LOGGER.info("Terminating NCService based on return value from NCDriver"); + } + System.exit(0); + } + return retval == 0; } catch (Exception e) { if (LOGGER.isLoggable(Level.SEVERE)) { LOGGER.log(Level.SEVERE, "Configuration from CC broken", e); diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java index 97f5a64..c1083c9 100644 --- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java +++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-shutdown-test/src/test/java/org/apache/hyracks/examples/shutdown/test/ClusterShutdownIT.java @@ -36,11 +36,11 @@ @Test public void runShutdown() throws Exception { IHyracksClientConnection hcc = new HyracksConnection("localhost", 1098); - hcc.stopCluster(); + hcc.stopCluster(false); //what happens here... closeTwice.expect(IPCException.class); closeTwice.expectMessage("Cannot send on a closed handle"); - hcc.stopCluster(); + hcc.stopCluster(false); ServerSocket c = null; ServerSocket s = null; try { -- To view, visit https://asterix-gerrit.ics.uci.edu/1172 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ic3009a13f4498f36dd18ea26f861506bf7d930e7 Gerrit-PatchSet: 3 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Michael Blow <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]>
