You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by st...@apache.org on 2015/01/14 17:28:43 UTC

[3/5] incubator-slider git commit: SLIDER-715 stub REST stop action with test

SLIDER-715 stub REST stop action with test


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/52e55947
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/52e55947
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/52e55947

Branch: refs/heads/develop
Commit: 52e559470f082c07acbd132c58a77b2893d63f2e
Parents: 68d57cf
Author: Steve Loughran <st...@apache.org>
Authored: Wed Jan 14 11:22:49 2015 +0000
Committer: Steve Loughran <st...@apache.org>
Committed: Wed Jan 14 16:28:27 2015 +0000

----------------------------------------------------------------------
 .../server/appmaster/web/rest/RestPaths.java    |  1 +
 .../rest/application/ApplicationResource.java   | 33 ++++++++--
 .../application/actions/RestActionPing.java     |  2 +-
 .../application/actions/RestActionStop.java     | 66 ++++++++++++++++++++
 .../rest/application/actions/StopResponse.java  | 29 +++++++++
 .../slider/agent/rest/RestTestDelegates.groovy  | 25 +++++++-
 .../slider/agent/rest/TestStandaloneREST.groovy |  2 +
 7 files changed, 150 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/52e55947/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java
index 58520f5..35f3e13 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/RestPaths.java
@@ -145,4 +145,5 @@ public class RestPaths {
 
   public static final String ACTION = "/action";
   public static final String ACTION_PING = ACTION + "/ping";
+  public static final String ACTION_STOP = ACTION + "/stop";
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/52e55947/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
index af310b1..6734f73 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/ApplicationResource.java
@@ -33,6 +33,8 @@ import org.apache.slider.server.appmaster.web.WebAppApi;
 import org.apache.slider.server.appmaster.web.rest.AbstractSliderResource;
 import static org.apache.slider.server.appmaster.web.rest.RestPaths.*;
 
+import org.apache.slider.server.appmaster.web.rest.application.actions.RestActionStop;
+import org.apache.slider.server.appmaster.web.rest.application.actions.StopResponse;
 import org.apache.slider.server.appmaster.web.rest.application.resources.AggregateModelRefresher;
 import org.apache.slider.server.appmaster.web.rest.application.resources.AppconfRefresher;
 import org.apache.slider.server.appmaster.web.rest.application.resources.CachedContent;
@@ -41,6 +43,7 @@ import org.apache.slider.server.appmaster.web.rest.application.resources.Content
 import org.apache.slider.server.appmaster.web.rest.application.resources.LiveComponentsRefresher;
 import org.apache.slider.server.appmaster.web.rest.application.resources.LiveResourcesRefresher;
 import org.apache.slider.server.appmaster.web.rest.application.actions.RestActionPing;
+import org.apache.slider.server.appmaster.web.rest.application.resources.PingResource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -301,10 +304,16 @@ public class ApplicationResource extends AbstractSliderResource {
     }
   }
 
+  /* ************************************************************************
+  
+  ACTION PING
+  
+  **************************************************************************/
+  
   @GET
   @Path(ACTION_PING)
   @Produces({APPLICATION_JSON})
