You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/09/19 13:31:19 UTC
[03/16] git commit: Support for timeout parameter in the
/server/shutdown request
Support for timeout parameter in the /server/shutdown request
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/df789d90
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/df789d90
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/df789d90
Branch: refs/heads/master
Commit: df789d90c2ba4f0837aa36f435b3e60d8e8b416f
Parents: 58d648a
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Fri Sep 12 19:07:50 2014 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Wed Sep 17 15:40:46 2014 +0300
----------------------------------------------------------------------
.../main/java/brooklyn/rest/api/ServerApi.java | 7 +++-
.../brooklyn/rest/resources/ServerResource.java | 36 ++++++++++++++++++--
2 files changed, 39 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/df789d90/usage/rest-api/src/main/java/brooklyn/rest/api/ServerApi.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/api/ServerApi.java b/usage/rest-api/src/main/java/brooklyn/rest/api/ServerApi.java
index fb9d3c1..43cc767 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/api/ServerApi.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/api/ServerApi.java
@@ -33,6 +33,7 @@ import brooklyn.rest.domain.VersionSummary;
import com.google.common.annotations.Beta;
import com.wordnik.swagger.core.ApiOperation;
+import com.wordnik.swagger.core.ApiParam;
@Path("/v1/server")
@Apidoc("Server")
@@ -52,8 +53,12 @@ public interface ServerApi {
@ApiOperation(value = "Terminate this Brooklyn server instance")
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
public void shutdown(
+ @ApiParam(name = "stopAppsFirst", value = "Whether to stop running applications before shutting down")
@FormParam("stopAppsFirst") @DefaultValue("false") boolean stopAppsFirst,
- @FormParam("delayMillis") @DefaultValue("250") long delayMillis);
+ @ApiParam(name = "delayMillis", value = "Minimum delay before system.exit")
+ @FormParam("delayMillis") @DefaultValue("250") long delayMillis,
+ @ApiParam(name = "httpReturnTimeout", value = "Maximum time to block the request for the shutdown to finish.")
+ @FormParam("httpReturnTimeout") String httpReturnTimeout);
@GET
@Path("/version")
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/df789d90/usage/rest-server/src/main/java/brooklyn/rest/resources/ServerResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/ServerResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/ServerResource.java
index 4a52672..c161101 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/ServerResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/ServerResource.java
@@ -23,6 +23,8 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.Timer;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,8 +44,10 @@ import brooklyn.rest.domain.HighAvailabilitySummary;
import brooklyn.rest.domain.VersionSummary;
import brooklyn.rest.transform.HighAvailabilityTransformer;
import brooklyn.util.ResourceUtils;
+import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.time.CountdownTimer;
import brooklyn.util.time.Duration;
+import brooklyn.util.time.Time;
public class ServerResource extends AbstractBrooklynRestResource implements ServerApi {
@@ -58,9 +62,13 @@ public class ServerResource extends AbstractBrooklynRestResource implements Serv
}
@Override
- public void shutdown(final boolean stopAppsFirst, final long delayMillis) {
+ public void shutdown(final boolean stopAppsFirst, final long delayMillis, String httpReturnTimeout) {
log.info("REST call to shutdown server, stopAppsFirst="+stopAppsFirst+", delayMillis="+delayMillis);
-
+
+ Duration httpReturnTimeoutDuration = Duration.parse(httpReturnTimeout);
+ final boolean shouldBlock = (httpReturnTimeoutDuration != null);
+ final AtomicBoolean completed = new AtomicBoolean();
+
new Thread() {
public void run() {
Duration delayBeforeSystemExit = Duration.millis(delayMillis);
@@ -82,10 +90,32 @@ public class ServerResource extends AbstractBrooklynRestResource implements Serv
((ManagementContextInternal)mgmt()).terminate();
timer.waitForExpiryUnchecked();
-
+
+ synchronized (completed) {
+ completed.set(true);
+ completed.notifyAll();
+ }
+
+ if (shouldBlock) {
+ //give the http request a chance to complete gracefully
+ Time.sleep(Duration.FIVE_SECONDS);
+ }
+
System.exit(0);
}
}.start();
+
+ if (shouldBlock) {
+ synchronized (completed) {
+ if (!completed.get()) {
+ try {
+ completed.wait(httpReturnTimeoutDuration.toMilliseconds());
+ } catch (InterruptedException e) {
+ throw Exceptions.propagate(e);
+ }
+ }
+ }
+ }
}
@Override