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/02/02 17:24:52 UTC
[05/10] incubator-slider git commit: SLIDER-768 split
SliderApplicationAPI client into interface and impl;
stops users of client getting at raw REST API and other methods unless they
want to typecast (Which tests may still do)
SLIDER-768 split SliderApplicationAPI client into interface and impl; stops users of client getting at raw REST API and other methods unless they want to typecast (Which tests may still do)
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/7f2e0c2d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/7f2e0c2d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/7f2e0c2d
Branch: refs/heads/develop
Commit: 7f2e0c2de94c1ac4ad357c021808c6781d8bb346
Parents: e2388af
Author: Steve Loughran <st...@apache.org>
Authored: Mon Feb 2 14:06:14 2015 +0000
Committer: Steve Loughran <st...@apache.org>
Committed: Mon Feb 2 14:06:14 2015 +0000
----------------------------------------------------------------------
.../slider/client/rest/BaseRestClient.java | 26 +-
.../slider/client/rest/RestClientFactory.java | 29 +-
.../client/rest/SliderApplicationAPI.java | 318 -------------------
.../client/rest/SliderApplicationAPIImpl.java | 254 +++++++++++++++
.../client/rest/SliderApplicationApi.java | 145 +++++++++
.../rest/RestAPIClientTestDelegates.groovy | 9 +-
.../slider/agent/rest/TestStandaloneREST.groovy | 7 +-
.../funtest/lifecycle/AgentWebPagesIT.groovy | 2 +-
8 files changed, 441 insertions(+), 349 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/slider-core/src/main/java/org/apache/slider/client/rest/BaseRestClient.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/rest/BaseRestClient.java b/slider-core/src/main/java/org/apache/slider/client/rest/BaseRestClient.java
index 41cfe9d..de2fe20 100644
--- a/slider-core/src/main/java/org/apache/slider/client/rest/BaseRestClient.java
+++ b/slider-core/src/main/java/org/apache/slider/client/rest/BaseRestClient.java
@@ -37,7 +37,7 @@ import java.net.URI;
/**
* This is a base class for Jersey REST clients in Slider.
- * It supports bonding to an AM and the execution of operations —with
+ * It supports the execution of operations —with
* exceptions uprated to IOExceptions when needed.
* <p>
* Subclasses can use these operations to provide an API-like view
@@ -47,33 +47,19 @@ public class BaseRestClient {
private static final Logger log =
LoggerFactory.getLogger(BaseRestClient.class);
private final Client client;
- private WebResource appmaster;
public BaseRestClient(
- Client client,
- WebResource appmaster) {
+ Client client) {
Preconditions.checkNotNull(client, "null jersey client");
this.client = client;
- if (appmaster != null) {
- bindToAppmaster(appmaster);
- }
- }
-
- public Client getClient() {
- return client;
}
/**
- * Bind/rebind to the AM
- * @param appmaster AM
+ * Get the jersey client
+ * @return jersey client
*/
- public void bindToAppmaster(WebResource appmaster) {
- Preconditions.checkArgument(appmaster != null, " Null appmaster");
- this.appmaster = appmaster;
- }
-
- public WebResource getAppmaster() {
- return appmaster;
+ public Client getClient() {
+ return client;
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/slider-core/src/main/java/org/apache/slider/client/rest/RestClientFactory.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/rest/RestClientFactory.java b/slider-core/src/main/java/org/apache/slider/client/rest/RestClientFactory.java
index 1b7553e..dc54ba3 100644
--- a/slider-core/src/main/java/org/apache/slider/client/rest/RestClientFactory.java
+++ b/slider-core/src/main/java/org/apache/slider/client/rest/RestClientFactory.java
@@ -25,6 +25,8 @@ import org.apache.slider.core.registry.info.CustomRegistryConstants;
import java.io.IOException;
+import static org.apache.slider.server.appmaster.web.rest.RestPaths.SLIDER_PATH_APPLICATION;
+
public class RestClientFactory {
private final RestClientRegistryBinder binder;
@@ -53,9 +55,28 @@ public class RestClientFactory {
CustomRegistryConstants.AM_REST_BASE);
return jerseyClient.resource(restAPI);
}
-
- public SliderApplicationAPI createSliderApplicationApi() throws IOException {
- return new SliderApplicationAPI(jerseyClient, locateAppmaster());
+
+ /**
+ * Locate the slider AM then instantiate a client instance against
+ * its Application API.
+ * @return the instance
+ * @throws IOException on any failure
+ */
+ public SliderApplicationApi createSliderAppApiClient() throws IOException {
+ WebResource appmaster = locateAppmaster();
+ return createSliderAppApiClient(appmaster);
+ }
+
+ /**
+ * Create a Slider application API client instance against
+ * its Application API.
+ * @param appmaster The AM to work against.
+ * @return the instance
+ * @throws IOException on any failure
+ */
+ public SliderApplicationApi createSliderAppApiClient(WebResource appmaster) {
+ WebResource appResource = appmaster.path(SLIDER_PATH_APPLICATION);
+ return new SliderApplicationApiImpl(jerseyClient, appResource);
}
-
+
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPI.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPI.java b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPI.java
deleted file mode 100644
index ee4760e..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPI.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * 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.client.rest;
-
-import com.google.common.base.Preconditions;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.GenericType;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.representation.Form;
-import org.apache.commons.lang.StringUtils;
-import org.apache.slider.api.types.ApplicationLivenessInformation;
-import org.apache.slider.api.types.ComponentInformation;
-import org.apache.slider.api.types.ContainerInformation;
-import org.apache.slider.core.conf.AggregateConf;
-import org.apache.slider.core.conf.ConfTree;
-import org.apache.slider.core.conf.ConfTreeOperations;
-import org.apache.slider.core.restclient.HttpVerb;
-import org.apache.slider.api.types.PingResource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.ws.rs.core.MediaType;
-import java.io.IOException;
-import java.util.Map;
-
-import static org.apache.slider.server.appmaster.web.rest.RestPaths.*;
-
-public class SliderApplicationAPI extends BaseRestClient {
- private static final Logger log =
- LoggerFactory.getLogger(SliderApplicationAPI.class);
- private WebResource appResource;
-
- public SliderApplicationAPI(Client jerseyClient, WebResource appmaster) {
- super(jerseyClient, appmaster);
- }
-
- /**
- * Bind/rebind to the AM
- * @param appmaster AM
- */
- public void bindToAppmaster(WebResource appmaster) {
- super.bindToAppmaster(appmaster);
- this.appResource = appmaster.path(SLIDER_PATH_APPLICATION);
- }
-
- /**
- * Create a resource under the application path set up to accept
- * JSON
- * @param subpath path under application
- * @return a resource under the application path
- */
- public WebResource applicationResource(String subpath) {
- Preconditions.checkArgument(!StringUtils.isEmpty(subpath),
- "empty path");
- Preconditions.checkNotNull(appResource, "Null app resource");
- WebResource resource = appResource.path(subpath);
- resource.accept(MediaType.APPLICATION_JSON_TYPE);
- return resource;
- }
-
- /**
- * Get operation against a path under the Application
- * @param <T> type expected
- * @param subpath path
- * @param c class to instantiate
- * @return instance
- * @throws IOException on any problem
- */
- public <T> T getApplicationResource(String subpath, Class<T> c)
- throws IOException {
- return appResourceOperation(HttpVerb.GET, subpath, c);
- }
-
- /**
- * Get operation against a path under the Application
- * @param <T> type expected
- * @param subpath path
- * @param t type info
- * @return instance
- * @throws IOException on any problem
- */
- public <T> T getApplicationResource(String subpath, GenericType<T> t)
- throws IOException {
- return appResourceOperation(HttpVerb.GET, subpath, t);
- }
-
- /**
- *
- * @param method method to exec
- * @param <T> type expected
- * @param subpath path
- * @param c class to instantiate
- * @return instance
- * @throws IOException on any problem
- */
- public <T> T appResourceOperation(HttpVerb method, String subpath, Class<T> c)
- throws IOException {
- WebResource resource = applicationResource(subpath);
- return exec(method, resource, c);
- }
-
-
- /**
- * Get operation against a path under the Application
- * @param <T> type expected
- * @param subpath path
- * @param t type info
- * @return instance
- * @throws IOException on any problem
- */
- public <T> T appResourceOperation(HttpVerb method, String subpath,
- GenericType<T> t)
- throws IOException {
- WebResource resource = applicationResource(subpath);
- return exec(method, resource, t);
- }
-
-
- /**
- * Get the aggregate desired model
- * @return the aggregate configuration of what was asked for
- * —before resolution has taken place
- * @throws IOException on any failure
- */
- public AggregateConf getDesiredModel() throws IOException {
- return getApplicationResource(MODEL_DESIRED, AggregateConf.class);
- }
-
- /**
- * Get the desired application configuration
- * @return the application configuration asked for
- * —before resolution has taken place
- * @throws IOException on any failure
- */
- public ConfTreeOperations getDesiredAppconf() throws IOException {
- ConfTree resource =
- getApplicationResource(MODEL_DESIRED_APPCONF, ConfTree.class);
- return new ConfTreeOperations(resource);
- }
-
- /**
- * Get the desired YARN resources
- * @return the resources asked for
- * —before resolution has taken place
- * @throws IOException on any failure
- */
- public ConfTreeOperations getDesiredYarnResources() throws IOException {
- ConfTree resource =
- getApplicationResource(MODEL_DESIRED_RESOURCES, ConfTree.class);
- return new ConfTreeOperations(resource);
- }
-
- /**
- * Get the aggregate resolved model
- * @return the aggregate configuration of what was asked for
- * —after resolution has taken place
- * @throws IOException on any failure
- */
- public AggregateConf getResolvedModel() throws IOException {
- return getApplicationResource(MODEL_RESOLVED, AggregateConf.class);
- }
-
-
- /**
- * Get the resolved application configuration
- * @return the application configuration asked for
- * —after resolution has taken place
- * @throws IOException on any failure
- */
- public ConfTreeOperations getResolvedAppconf() throws IOException {
- ConfTree resource =
- getApplicationResource(MODEL_RESOLVED_APPCONF, ConfTree.class);
- return new ConfTreeOperations(resource);
- }
-
- /**
- * Get the resolved YARN resources
- * @return the resources asked for
- * —after resolution has taken place
- * @throws IOException on any failure
- */
- public ConfTreeOperations getResolvedYarnResources() throws IOException {
- ConfTree resource =
- getApplicationResource(MODEL_RESOLVED_RESOURCES, ConfTree.class);
- return new ConfTreeOperations(resource);
- }
-
- /**
- * Get the live YARN resources
- * @return the live set of resources in the cluster
- * @throws IOException on any failure
- */
- public ConfTreeOperations getLiveYarnResources() throws IOException {
- ConfTree resource =
- getApplicationResource(LIVE_RESOURCES, ConfTree.class);
- return new ConfTreeOperations(resource);
- }
-
- /**
- * Get a map of live containers [containerId:info]
- * @return a possibly empty list of serialized containers
- * @throws IOException on any failure
- */
- public Map<String, ContainerInformation> enumContainers() throws
- IOException {
- return getApplicationResource(LIVE_CONTAINERS,
- new GenericType<Map<String, ContainerInformation>>() {
- });
- }
-
- /**
- * Get a container from the container Id
- * @param containerId YARN container ID
- * @return the container information
- * @throws IOException on any failure
- */
- public ContainerInformation getContainer( String containerId) throws
- IOException {
- return getApplicationResource(LIVE_CONTAINERS + "/" + containerId,
- ContainerInformation.class);
- }
-
- /**
- * List all components into a map of [name:info]
- * @return a possibly empty map of components
- * @throws IOException on any failure
- */
- public Map<String, ComponentInformation> enumComponents() throws
- IOException {
- return getApplicationResource(LIVE_COMPONENTS,
- new GenericType<Map<String, ComponentInformation>>() {
- });
- }
-
- /**
- * Get information about a component
- * @param componentName name of the component
- * @return the component details
- * @throws IOException on any failure
- */
- public ComponentInformation getComponent(String componentName) throws
- IOException {
- return getApplicationResource(LIVE_COMPONENTS + "/" + componentName,
- ComponentInformation.class);
- }
-
- /**
- * Ping as a GET
- * @param text text to include
- * @return the response
- * @throws IOException on any failure
- */
- public PingResource ping(String text) throws IOException {
- return pingPost(text);
- }
-
- /**
- * Ping as a GET
- * @param text text to include
- * @return the response
- * @throws IOException on any failure
- */
- public PingResource pingGet(String text) throws IOException {
- WebResource pingResource = applicationResource(ACTION_PING);
- pingResource.getUriBuilder().queryParam("body", text);
- return pingResource.get(PingResource.class);
- }
-
- /**
- * Ping as a POST
- * @param text text to include
- * @return the response
- * @throws IOException on any failure
- */
- public PingResource pingPost(String text) throws IOException {
- WebResource pingResource = applicationResource(ACTION_PING);
- pingResource.type(MediaType.APPLICATION_JSON_TYPE);
- Form f = new Form();
- f.add("text", text);
- return pingResource.post(PingResource.class, f);
- }
-
- /**
- * Stop the AM (async operation)
- * @param text text to include
- * @throws IOException on any failure
- */
- public void stop(String text) throws IOException {
- WebResource resource = applicationResource(ACTION_STOP);
- resource.post(text);
- }
-
- /**
- * Get the application liveness
- * @return current liveness information
- * @throws IOException
- */
- public ApplicationLivenessInformation getApplicationLiveness() throws IOException {
- return getApplicationResource(LIVE_LIVENESS,
- ApplicationLivenessInformation.class);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPIImpl.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPIImpl.java b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPIImpl.java
new file mode 100644
index 0000000..676d515
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationAPIImpl.java
@@ -0,0 +1,254 @@
+/*
+ * 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.client.rest;
+
+import com.google.common.base.Preconditions;
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.GenericType;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.representation.Form;
+import org.apache.commons.lang.StringUtils;
+import org.apache.slider.api.types.ApplicationLivenessInformation;
+import org.apache.slider.api.types.ComponentInformation;
+import org.apache.slider.api.types.ContainerInformation;
+import org.apache.slider.core.conf.AggregateConf;
+import org.apache.slider.core.conf.ConfTree;
+import org.apache.slider.core.conf.ConfTreeOperations;
+import org.apache.slider.core.restclient.HttpVerb;
+import org.apache.slider.api.types.PingResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.core.MediaType;
+import java.io.IOException;
+import java.util.Map;
+
+import static org.apache.slider.server.appmaster.web.rest.RestPaths.*;
+
+/**
+ * Implementation of the {@link SliderApplicationApi}
+ */
+public class SliderApplicationApiImpl extends BaseRestClient
+ implements SliderApplicationApi {
+ private static final Logger log =
+ LoggerFactory.getLogger(SliderApplicationApiImpl.class);
+ private WebResource appResource;
+
+ /**
+ * Create an instance
+ * @param jerseyClient jersey client for operations
+ * @param appResource resource of application API
+ */
+ public SliderApplicationApiImpl(Client jerseyClient, WebResource appResource) {
+ super(jerseyClient);
+ this.appResource = appResource;
+ }
+
+ /**
+ * Create a resource under the application path set up to accept
+ * JSON
+ * @param subpath path under application
+ * @return a resource under the application path
+ */
+ public WebResource applicationResource(String subpath) {
+ Preconditions.checkArgument(!StringUtils.isEmpty(subpath),
+ "empty path");
+ Preconditions.checkNotNull(appResource, "Null app resource");
+ WebResource resource = appResource.path(subpath);
+ resource.accept(MediaType.APPLICATION_JSON_TYPE);
+ return resource;
+ }
+
+ /**
+ * Get operation against a path under the Application
+ * @param <T> type expected
+ * @param subpath path
+ * @param c class to instantiate
+ * @return instance
+ * @throws IOException on any problem
+ */
+ public <T> T getApplicationResource(String subpath, Class<T> c)
+ throws IOException {
+ return appResourceOperation(HttpVerb.GET, subpath, c);
+ }
+
+ /**
+ * Get operation against a path under the Application
+ * @param <T> type expected
+ * @param subpath path
+ * @param t type info
+ * @return instance
+ * @throws IOException on any problem
+ */
+ public <T> T getApplicationResource(String subpath, GenericType<T> t)
+ throws IOException {
+ return appResourceOperation(HttpVerb.GET, subpath, t);
+ }
+
+ /**
+ *
+ * @param method method to exec
+ * @param <T> type expected
+ * @param subpath path
+ * @param c class to instantiate
+ * @return instance
+ * @throws IOException on any problem
+ */
+ public <T> T appResourceOperation(HttpVerb method, String subpath, Class<T> c)
+ throws IOException {
+ WebResource resource = applicationResource(subpath);
+ return exec(method, resource, c);
+ }
+
+
+ /**
+ * Get operation against a path under the Application
+ * @param <T> type expected
+ * @param subpath path
+ * @param t type info
+ * @return instance
+ * @throws IOException on any problem
+ */
+ public <T> T appResourceOperation(HttpVerb method, String subpath,
+ GenericType<T> t)
+ throws IOException {
+ WebResource resource = applicationResource(subpath);
+ return exec(method, resource, t);
+ }
+
+
+ @Override
+ public AggregateConf getDesiredModel() throws IOException {
+ return getApplicationResource(MODEL_DESIRED, AggregateConf.class);
+ }
+
+ @Override
+ public ConfTreeOperations getDesiredAppconf() throws IOException {
+ ConfTree resource =
+ getApplicationResource(MODEL_DESIRED_APPCONF, ConfTree.class);
+ return new ConfTreeOperations(resource);
+ }
+
+ @Override
+ public ConfTreeOperations getDesiredYarnResources() throws IOException {
+ ConfTree resource =
+ getApplicationResource(MODEL_DESIRED_RESOURCES, ConfTree.class);
+ return new ConfTreeOperations(resource);
+ }
+
+ @Override
+ public AggregateConf getResolvedModel() throws IOException {
+ return getApplicationResource(MODEL_RESOLVED, AggregateConf.class);
+ }
+
+
+ @Override
+ public ConfTreeOperations getResolvedAppconf() throws IOException {
+ ConfTree resource =
+ getApplicationResource(MODEL_RESOLVED_APPCONF, ConfTree.class);
+ return new ConfTreeOperations(resource);
+ }
+
+ @Override
+ public ConfTreeOperations getResolvedYarnResources() throws IOException {
+ ConfTree resource =
+ getApplicationResource(MODEL_RESOLVED_RESOURCES, ConfTree.class);
+ return new ConfTreeOperations(resource);
+ }
+
+ @Override
+ public ConfTreeOperations getLiveYarnResources() throws IOException {
+ ConfTree resource =
+ getApplicationResource(LIVE_RESOURCES, ConfTree.class);
+ return new ConfTreeOperations(resource);
+ }
+
+ @Override
+ public Map<String, ContainerInformation> enumContainers() throws
+ IOException {
+ return getApplicationResource(LIVE_CONTAINERS,
+ new GenericType<Map<String, ContainerInformation>>() {
+ });
+ }
+
+ @Override
+ public ContainerInformation getContainer(String containerId) throws
+ IOException {
+ return getApplicationResource(LIVE_CONTAINERS + "/" + containerId,
+ ContainerInformation.class);
+ }
+
+ @Override
+ public Map<String, ComponentInformation> enumComponents() throws
+ IOException {
+ return getApplicationResource(LIVE_COMPONENTS,
+ new GenericType<Map<String, ComponentInformation>>() {
+ });
+ }
+
+ @Override
+ public ComponentInformation getComponent(String componentName) throws
+ IOException {
+ return getApplicationResource(LIVE_COMPONENTS + "/" + componentName,
+ ComponentInformation.class);
+ }
+
+ @Override
+ public PingResource ping(String text) throws IOException {
+ return pingPost(text);
+ }
+
+ /**
+ * Ping as a GET
+ * @param text text to include
+ * @return the response
+ * @throws IOException on any failure
+ */
+ public PingResource pingGet(String text) throws IOException {
+ WebResource pingResource = applicationResource(ACTION_PING);
+ pingResource.getUriBuilder().queryParam("body", text);
+ return pingResource.get(PingResource.class);
+ }
+
+ /**
+ * Ping as a POST
+ * @param text text to include
+ * @return the response
+ * @throws IOException on any failure
+ */
+ public PingResource pingPost(String text) throws IOException {
+ WebResource pingResource = applicationResource(ACTION_PING);
+ pingResource.type(MediaType.APPLICATION_JSON_TYPE);
+ Form f = new Form();
+ f.add("text", text);
+ return pingResource.post(PingResource.class, f);
+ }
+
+ @Override
+ public void stop(String text) throws IOException {
+ WebResource resource = applicationResource(ACTION_STOP);
+ resource.post(text);
+ }
+
+ @Override
+ public ApplicationLivenessInformation getApplicationLiveness() throws IOException {
+ return getApplicationResource(LIVE_LIVENESS,
+ ApplicationLivenessInformation.class);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApi.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApi.java b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApi.java
new file mode 100644
index 0000000..eec201b
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApi.java
@@ -0,0 +1,145 @@
+/*
+ * 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.client.rest;
+
+import org.apache.slider.api.types.ApplicationLivenessInformation;
+import org.apache.slider.api.types.ComponentInformation;
+import org.apache.slider.api.types.ContainerInformation;
+import org.apache.slider.api.types.PingResource;
+import org.apache.slider.core.conf.AggregateConf;
+import org.apache.slider.core.conf.ConfTreeOperations;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * API exported by the slider client REST API
+ */
+public interface SliderApplicationApi {
+ /**
+ * Get the aggregate desired model
+ * @return the aggregate configuration of what was asked for
+ * —before resolution has taken place
+ * @throws IOException on any failure
+ */
+ AggregateConf getDesiredModel() throws IOException;
+
+ /**
+ * Get the desired application configuration
+ * @return the application configuration asked for
+ * —before resolution has taken place
+ * @throws IOException on any failure
+ */
+ ConfTreeOperations getDesiredAppconf() throws IOException;
+
+ /**
+ * Get the desired YARN resources
+ * @return the resources asked for
+ * —before resolution has taken place
+ * @throws IOException on any failure
+ */
+ ConfTreeOperations getDesiredYarnResources() throws IOException;
+
+ /**
+ * Get the aggregate resolved model
+ * @return the aggregate configuration of what was asked for
+ * —after resolution has taken place
+ * @throws IOException on any failure
+ */
+ AggregateConf getResolvedModel() throws IOException;
+
+ /**
+ * Get the resolved application configuration
+ * @return the application configuration asked for
+ * —after resolution has taken place
+ * @throws IOException on any failure
+ */
+ ConfTreeOperations getResolvedAppconf() throws IOException;
+
+ /**
+ * Get the resolved YARN resources
+ * @return the resources asked for
+ * —after resolution has taken place
+ * @throws IOException on any failure
+ */
+ ConfTreeOperations getResolvedYarnResources() throws IOException;
+
+ /**
+ * Get the live YARN resources
+ * @return the live set of resources in the cluster
+ * @throws IOException on any failure
+ */
+ ConfTreeOperations getLiveYarnResources() throws IOException;
+
+ /**
+ * Get a map of live containers [containerId:info]
+ * @return a possibly empty list of serialized containers
+ * @throws IOException on any failure
+ */
+ Map<String, ContainerInformation> enumContainers() throws
+ IOException;
+
+ /**
+ * Get a container from the container Id
+ * @param containerId YARN container ID
+ * @return the container information
+ * @throws IOException on any failure
+ */
+ ContainerInformation getContainer(String containerId) throws
+ IOException;
+
+ /**
+ * List all components into a map of [name:info]
+ * @return a possibly empty map of components
+ * @throws IOException on any failure
+ */
+ Map<String, ComponentInformation> enumComponents() throws
+ IOException;
+
+ /**
+ * Get information about a component
+ * @param componentName name of the component
+ * @return the component details
+ * @throws IOException on any failure
+ */
+ ComponentInformation getComponent(String componentName) throws
+ IOException;
+
+ /**
+ * Ping as a GET
+ * @param text text to include
+ * @return the response
+ * @throws IOException on any failure
+ */
+ PingResource ping(String text) throws IOException;
+
+ /**
+ * Stop the AM (async operation)
+ * @param text text to include
+ * @throws IOException on any failure
+ */
+ void stop(String text) throws IOException;
+
+ /**
+ * Get the application liveness
+ * @return current liveness information
+ * @throws IOException
+ */
+ ApplicationLivenessInformation getApplicationLiveness() throws IOException;
+}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy b/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
index 07c5ef0..3762d5d 100644
--- a/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/agent/rest/RestAPIClientTestDelegates.groovy
@@ -25,7 +25,7 @@ import groovy.util.logging.Slf4j
import org.apache.slider.api.StateValues
import org.apache.slider.api.types.ComponentInformation
import org.apache.slider.api.types.ContainerInformation
-import org.apache.slider.client.rest.SliderApplicationAPI
+import org.apache.slider.client.rest.SliderApplicationApiImpl
import org.apache.slider.core.conf.ConfTree
import org.apache.slider.core.conf.ConfTreeOperations
import org.apache.slider.server.appmaster.web.rest.application.ApplicationResource
@@ -40,7 +40,7 @@ import static org.apache.slider.server.appmaster.web.rest.RestPaths.*
/**
* Uses the Slider Application API for the tests.
- * {@link SliderApplicationAPI}
+ * {@link SliderApplicationApiImpl}
*/
@CompileStatic
@Slf4j
@@ -49,7 +49,7 @@ class RestAPIClientTestDelegates extends AbstractRestTestDelegate {
final String appmaster;
final String application;
final Client jersey;
- final SliderApplicationAPI appAPI;
+ final SliderApplicationApiImpl appAPI;
RestAPIClientTestDelegates(String appmaster, Client jersey,
@@ -60,7 +60,8 @@ class RestAPIClientTestDelegates extends AbstractRestTestDelegate {
application = appendToURL(appmaster, SLIDER_PATH_APPLICATION)
WebResource amResource = jersey.resource(appmaster)
amResource.type(MediaType.APPLICATION_JSON)
- appAPI = new SliderApplicationAPI(jersey, amResource)
+ def appResource = amResource.path(SLIDER_PATH_APPLICATION);
+ appAPI = new SliderApplicationApiImpl(jersey, appResource)
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/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 e210812..e4ce295 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
@@ -164,10 +164,13 @@ class TestStandaloneREST extends AgentMiniClusterTestBase {
ugiClient,
"~", SliderKeys.APP_TYPE,
clustername)
- def sliderApplicationApi = restClientFactory.createSliderApplicationApi();
+ def sliderApplicationApi = restClientFactory.createSliderAppApiClient();
sliderApplicationApi.desiredModel
sliderApplicationApi.resolvedModel
- sliderApplicationApi.ping("registry located")
+
+ if (directComplexVerbs) {
+ sliderApplicationApi.ping("registry located")
+ }
// log the metrics to show what's up
direct.logCodahaleMetrics();
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7f2e0c2d/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
----------------------------------------------------------------------
diff --git a/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
index a364e63..33d45ed 100644
--- a/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
+++ b/slider-funtest/src/test/groovy/org/apache/slider/funtest/lifecycle/AgentWebPagesIT.groovy
@@ -173,7 +173,7 @@ public class AgentWebPagesIT extends AgentCommandTestBase
def restClientFactory = new RestClientFactory(
operations, ugiClient,
"~", SliderKeys.APP_TYPE, CLUSTER)
- def sliderApplicationApi = restClientFactory.createSliderApplicationApi();
+ def sliderApplicationApi = restClientFactory.createSliderAppApiClient();
sliderApplicationApi.desiredModel
sliderApplicationApi.resolvedModel
if (proxyComplexVerbs) {