-  public Object actionPingGet(@Context HttpServletRequest request,
+  public PingResource actionPingGet(@Context HttpServletRequest request,
       @Context UriInfo uriInfo) {
     return new RestActionPing().ping(request, uriInfo, "");
   }
@@ -312,7 +321,7 @@ public class ApplicationResource extends AbstractSliderResource {
   @POST
   @Path(ACTION_PING)
   @Produces({APPLICATION_JSON})
-  public Object actionPingPost(@Context HttpServletRequest request,
+  public PingResource actionPingPost(@Context HttpServletRequest request,
       @Context UriInfo uriInfo,
       String body) {
     return new RestActionPing().ping(request, uriInfo, body);
@@ -322,7 +331,7 @@ public class ApplicationResource extends AbstractSliderResource {
   @Path(ACTION_PING)
   @Consumes({TEXT_PLAIN})
   @Produces({APPLICATION_JSON})
-  public Object actionPingPut(@Context HttpServletRequest request,
+  public PingResource actionPingPut(@Context HttpServletRequest request,
       @Context UriInfo uriInfo,
       String body) {
     return new RestActionPing().ping(request, uriInfo, body);
@@ -332,7 +341,7 @@ public class ApplicationResource extends AbstractSliderResource {
   @Path(ACTION_PING)
   @Consumes({APPLICATION_JSON})
   @Produces({APPLICATION_JSON})
-  public Object actionPingDelete(@Context HttpServletRequest request,
+  public PingResource actionPingDelete(@Context HttpServletRequest request,
       @Context UriInfo uriInfo) {
     return new RestActionPing().ping(request, uriInfo, "");
   }
@@ -345,4 +354,20 @@ public class ApplicationResource extends AbstractSliderResource {
     return new RestActionPing().ping(request, uriInfo, "");
   }
   
+    /* ************************************************************************
+  
+  ACTION STOP
+  
+  **************************************************************************/
+
+
+  @POST
+  @Path(ACTION_STOP)
+  @Produces({APPLICATION_JSON})
+  public StopResponse actionStop(@Context HttpServletRequest request,
+      @Context UriInfo uriInfo,
+      String body) {
+    return new RestActionStop(slider).stop(request, uriInfo, body);
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/52e55947/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionPing.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionPing.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionPing.java
index 65126ac..f20f296 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionPing.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionPing.java
@@ -34,7 +34,7 @@ public class RestActionPing {
   public RestActionPing() {
   }
   
-  public Object ping(HttpServletRequest request, UriInfo uriInfo, String body) {
+  public PingResource ping(HttpServletRequest request, UriInfo uriInfo, String body) {
     String verb = request.getMethod();
     log.info("Ping {}", verb);
     PingResource pingResource = new PingResource();

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/52e55947/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionStop.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionStop.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionStop.java
new file mode 100644
index 0000000..703c1e7
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/RestActionStop.java
@@ -0,0 +1,66 @@
+/*
+ * 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.slider.server.appmaster.web.rest.application.actions;
+
+import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
+import org.apache.slider.core.main.LauncherExitCodes;
+import org.apache.slider.server.appmaster.actions.ActionStopSlider;
+import org.apache.slider.server.appmaster.web.WebAppApi;
+import org.apache.slider.server.appmaster.web.rest.application.resources.PingResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.UriInfo;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
+public class RestActionStop {
+  private static final Logger log =
+      LoggerFactory.getLogger(RestActionStop.class);
+
+  private final WebAppApi slider;
+  
+  public RestActionStop(WebAppApi slider) {
+    this.slider = slider;
+  }
+  
+  public StopResponse stop(HttpServletRequest request, UriInfo uriInfo, String body) {
+    String verb = request.getMethod();
+    log.info("Ping {}", verb);
+    StopResponse response = new StopResponse();
+    response.verb = verb;
+    long time = System.currentTimeMillis();
+    String text = 
+        String.format(Locale.ENGLISH,
+            "Stopping action %s received at %tc",
+            verb, time);
+    response.text = text;
+    ActionStopSlider stopSlider =
+        new ActionStopSlider(text,
+            1000, TimeUnit.MILLISECONDS,
+            LauncherExitCodes.EXIT_SUCCESS,
+            FinalApplicationStatus.SUCCEEDED,
+            text);
+    log.info("SliderAppMasterApi.stopCluster: {}", stopSlider);
+//    slider.schedule(stopSlider);
+    
+    return response;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/52e55947/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/StopResponse.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/StopResponse.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/StopResponse.java
new file mode 100644
index 0000000..9af6a22
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/rest/application/actions/StopResponse.java
@@ -0,0 +1,29 @@
+/*
+ * 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.slider.server.appmaster.web.rest.application.actions;
+
+import org.codehaus.jackson.annotate.JsonIgnoreProperties;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+public class StopResponse {
+  String verb;
+  public String text;
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/52e55947/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestTestDelegates.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestTestDelegates.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestTestDelegates.groovy
index 430ddf1..5383425 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestTestDelegates.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestTestDelegates.groovy
@@ -67,7 +67,6 @@ class RestTestDelegates extends SliderTestUtils {
     getWebPage(appmaster, SYSTEM_METRICS_JSON)
   }
 
-  @Test
   public void testLiveResources() throws Throwable {
     describe "Live Resources"
     ConfTreeOperations tree = fetchConfigTree(appmaster, LIVE_RESOURCES)
@@ -84,8 +83,7 @@ class RestTestDelegates extends SliderTestUtils {
     assert 0 == liveAM.getMandatoryOptionInt(COMPONENT_INSTANCES_COMPLETED)
     assert 0 == liveAM.getMandatoryOptionInt(COMPONENT_INSTANCES_RELEASING)
   }
-
-  @Test
+  
   public void testLiveContainers() throws Throwable {
     describe "Application REST ${LIVE_CONTAINERS}"
 
@@ -231,5 +229,26 @@ class RestTestDelegates extends SliderTestUtils {
     return outcome
   }
 
+  /**
+   * Test the stop command.
+   * Important: once executed, the AM is no longer there.
+   * This must be the last test in the sequence.
+   */
+  public void testStop() {
+    String target = appendToURL(appmaster, SLIDER_PATH_APPLICATION, ACTION_STOP)
+    describe "Stop URL $target"
+
+
+    URL targetUrl = new URL(target)
+    def outcome = connectionFactory.execHttpOperation(
+        HttpVerb.POST,
+        targetUrl,
+        new byte[0],
+        MediaType.TEXT_PLAIN)
+    log.info "Stopped: $outcome"
+
+
+  }
+
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/52e55947/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy
index 4b907e1..7ae8e2f 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/rest/TestStandaloneREST.groovy
@@ -112,6 +112,8 @@ class TestStandaloneREST extends AgentMiniClusterTestBase {
       // and via the proxy
       proxied.testRESTModel()
     }
+    
+    direct.testStop();
   }