You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by go...@apache.org on 2016/08/25 20:20:07 UTC
[38/46] incubator-slider git commit: SLIDER-1165 Create
yarn-native-services branch on Slider corresponding to the
yarn-native-services branch on Hadoop
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java b/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java
deleted file mode 100644
index 30f6ba9..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java
+++ /dev/null
@@ -1,368 +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;
-
-import org.apache.hadoop.registry.client.api.RegistryOperations;
-import org.apache.hadoop.service.Service;
-import org.apache.hadoop.yarn.api.records.ApplicationReport;
-import org.apache.hadoop.yarn.api.records.YarnApplicationState;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.slider.api.types.NodeInformationList;
-import org.apache.slider.api.types.SliderInstanceDescription;
-import org.apache.slider.common.params.AbstractClusterBuildingActionArgs;
-import org.apache.slider.common.params.ActionAMSuicideArgs;
-import org.apache.slider.common.params.ActionClientArgs;
-import org.apache.slider.common.params.ActionDependencyArgs;
-import org.apache.slider.common.params.ActionDestroyArgs;
-import org.apache.slider.common.params.ActionDiagnosticArgs;
-import org.apache.slider.common.params.ActionEchoArgs;
-import org.apache.slider.common.params.ActionFlexArgs;
-import org.apache.slider.common.params.ActionFreezeArgs;
-import org.apache.slider.common.params.ActionInstallKeytabArgs;
-import org.apache.slider.common.params.ActionInstallPackageArgs;
-import org.apache.slider.common.params.ActionKeytabArgs;
-import org.apache.slider.common.params.ActionNodesArgs;
-import org.apache.slider.common.params.ActionPackageArgs;
-import org.apache.slider.common.params.ActionKillContainerArgs;
-import org.apache.slider.common.params.ActionListArgs;
-import org.apache.slider.common.params.ActionRegistryArgs;
-import org.apache.slider.common.params.ActionResolveArgs;
-import org.apache.slider.common.params.ActionResourceArgs;
-import org.apache.slider.common.params.ActionStatusArgs;
-import org.apache.slider.common.params.ActionThawArgs;
-import org.apache.slider.common.params.ActionUpgradeArgs;
-import org.apache.slider.core.exceptions.BadCommandArgumentsException;
-import org.apache.slider.core.exceptions.SliderException;
-import org.apache.slider.providers.AbstractClientProvider;
-
-import java.io.IOException;
-import java.util.Map;
-
-/**
- * Interface of those method calls in the slider API that are intended
- * for direct public invocation.
- * <p>
- * Stability: evolving
- */
-public interface SliderClientAPI extends Service {
- /**
- * Destroy a cluster. There's two race conditions here
- * #1 the cluster is started between verifying that there are no live
- * clusters of that name.
- */
- int actionDestroy(String clustername, ActionDestroyArgs destroyArgs)
- throws YarnException, IOException;
-
- int actionDestroy(String clustername) throws YarnException,
- IOException;
-
- /**
- * AM to commit an asynchronous suicide
- */
- int actionAmSuicide(String clustername,
- ActionAMSuicideArgs args) throws YarnException, IOException;
-
- /**
- * Get the provider for this cluster
- * @param provider the name of the provider
- * @return the provider instance
- * @throws SliderException problems building the provider
- */
- AbstractClientProvider createClientProvider(String provider)
- throws SliderException;
-
- /**
- * Build up the cluster specification/directory
- *
- * @param clustername cluster name
- * @param buildInfo the arguments needed to build the cluster
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- * @throws BadCommandArgumentsException bad arguments.
- */
- int actionBuild(String clustername,
- AbstractClusterBuildingActionArgs buildInfo) throws YarnException, IOException;
-
- /**
- * Upload keytab to a designated sub-directory of the user home directory
- *
- * @param installKeytabInfo the arguments needed to upload the keytab
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- * @throws BadCommandArgumentsException bad arguments.
- * @deprecated use #actionKeytab
- */
- int actionInstallKeytab(ActionInstallKeytabArgs installKeytabInfo)
- throws YarnException, IOException;
-
- /**
- * Manage keytabs leveraged by slider
- *
- * @param keytabInfo the arguments needed to manage the keytab
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- * @throws BadCommandArgumentsException bad arguments.
- */
- int actionKeytab(ActionKeytabArgs keytabInfo)
- throws YarnException, IOException;
-
- /**
- * Upload application package to user home directory
- *
- * @param installPkgInfo the arguments needed to upload the package
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- * @throws BadCommandArgumentsException bad arguments.
- */
- int actionInstallPkg(ActionInstallPackageArgs installPkgInfo)
- throws YarnException, IOException;
-
- /**
- * Manage file resources leveraged by slider
- *
- * @param resourceInfo the arguments needed to manage the resource
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- * @throws BadCommandArgumentsException bad arguments.
- */
- int actionResource(ActionResourceArgs resourceInfo)
- throws YarnException, IOException;
-
- /**
- * Perform client operations such as install or configure
- *
- * @param clientInfo the arguments needed for client operations
- *
- * @throws SliderException bad arguments.
- * @throws IOException problems related to package and destination folders
- */
- int actionClient(ActionClientArgs clientInfo)
- throws IOException, YarnException;
-
- /**
- * Managing slider application package
- *
- * @param pkgInfo the arguments needed to upload, delete or list the package
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- * @throws BadCommandArgumentsException bad arguments.
- */
- int actionPackage(ActionPackageArgs pkgInfo)
- throws YarnException, IOException;
-
- /**
- * Update the cluster specification
- *
- * @param clustername cluster name
- * @param buildInfo the arguments needed to update the cluster
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- */
- int actionUpdate(String clustername,
- AbstractClusterBuildingActionArgs buildInfo)
- throws YarnException, IOException;
-
- /**
- * Upgrade the cluster with a newer version of the application
- *
- * @param clustername cluster name
- * @param buildInfo the arguments needed to upgrade the cluster
- * @throws YarnException Yarn problems
- * @throws IOException other problems
- */
- int actionUpgrade(String clustername,
- ActionUpgradeArgs buildInfo)
- throws YarnException, IOException;
-
- /**
- * Get the report of a this application
- * @return the app report or null if it could not be found.
- * @throws IOException
- * @throws YarnException
- */
- ApplicationReport getApplicationReport()
- throws IOException, YarnException;
-
- /**
- * Kill the submitted application via YARN
- * @throws YarnException
- * @throws IOException
- */
- boolean forceKillApplication(String reason)
- throws YarnException, IOException;
-
- /**
- * Implement the list action: list all nodes
- * @return exit code of 0 if a list was created
- */
- int actionList(String clustername, ActionListArgs args) throws IOException, YarnException;
-
- /**
- * Enumerate slider instances for the current user, and the
- * most recent app report, where available.
- * @param listOnlyInState boolean to indicate that the instances should
- * only include those in a YARN state
- * <code> minAppState <= currentState <= maxAppState </code>
- *
- * @param minAppState minimum application state to include in enumeration.
- * @param maxAppState maximum application state to include
- * @return a map of application instance name to description
- * @throws IOException Any IO problem
- * @throws YarnException YARN problems
- */
- Map<String, SliderInstanceDescription> enumSliderInstances(
- boolean listOnlyInState,
- YarnApplicationState minAppState,
- YarnApplicationState maxAppState)
- throws IOException, YarnException;
-
- /**
- * Implement the islive action: probe for a cluster of the given name existing
- * @return exit code
- */
- int actionFlex(String name, ActionFlexArgs args) throws YarnException, IOException;
-
- /**
- * Test for a cluster existing probe for a cluster of the given name existing
- * in the filesystem. If the live param is set, it must be a live cluster
- * @return exit code
- */
- int actionExists(String name, boolean checkLive) throws YarnException, IOException;
-
- /**
- * Kill a specific container of the cluster
- * @param name cluster name
- * @param args arguments
- * @return exit code
- * @throws YarnException
- * @throws IOException
- */
- int actionKillContainer(String name, ActionKillContainerArgs args)
- throws YarnException, IOException;
-
- /**
- * Echo operation (not currently wired up to command line)
- * @param name cluster name
- * @param args arguments
- * @return the echoed text
- * @throws YarnException
- * @throws IOException
- */
- String actionEcho(String name, ActionEchoArgs args)
- throws YarnException, IOException;
-
- /**
- * Status operation
- *
- * @param clustername cluster name
- * @param statusArgs status arguments
- * @return 0 -for success, else an exception is thrown
- * @throws YarnException
- * @throws IOException
- */
- int actionStatus(String clustername, ActionStatusArgs statusArgs)
- throws YarnException, IOException;
-
- /**
- * Version Details
- * @return exit code
- */
- int actionVersion();
-
- /**
- * Stop the cluster
- *
- * @param clustername cluster name
- * @param freezeArgs arguments to the stop
- * @return EXIT_SUCCESS if the cluster was not running by the end of the operation
- */
- int actionFreeze(String clustername, ActionFreezeArgs freezeArgs)
- throws YarnException, IOException;
-
- /**
- * Restore a cluster
- */
- int actionThaw(String clustername, ActionThawArgs thaw) throws YarnException, IOException;
-
- /**
- * Registry operation
- *
- * @param args registry Arguments
- * @return 0 for success, -1 for some issues that aren't errors, just failures
- * to retrieve information (e.g. no configurations for that entry)
- * @throws YarnException YARN problems
- * @throws IOException Network or other problems
- */
- int actionResolve(ActionResolveArgs args)
- throws YarnException, IOException;
-
- /**
- * Registry operation
- *
- * @param registryArgs registry Arguments
- * @return 0 for success, -1 for some issues that aren't errors, just failures
- * to retrieve information (e.g. no configurations for that entry)
- * @throws YarnException YARN problems
- * @throws IOException Network or other problems
- */
- int actionRegistry(ActionRegistryArgs registryArgs)
- throws YarnException, IOException;
-
- /**
- * diagnostic operation
- *
- * @param diagnosticArgs diagnostic Arguments
- * @return 0 for success, -1 for some issues that aren't errors, just
- * failures to retrieve information (e.g. no application name
- * specified)
- * @throws YarnException YARN problems
- * @throws IOException Network or other problems
- */
- int actionDiagnostic(ActionDiagnosticArgs diagnosticArgs);
-
- /**
- * Get the registry binding. As this may start the registry, it can take time
- * and fail
- * @return the registry
- */
- RegistryOperations getRegistryOperations()
- throws SliderException, IOException;
-
- /**
- * Upload all Slider AM and agent dependency libraries to HDFS, so that they
- * do not need to be uploaded with every create call. This operation is
- * Slider version specific. So it needs to be invoked for every single
- * version of slider/slider-client.
- *
- * @throws SliderException
- * @throws IOException
- */
- int actionDependency(ActionDependencyArgs dependencyArgs) throws IOException,
- YarnException;
-
- /**
- * List the nodes
- * @param args
- * @return
- * @throws YarnException
- * @throws IOException
- */
- NodeInformationList listYarnClusterNodes(ActionNodesArgs args)
- throws YarnException, IOException;
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/slider-core/src/main/java/org/apache/slider/client/SliderYarnClientImpl.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/SliderYarnClientImpl.java b/slider-core/src/main/java/org/apache/slider/client/SliderYarnClientImpl.java
deleted file mode 100644
index d471cdb..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/SliderYarnClientImpl.java
+++ /dev/null
@@ -1,410 +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;
-
-import com.google.common.base.Preconditions;
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
-import org.apache.hadoop.yarn.api.protocolrecords.KillApplicationRequest;
-import org.apache.hadoop.yarn.api.protocolrecords.KillApplicationResponse;
-import org.apache.hadoop.yarn.api.records.ApplicationId;
-import org.apache.hadoop.yarn.api.records.ApplicationReport;
-import org.apache.hadoop.yarn.api.records.NodeReport;
-import org.apache.hadoop.yarn.api.records.NodeState;
-import org.apache.hadoop.yarn.api.records.YarnApplicationState;
-import org.apache.hadoop.yarn.client.api.impl.YarnClientImpl;
-import org.apache.hadoop.yarn.conf.YarnConfiguration;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.hadoop.yarn.util.ConverterUtils;
-import org.apache.hadoop.yarn.util.Records;
-import org.apache.slider.api.types.NodeInformation;
-import org.apache.slider.api.types.NodeInformationList;
-import org.apache.slider.common.SliderKeys;
-import org.apache.slider.common.params.ActionNodesArgs;
-import org.apache.slider.common.tools.CoreFileSystem;
-import org.apache.slider.common.tools.Duration;
-import org.apache.slider.common.tools.SliderFileSystem;
-import org.apache.slider.common.tools.SliderUtils;
-import org.apache.slider.core.exceptions.BadCommandArgumentsException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.BindException;
-import java.net.InetSocketAddress;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A class that extends visibility to some of the YarnClientImpl
- * members and data structures, and factors out pure-YARN operations
- * from the slider entry point service
- */
-public class SliderYarnClientImpl extends YarnClientImpl {
- protected static final Logger log = LoggerFactory.getLogger(SliderYarnClientImpl.class);
-
- /**
- * Keyword to use in the {@link #emergencyForceKill(String)}
- * operation to force kill <i>all</i> application instances belonging
- * to a specific user
- */
- public static final String KILL_ALL = "all";
-
- @Override
- protected void serviceInit(Configuration conf) throws Exception {
- InetSocketAddress clientRpcAddress = SliderUtils.getRmAddress(conf);
- if (!SliderUtils.isAddressDefined(clientRpcAddress)) {
- // address isn't known; fail fast
- throw new BindException("Invalid " + YarnConfiguration.RM_ADDRESS
- + " value:" + conf.get(YarnConfiguration.RM_ADDRESS)
- + " - see https://wiki.apache.org/hadoop/UnsetHostnameOrPort");
- }
- super.serviceInit(conf);
- }
-
- /**
- * Get the RM Client RPC interface
- * @return an RPC interface valid after initialization and authentication
- */
- public ApplicationClientProtocol getRmClient() {
- return rmClient;
- }
-
- /**
- * List Slider <i>running</i>instances belonging to a specific user.
- * @deprecated use {@link #listDeployedInstances(String)}
- * @param user user: "" means all users
- * @return a possibly empty list of Slider AMs
- */
- public List<ApplicationReport> listInstances(String user)
- throws YarnException, IOException {
- return listDeployedInstances(user);
- }
-
- /**
- * List Slider <i>deployed</i>instances belonging to a specific user.
- * <p>
- * Deployed means: known about in the YARN cluster; it will include
- * any that are in the failed/finished state, as well as those queued
- * for starting.
- * @param user user: "" means all users
- * @return a possibly empty list of Slider AMs
- */
- public List<ApplicationReport> listDeployedInstances(String user)
- throws YarnException, IOException {
- Preconditions.checkArgument(user != null, "Null User");
- Set<String> types = new HashSet<>(1);
- types.add(SliderKeys.APP_TYPE);
- List<ApplicationReport> allApps = getApplications(types);
- List<ApplicationReport> results = new ArrayList<>();
- for (ApplicationReport report : allApps) {
- if (StringUtils.isEmpty(user) || user.equals(report.getUser())) {
- results.add(report);
- }
- }
- return results;
- }
-
- /**
- * find all instances of a specific app -if there is more than one in the
- * YARN cluster,
- * this returns them all
- * @param user user; use "" for all users
- * @param appname application name
- * @return the list of all matching application instances
- */
- public List<ApplicationReport> findAllInstances(String user,
- String appname)
- throws IOException, YarnException {
- Preconditions.checkArgument(appname != null, "Null application name");
-
- List<ApplicationReport> instances = listDeployedInstances(user);
- List<ApplicationReport> results =
- new ArrayList<>(instances.size());
- for (ApplicationReport report : instances) {
- if (report.getName().equals(appname)) {
- results.add(report);
- }
- }
- return results;
- }
-
- /**
- * Helper method to determine if a cluster application is running -or
- * is earlier in the lifecycle
- * @param app application report
- * @return true if the application is considered live
- */
- public boolean isApplicationLive(ApplicationReport app) {
- Preconditions.checkArgument(app != null, "Null app report");
-
- return app.getYarnApplicationState().ordinal() <= YarnApplicationState.RUNNING.ordinal();
- }
-
-
- /**
- * Kill a running application
- * @param applicationId app Id
- * @param reason reason: reason for log
- * @return the response
- * @throws YarnException YARN problems
- * @throws IOException IO problems
- */
- public KillApplicationResponse killRunningApplication(ApplicationId applicationId,
- String reason)
- throws YarnException, IOException {
- Preconditions.checkArgument(applicationId != null, "Null application Id");
- log.info("Killing application {} - {}", applicationId.getClusterTimestamp(),
- reason);
- KillApplicationRequest request =
- Records.newRecord(KillApplicationRequest.class);
- request.setApplicationId(applicationId);
- return getRmClient().forceKillApplication(request);
- }
-
- private String getUsername() throws IOException {
- return UserGroupInformation.getCurrentUser().getShortUserName();
- }
-
- /**
- * Force kill a yarn application by ID. No niceties here
- * @param applicationId app Id. "all" means "kill all instances of the current user
- *
- */
- public void emergencyForceKill(String applicationId)
- throws YarnException, IOException {
-
- Preconditions.checkArgument(StringUtils.isNotEmpty(applicationId),
- "Null/empty application Id");
-
- if (KILL_ALL.equals(applicationId)) {
- // user wants all instances killed
- String user = getUsername();
- log.info("Killing all applications belonging to {}", user);
- Collection<ApplicationReport> instances = listDeployedInstances(user);
- for (ApplicationReport instance : instances) {
- if (isApplicationLive(instance)) {
- ApplicationId appId = instance.getApplicationId();
- log.info("Killing Application {}", appId);
-
- killRunningApplication(appId, "forced kill");
- }
- }
- } else {
- ApplicationId appId = ConverterUtils.toApplicationId(applicationId);
-
- log.info("Killing Application {}", applicationId);
-
- killRunningApplication(appId, "forced kill");
- }
- }
-
- /**
- * Monitor the submitted application for reaching the requested state.
- * Will also report if the app reaches a later state (failed, killed, etc)
- * Kill application if duration!= null & time expires.
- * @param appId Application Id of application to be monitored
- * @param duration how long to wait -must be more than 0
- * @param desiredState desired state.
- * @return the application report -null on a timeout
- * @throws YarnException
- * @throws IOException
- */
- public ApplicationReport monitorAppToState(
- ApplicationId appId, YarnApplicationState desiredState, Duration duration)
- throws YarnException, IOException {
-
- if (appId == null) {
- throw new BadCommandArgumentsException("null application ID");
- }
- if (duration.limit <= 0) {
- throw new BadCommandArgumentsException("Invalid monitoring duration");
- }
- log.debug("Waiting {} millis for app to reach state {} ",
- duration.limit,
- desiredState);
- duration.start();
- try {
- while (true) {
- // Get application report for the appId we are interested in
-
- ApplicationReport r = getApplicationReport(appId);
-
- log.debug("queried status is\n{}",
- new SliderUtils.OnDemandReportStringifier(r));
-
- YarnApplicationState state = r.getYarnApplicationState();
- if (state.ordinal() >= desiredState.ordinal()) {
- log.debug("App in desired state (or higher) :{}", state);
- return r;
- }
- if (duration.getLimitExceeded()) {
- log.debug(
- "Wait limit of {} millis to get to state {}, exceeded; app status\n {}",
- duration.limit,
- desiredState,
- new SliderUtils.OnDemandReportStringifier(r));
- return null;
- }
-
- // sleep 1s.
- try {
- Thread.sleep(1000);
- } catch (InterruptedException ignored) {
- log.debug("Thread sleep in monitoring loop interrupted");
- }
- }
- } finally {
- duration.close();
- }
- }
-
- /**
- * find all live instances of a specific app -if there is >1 in the cluster,
- * this returns them all. State should be running or less
- * @param user user
- * @param appname application name
- * @return the list of all matching application instances
- */
- public List<ApplicationReport> findAllLiveInstances(String user,
- String appname) throws
- YarnException,
- IOException {
- Preconditions.checkArgument(StringUtils.isNotEmpty(appname),
- "Null/empty application name");
- List<ApplicationReport> instances = listDeployedInstances(user);
- List<ApplicationReport> results =
- new ArrayList<ApplicationReport>(instances.size());
- for (ApplicationReport app : instances) {
- if (app.getName().equals(appname)
- && isApplicationLive(app)) {
- results.add(app);
- }
- }
- return results;
- }
-
- /**
- * Find a cluster in the instance list; biased towards live instances
- * @param instances list of instances
- * @param appname application name
- * @return the first found instance, else a failed/finished instance, or null
- * if there are none of those
- */
- public ApplicationReport findClusterInInstanceList(List<ApplicationReport> instances,
- String appname) {
- Preconditions.checkArgument(instances != null, "Null instances list");
- Preconditions.checkArgument(StringUtils.isNotEmpty(appname),
- "Null/empty application name");
- // sort by most recent
- SliderUtils.sortApplicationsByMostRecent(instances);
- ApplicationReport found = null;
- for (ApplicationReport app : instances) {
- if (app.getName().equals(appname)) {
- if (isApplicationLive(app)) {
- return app;
- }
- // set the found value if not set
- found = found != null ? found : app;
- }
- }
- return found;
- }
-
- /**
- * Find an app in the instance list in the desired state
- * @param instances instance list
- * @param appname application name
- * @param desiredState yarn state desired
- * @return the match or null for none
- */
- public ApplicationReport findAppInInstanceList(List<ApplicationReport> instances,
- String appname,
- YarnApplicationState desiredState) {
- Preconditions.checkArgument(instances != null, "Null instances list");
- Preconditions.checkArgument(StringUtils.isNotEmpty(appname),
- "Null/empty application name");
- Preconditions.checkArgument(desiredState != null, "Null desiredState");
- log.debug("Searching {} records for instance name {} in state '{}'",
- instances.size(), appname, desiredState);
- for (ApplicationReport app : instances) {
- if (app.getName().equals(appname)) {
-
- YarnApplicationState appstate =
- app.getYarnApplicationState();
- log.debug("app ID {} is in state {}", app.getApplicationId(), appstate);
- if (appstate.equals(desiredState)) {
- log.debug("match");
- return app;
- }
- }
- }
- // nothing found in desired state
- log.debug("No match");
- return null;
- }
-
- /**
- * List the nodes in the cluster, possibly filtering by node state or label.
- *
- * @param label label to filter by -or "" for any
- * @param live flag to request running nodes only
- * @return a possibly empty list of nodes in the cluster
- * @throws IOException IO problems
- * @throws YarnException YARN problems
- */
- public NodeInformationList listNodes(String label, boolean live)
- throws IOException, YarnException {
- Preconditions.checkArgument(label != null, "null label");
- NodeState[] states;
- if (live) {
- states = new NodeState[1];
- states[0] = NodeState.RUNNING;
- } else {
- states = new NodeState[0];
- }
- List<NodeReport> reports = getNodeReports(states);
- NodeInformationList results = new NodeInformationList(reports.size());
- for (NodeReport report : reports) {
- if (live && report.getNodeState() != NodeState.RUNNING) {
- continue;
- }
- if (!label.isEmpty() && !report.getNodeLabels().contains(label)) {
- continue;
- }
- // build node info from report
- NodeInformation info = new NodeInformation();
- info.hostname = report.getNodeId().getHost();
- info.healthReport = report.getHealthReport();
- info.httpAddress = report.getHttpAddress();
- info.labels = SliderUtils.extractNodeLabel(report);
- info.rackName = report.getRackName();
- info.state = report.getNodeState().toString();
- results.add(info);
- }
- return results;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/slider-core/src/main/java/org/apache/slider/client/TokensOperation.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/TokensOperation.java b/slider-core/src/main/java/org/apache/slider/client/TokensOperation.java
deleted file mode 100644
index 9b9c141..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/TokensOperation.java
+++ /dev/null
@@ -1,109 +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;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.security.Credentials;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.yarn.client.api.impl.YarnClientImpl;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.slider.common.params.ActionTokensArgs;
-import org.apache.slider.core.exceptions.BadClusterStateException;
-import org.apache.slider.core.exceptions.NotFoundException;
-import static org.apache.slider.core.launch.CredentialUtils.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.IOException;
-
-public class TokensOperation {
-
- private static final Logger log = LoggerFactory.getLogger(TokensOperation.class);
- public static final String E_INSECURE
- = "Cluster is not secure -tokens cannot be acquired";
- public static final String E_MISSING_SOURCE_FILE = "Missing source file: ";
- public static final String E_NO_KEYTAB = "No keytab: ";
-
- public int actionTokens(ActionTokensArgs args, FileSystem fs,
- Configuration conf,
- YarnClientImpl yarnClient)
- throws IOException, YarnException {
- Credentials credentials;
- String footnote = "";
- UserGroupInformation user = UserGroupInformation.getCurrentUser();
- boolean isSecure = UserGroupInformation.isSecurityEnabled();
- if (args.keytab != null) {
- File keytab = args.keytab;
- if (!keytab.isFile()) {
- throw new NotFoundException(E_NO_KEYTAB + keytab.getAbsolutePath());
- }
- String principal = args.principal;
- log.info("Logging in as {} from keytab {}", principal, keytab);
- user = UserGroupInformation.loginUserFromKeytabAndReturnUGI(
- principal, keytab.getCanonicalPath());
- }
- Credentials userCredentials = user.getCredentials();
- File output = args.output;
- if (output != null) {
- if (!isSecure) {
- throw new BadClusterStateException(E_INSECURE);
- }
- credentials = new Credentials(userCredentials);
- // filesystem
- addRMRenewableFSDelegationTokens(conf, fs, credentials);
- addRMDelegationToken(yarnClient, credentials);
- if (maybeAddTimelineToken(conf, credentials) != null) {
- log.debug("Added timeline token");
- }
- saveTokens(output, credentials);
- String filename = output.getCanonicalPath();
- footnote = String.format("%d tokens saved to %s\n" +
- "To use these in the environment:\n" +
- "export %s=%s",
- credentials.numberOfTokens(),
- filename, UserGroupInformation.HADOOP_TOKEN_FILE_LOCATION, filename);
- } else if (args.source != null) {
- File source = args.source;
- log.info("Reading credentials from file {}", source);
- if (!source.isFile()) {
- throw new NotFoundException( E_MISSING_SOURCE_FILE + source.getAbsolutePath());
- }
- credentials = Credentials.readTokenStorageFile(args.source, conf);
- } else {
- StringBuffer origin = new StringBuffer();
- File file = locateEnvCredentials(System.getenv(), conf,
- origin);
- if (file != null) {
- log.info("Credential Source {}", origin);
- } else {
- log.info("Credential source: logged in user");
- }
- credentials = userCredentials;
- }
- // list the tokens
- log.info("\n{}", dumpTokens(credentials, "\n"));
- if (!footnote.isEmpty()) {
- log.info(footnote);
- }
- return 0;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java
deleted file mode 100644
index a007326..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderApplicationIpcClient.java
+++ /dev/null
@@ -1,245 +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.ipc;
-
-import com.google.common.base.Preconditions;
-import org.apache.slider.api.SliderClusterProtocol;
-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.NodeInformation;
-import org.apache.slider.api.types.NodeInformationList;
-import org.apache.slider.api.types.PingInformation;
-import org.apache.slider.api.SliderApplicationApi;
-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.exceptions.NoSuchNodeException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Map;
-
-/**
- * Implementation of the Slider RESTy Application API over IPC.
- * <p>
- * Operations are executed via the {@link SliderClusterOperations}
- * instance passed in; raised exceptions may be converted into ones
- * consistent with the REST API.
- */
-public class SliderApplicationIpcClient implements SliderApplicationApi {
-
- private static final Logger log =
- LoggerFactory.getLogger(SliderApplicationIpcClient.class);
-
- private final SliderClusterOperations operations;
-
- public SliderApplicationIpcClient(SliderClusterOperations operations) {
- Preconditions.checkArgument(operations != null, "null operations");
- this.operations = operations;
- }
-
- /**
- * Convert received (And potentially unmarshalled) local/remote
- * exceptions into the equivalents in the REST API.
- * Best effort.
- * <p>
- * If there is no translation, the original exception is returned.
- * <p>
- * If a new exception was created, it will have the message of the
- * string value of the original exception, and that original
- * exception will be the nested cause of this one
- * @param exception IOException to convert
- * @return an exception to throw
- */
- private IOException convert(IOException exception) {
- IOException result = exception;
- if (exception instanceof NoSuchNodeException) {
- result = new FileNotFoundException(exception.toString());
- result.initCause(exception);
- } else {
- // TODO: remap any other exceptions
- }
- return result;
- }
-
- public SliderApplicationIpcClient(SliderClusterProtocol proxy) {
- this(new SliderClusterOperations(proxy));
- }
-
- @Override
- public AggregateConf getDesiredModel() throws IOException {
- try {
- return operations.getModelDesired();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ConfTreeOperations getDesiredAppconf() throws IOException {
- try {
- return operations.getModelDesiredAppconf();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ConfTreeOperations getDesiredResources() throws IOException {
- try {
- return operations.getModelDesiredResources();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
-
- @Override
- public void putDesiredResources(ConfTree updated) throws IOException {
- try {
- operations.flex(updated);
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
-
- @Override
- public AggregateConf getResolvedModel() throws IOException {
- try {
- return operations.getModelResolved();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ConfTreeOperations getResolvedAppconf() throws IOException {
- try {
- return operations.getModelResolvedAppconf();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ConfTreeOperations getResolvedResources() throws IOException {
- try {
- return operations.getModelResolvedResources();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ConfTreeOperations getLiveResources() throws IOException {
- try {
- return operations.getLiveResources();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public Map<String, ContainerInformation> enumContainers() throws IOException {
- try {
- return operations.enumContainers();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ContainerInformation getContainer(String containerId) throws
- IOException {
- try {
- return operations.getContainer(containerId);
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public Map<String, ComponentInformation> enumComponents() throws IOException {
- try {
- return operations.enumComponents();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ComponentInformation getComponent(String componentName) throws IOException {
- try {
- return operations.getComponent(componentName);
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public NodeInformationList getLiveNodes() throws IOException {
- try {
- return operations.getLiveNodes();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public NodeInformation getLiveNode(String hostname) throws IOException {
- try {
- return operations.getLiveNode(hostname);
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public PingInformation ping(String text) throws IOException {
- return null;
- }
-
- @Override
- public void stop(String text) throws IOException {
- try {
- operations.stop(text);
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public ApplicationLivenessInformation getApplicationLiveness() throws
- IOException {
- try {
- return operations.getApplicationLiveness();
- } catch (IOException e) {
- throw convert(e);
- }
- }
-
- @Override
- public String toString() {
- return "IPC implementation of SliderApplicationApi bonded to " + operations;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java
deleted file mode 100644
index 392f451..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java
+++ /dev/null
@@ -1,529 +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.ipc;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.yarn.api.records.NodeReport;
-import org.apache.hadoop.yarn.api.records.NodeState;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.slider.api.ClusterDescription;
-import org.apache.slider.api.ClusterNode;
-import org.apache.slider.api.SliderClusterProtocol;
-import org.apache.slider.api.StateValues;
-import org.apache.slider.api.proto.Messages;
-
-import static org.apache.slider.api.proto.RestTypeMarshalling.*;
-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.NodeInformation;
-import org.apache.slider.api.types.NodeInformationList;
-import org.apache.slider.api.types.PingInformation;
-import org.apache.slider.common.tools.Duration;
-import org.apache.slider.common.tools.SliderUtils;
-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.exceptions.NoSuchNodeException;
-import org.apache.slider.core.exceptions.SliderException;
-import org.apache.slider.core.exceptions.WaitTimeoutException;
-import org.apache.slider.core.persist.ConfTreeSerDeser;
-import org.apache.slider.server.services.security.SecurityStore;
-import org.apache.slider.server.services.security.SignCertResponse;
-import org.codehaus.jackson.JsonParseException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Cluster operations at a slightly higher level than the RPC code
- */
-public class SliderClusterOperations {
- protected static final Logger
- log = LoggerFactory.getLogger(SliderClusterOperations.class);
-
- private final SliderClusterProtocol appMaster;
- private static final Messages.EmptyPayloadProto EMPTY;
- static {
- EMPTY = Messages.EmptyPayloadProto.newBuilder().build();
- }
-
- public SliderClusterOperations(SliderClusterProtocol appMaster) {
- this.appMaster = appMaster;
- }
-
- @Override
- public String toString() {
- final StringBuilder sb =
- new StringBuilder("SliderClusterOperations{");
- sb.append("IPC binding=").append(appMaster);
- sb.append('}');
- return sb.toString();
- }
-
- /**
- * Get a node from the AM
- * @param uuid uuid of node
- * @return deserialized node
- * @throws IOException IO problems
- * @throws NoSuchNodeException if the node isn't found
- */
- public ClusterNode getNode(String uuid)
- throws IOException, NoSuchNodeException, YarnException {
- Messages.GetNodeRequestProto req =
- Messages.GetNodeRequestProto.newBuilder().setUuid(uuid).build();
- Messages.GetNodeResponseProto node = appMaster.getNode(req);
- return ClusterNode.fromProtobuf(node.getClusterNode());
- }
-
- /**
- * Unmarshall a list of nodes from a protobud response
- * @param nodes node list
- * @return possibly empty list of cluster nodes
- * @throws IOException
- */
- public List<ClusterNode> convertNodeWireToClusterNodes(List<Messages.RoleInstanceState> nodes)
- throws IOException {
- List<ClusterNode> nodeList = new ArrayList<>(nodes.size());
- for (Messages.RoleInstanceState node : nodes) {
- nodeList.add(ClusterNode.fromProtobuf(node));
- }
- return nodeList;
- }
-
- /**
- * Echo text (debug action)
- * @param text text
- * @return the text, echoed back
- * @throws YarnException
- * @throws IOException
- */
- public String echo(String text) throws YarnException, IOException {
- Messages.EchoRequestProto.Builder builder =
- Messages.EchoRequestProto.newBuilder();
- builder.setText(text);
- Messages.EchoRequestProto req = builder.build();
- Messages.EchoResponseProto response = appMaster.echo(req);
- return response.getText();
- }
-
-
- /**
- * Connect to a live cluster and get its current state
- * @return its description
- */
- public ClusterDescription getClusterDescription()
- throws YarnException, IOException {
-
- Messages.GetJSONClusterStatusRequestProto req =
- Messages.GetJSONClusterStatusRequestProto.newBuilder().build();
- Messages.GetJSONClusterStatusResponseProto resp =
- appMaster.getJSONClusterStatus(req);
- String statusJson = resp.getClusterSpec();
- try {
- return ClusterDescription.fromJson(statusJson);
- } catch (JsonParseException e) {
- log.error("Exception " + e + " parsing:\n" + statusJson, e);
- throw e;
- }
- }
-
- /**
- * Get the AM instance definition.
- * <p>
- * See {@link SliderClusterProtocol#getInstanceDefinition(Messages.GetInstanceDefinitionRequestProto)}
- * @return current slider AM aggregate definition
- * @throws YarnException
- * @throws IOException
- */
- public AggregateConf getInstanceDefinition()
- throws YarnException, IOException {
- Messages.GetInstanceDefinitionRequestProto.Builder builder =
- Messages.GetInstanceDefinitionRequestProto.newBuilder();
-
- Messages.GetInstanceDefinitionRequestProto request = builder.build();
- Messages.GetInstanceDefinitionResponseProto response =
- appMaster.getInstanceDefinition(request);
-
- ConfTreeSerDeser confTreeSerDeser = new ConfTreeSerDeser();
-
- ConfTree internal = confTreeSerDeser.fromJson(response.getInternal());
- ConfTree resources = confTreeSerDeser.fromJson(response.getResources());
- ConfTree app = confTreeSerDeser.fromJson(response.getApplication());
- AggregateConf instanceDefinition =
- new AggregateConf(resources, app, internal);
- return instanceDefinition;
- }
- /**
- * Kill a container
- * @param id container ID
- * @return a success flag
- * @throws YarnException
- * @throws IOException
- */
- public boolean killContainer(String id) throws
- YarnException,
- IOException {
- Messages.KillContainerRequestProto.Builder builder =
- Messages.KillContainerRequestProto.newBuilder();
- builder.setId(id);
- Messages.KillContainerRequestProto req = builder.build();
- Messages.KillContainerResponseProto response = appMaster.killContainer(req);
- return response.getSuccess();
- }
-
- /**
- * List all node UUIDs in a role
- * @param role role name or "" for all
- * @return an array of UUID strings
- * @throws IOException
- * @throws YarnException
- */
- public String[] listNodeUUIDsByRole(String role) throws IOException, YarnException {
- Collection<String> uuidList = innerListNodeUUIDSByRole(role);
- String[] uuids = new String[uuidList.size()];
- return uuidList.toArray(uuids);
- }
-
- public List<String> innerListNodeUUIDSByRole(String role) throws IOException, YarnException {
- Messages.ListNodeUUIDsByRoleRequestProto req =
- Messages.ListNodeUUIDsByRoleRequestProto
- .newBuilder()
- .setRole(role)
- .build();
- Messages.ListNodeUUIDsByRoleResponseProto resp = appMaster.listNodeUUIDsByRole(req);
- return resp.getUuidList();
- }
-
- /**
- * List all nodes in a role. This is a double round trip: once to list
- * the nodes in a role, another to get their details
- * @param role
- * @return an array of ContainerNode instances
- * @throws IOException
- * @throws YarnException
- */
- public List<ClusterNode> listClusterNodesInRole(String role)
- throws IOException, YarnException {
-
- Collection<String> uuidList = innerListNodeUUIDSByRole(role);
- Messages.GetClusterNodesRequestProto req =
- Messages.GetClusterNodesRequestProto
- .newBuilder()
- .addAllUuid(uuidList)
- .build();
- Messages.GetClusterNodesResponseProto resp = appMaster.getClusterNodes(req);
- return convertNodeWireToClusterNodes(resp.getClusterNodeList());
- }
-
- /**
- * Get the details on a list of uuids
- * @param uuids instance IDs
- * @return a possibly empty list of node details
- * @throws IOException
- * @throws YarnException
- */
- @VisibleForTesting
- public List<ClusterNode> listClusterNodes(String[] uuids)
- throws IOException, YarnException {
-
- Messages.GetClusterNodesRequestProto req =
- Messages.GetClusterNodesRequestProto
- .newBuilder()
- .addAllUuid(Arrays.asList(uuids))
- .build();
- Messages.GetClusterNodesResponseProto resp = appMaster.getClusterNodes(req);
- return convertNodeWireToClusterNodes(resp.getClusterNodeList());
- }
-
- /**
- * Wait for an instance of a named role to be live (or past it in the lifecycle)
- * @param role role to look for
- * @param timeout time to wait
- * @return the state. If still in CREATED, the cluster didn't come up
- * in the time period. If LIVE, all is well. If >LIVE, it has shut for a reason
- * @throws IOException IO
- * @throws SliderException Slider
- * @throws WaitTimeoutException if the wait timed out
- */
- @VisibleForTesting
- public int waitForRoleInstanceLive(String role, long timeout)
- throws WaitTimeoutException, IOException, YarnException {
- Duration duration = new Duration(timeout);
- duration.start();
- boolean live = false;
- int state = StateValues.STATE_CREATED;
-
- log.info("Waiting {} millis for a live node in role {}", timeout, role);
- try {
- while (!live) {
- // see if there is a node in that role yet
- List<String> uuids = innerListNodeUUIDSByRole(role);
- String[] containers = uuids.toArray(new String[uuids.size()]);
- int roleCount = containers.length;
- ClusterNode roleInstance = null;
- if (roleCount != 0) {
-
- // if there is, get the node
- roleInstance = getNode(containers[0]);
- if (roleInstance != null) {
- state = roleInstance.state;
- live = state >= StateValues.STATE_LIVE;
- }
- }
- if (!live) {
- if (duration.getLimitExceeded()) {
- throw new WaitTimeoutException(
- String.format("Timeout after %d millis" +
- " waiting for a live instance of type %s; " +
- "instances found %d %s",
- timeout, role, roleCount,
- (roleInstance != null
- ? (" instance -\n" + roleInstance.toString())
- : "")
- ));
- } else {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException ignored) {
- // ignored
- }
- }
- }
- }
- } finally {
- duration.close();
- }
- return state;
- }
-
- /**
- * Flex operation
- * @param resources new resources
- * @return the response
- * @throws IOException
- */
- public boolean flex(ConfTree resources) throws IOException {
- Messages.FlexClusterRequestProto request =
- Messages.FlexClusterRequestProto.newBuilder()
- .setClusterSpec(resources.toJson())
- .build();
- Messages.FlexClusterResponseProto response = appMaster.flexCluster(request);
- return response.getResponse();
- }
-
-
- /**
- * Commit (possibly delayed) AM suicide
- *
- * @param signal exit code
- * @param text text text to log
- * @param delay delay in millis
- * @throws YarnException
- * @throws IOException
- */
- public void amSuicide(String text, int signal, int delay)
- throws IOException {
- Messages.AMSuicideRequestProto.Builder builder =
- Messages.AMSuicideRequestProto.newBuilder();
- if (text != null) {
- builder.setText(text);
- }
- builder.setSignal(signal);
- builder.setDelay(delay);
- Messages.AMSuicideRequestProto req = builder.build();
- appMaster.amSuicide(req);
- }
-
- /**
- * Get the application liveness
- * @return current liveness information
- * @throws IOException
- */
- public ApplicationLivenessInformation getLivenessInformation() throws IOException {
- Messages.GetApplicationLivenessRequestProto.Builder builder =
- Messages.GetApplicationLivenessRequestProto.newBuilder();
- Messages.ApplicationLivenessInformationProto wire =
- appMaster.getLivenessInformation(builder.build());
- return unmarshall(wire);
-
- }
-
- public AggregateConf getModelDesired() throws IOException {
- return unmarshallToAggregateConf(appMaster.getModelDesired(EMPTY));
- }
-
-
- public ConfTreeOperations getModelDesiredAppconf() throws IOException {
- return unmarshallToCTO(appMaster.getModelDesiredAppconf(EMPTY));
- }
-
-
- public ConfTreeOperations getModelDesiredResources() throws IOException {
- return unmarshallToCTO(appMaster.getModelDesiredResources(EMPTY));
- }
-
-
- public AggregateConf getModelResolved() throws IOException {
- return unmarshallToAggregateConf(appMaster.getModelResolved(EMPTY));
- }
-
-
- public ConfTreeOperations getModelResolvedAppconf() throws IOException {
- return unmarshallToCTO(appMaster.getModelResolvedAppconf(EMPTY));
- }
-
-
- public ConfTreeOperations getModelResolvedResources() throws IOException {
- return unmarshallToCTO(appMaster.getModelDesiredResources(EMPTY));
- }
-
-
- public ConfTreeOperations getLiveResources() throws IOException {
- return unmarshallToCTO(appMaster.getLiveResources(EMPTY));
- }
-
-
- public Map<String, ContainerInformation> enumContainers() throws IOException {
- Messages.GetLiveContainersResponseProto response =
- appMaster.getLiveContainers(
- Messages.GetLiveContainersRequestProto.newBuilder().build());
-
- int namesCount = response.getNamesCount();
- int records = response.getContainersCount();
- if (namesCount != records) {
- throw new IOException("Number of names returned (" + namesCount
- + ") does not match the number of records returned: "
- + records);
- }
- Map<String, ContainerInformation> map = new HashMap<>(namesCount);
- for (int i = 0; i < namesCount; i++) {
- map.put(response.getNames(i), unmarshall(response.getContainers(i)));
- }
- return map;
- }
-
-
- public ContainerInformation getContainer(String containerId) throws
- IOException {
- Messages.ContainerInformationProto response =
- appMaster.getLiveContainer(
- Messages.GetLiveContainerRequestProto.newBuilder()
- .setContainerId(containerId)
- .build());
- return unmarshall(response);
- }
-
- public List<ContainerInformation> getContainers() throws IOException {
- Messages.GetLiveContainersResponseProto response = appMaster
- .getLiveContainers(Messages.GetLiveContainersRequestProto.newBuilder()
- .build());
- return unmarshall(response);
- }
-
- public Map<String, ComponentInformation> enumComponents() throws IOException {
- Messages.GetLiveComponentsResponseProto response =
- appMaster.getLiveComponents(
- Messages.GetLiveComponentsRequestProto.newBuilder().build());
-
- int namesCount = response.getNamesCount();
- int records = response.getComponentsCount();
- if (namesCount != records) {
- throw new IOException(
- "Number of names returned (" + namesCount + ")" +
- " does not match the number of records returned: " + records);
- }
- Map<String, ComponentInformation> map = new HashMap<>(namesCount);
- for (int i = 0; i < namesCount; i++) {
- map.put(response.getNames(i), unmarshall(response.getComponents(i)));
- }
- return map;
- }
-
- public ComponentInformation getComponent(String componentName)
- throws IOException {
- Messages.GetLiveComponentRequestProto.Builder builder =
- Messages.GetLiveComponentRequestProto.newBuilder();
- builder.setName(componentName);
- Messages.ComponentInformationProto proto = appMaster.getLiveComponent(builder.build());
- return unmarshall(proto);
- }
-
- public NodeInformationList getLiveNodes() throws IOException {
- Messages.GetLiveNodesResponseProto response =
- appMaster.getLiveNodes(Messages.GetLiveNodesRequestProto.newBuilder().build());
-
- int records = response.getNodesCount();
- NodeInformationList nil = new NodeInformationList(records);
- for (int i = 0; i < records; i++) {
- nil.add(unmarshall(response.getNodes(i)));
- }
- return nil;
- }
-
- public NodeInformation getLiveNode(String hostname) throws IOException {
- Messages.GetLiveNodeRequestProto.Builder builder =
- Messages.GetLiveNodeRequestProto.newBuilder();
- builder.setName(hostname);
- return unmarshall(appMaster.getLiveNode(builder.build()));
- }
-
- public PingInformation ping(String text) throws IOException {
- return null;
- }
-
- public void stop(String text) throws IOException {
- amSuicide(text, 3, 0);
- }
-
- public ApplicationLivenessInformation getApplicationLiveness() throws
- IOException {
- Messages.ApplicationLivenessInformationProto proto =
- appMaster.getLivenessInformation(
- Messages.GetApplicationLivenessRequestProto.newBuilder().build()
- );
- return unmarshall(proto);
- }
-
- public byte[] getClientCertificateStore(String hostname, String clientId,
- String password, String type) throws IOException {
- Messages.GetCertificateStoreRequestProto.Builder
- builder = Messages.GetCertificateStoreRequestProto.newBuilder();
- if (hostname != null) {
- builder.setHostname(hostname);
- }
- Messages.GetCertificateStoreRequestProto requestProto =
- builder.setRequesterId(clientId)
- .setPassword(password)
- .setType(type)
- .build();
- Messages.GetCertificateStoreResponseProto response =
- appMaster.getClientCertificateStore(requestProto);
-
- return unmarshall(response);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/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
deleted file mode 100644
index d936a22..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/rest/BaseRestClient.java
+++ /dev/null
@@ -1,152 +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.ClientHandlerException;
-import com.sun.jersey.api.client.GenericType;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.client.WebResource;
-import org.apache.slider.core.exceptions.ExceptionConverter;
-import org.apache.slider.core.restclient.HttpVerb;
-import org.apache.slider.core.restclient.UgiJerseyBinding;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.ws.rs.core.MediaType;
-import java.io.IOException;
-import java.net.URI;
-
-
-/**
- * This is a base class for Jersey REST clients in Slider.
- * It supports the execution of operations \u2014with
- * exceptions uprated to IOExceptions when needed.
- * <p>
- * Subclasses can use these operations to provide an API-like view
- * of the REST model
- */
-public class BaseRestClient {
- private static final Logger log =
- LoggerFactory.getLogger(BaseRestClient.class);
- private final Client client;
-
- public BaseRestClient(
- Client client) {
- Preconditions.checkNotNull(client, "null jersey client");
- this.client = client;
- }
-
- /**
- * Get the jersey client
- * @return jersey client
- */
- public Client getClient() {
- return client;
- }
-
- /**
- * Execute the operation. Failures are raised as IOException subclasses
- * @param method method to execute
- * @param resource resource to work against
- * @param c class to build
- * @param <T> type expected
- * @return an instance of the type T
- * @throws IOException on any failure
- */
- public <T> T exec(HttpVerb method, WebResource resource, Class<T> c)
- throws IOException {
- try {
- Preconditions.checkArgument(c != null);
- log.debug("{}} {}", method, resource.getURI());
- return resource.accept(MediaType.APPLICATION_JSON_TYPE)
- .method(method.getVerb(), c);
- } catch (ClientHandlerException ex) {
- throw ExceptionConverter.convertJerseyException(method.getVerb(),
- resource.getURI().toString(),
- ex);
- } catch (UniformInterfaceException ex) {
- throw UgiJerseyBinding.uprateFaults(method,
- resource.getURI().toString(),
- ex);
- }
- }
-
- /**
- * Execute the operation. Failures are raised as IOException subclasses
- * @param method method to execute
- * @param resource resource to work against
- * @param t type to work with
- * @param <T> type expected
- * @return an instance of the type T
- * @throws IOException on any failure
- */
- public <T> T exec(HttpVerb method, WebResource resource, GenericType<T> t)
- throws IOException {
- try {
- Preconditions.checkArgument(t != null);
- log.debug("{}} {}", method, resource.getURI());
- resource.accept(MediaType.APPLICATION_JSON_TYPE);
- return resource.method(method.getVerb(), t);
- } catch (ClientHandlerException ex) {
- throw ExceptionConverter.convertJerseyException(method.getVerb(),
- resource.getURI().toString(),
- ex);
- } catch (UniformInterfaceException ex) {
- throw UgiJerseyBinding.uprateFaults(method, resource.getURI().toString(),
- ex);
- }
- }
-
-
- /**
- * Execute the GET operation. Failures are raised as IOException subclasses
- * @param resource resource to work against
- * @param c class to build
- * @param <T> type expected
- * @return an instance of the type T
- * @throws IOException on any failure
- */
- public <T> T get(WebResource resource, Class<T> c) throws IOException {
- return exec(HttpVerb.GET, resource, c);
- }
-
- /**
- * Create a Web resource from the client.
- *
- * @param u the URI of the resource.
- * @return the Web resource.
- */
- public WebResource resource(URI u) {
- return client.resource(u);
- }
-
- /**
- * Create a Web resource from the client.
- *
- * @param u the URI of the resource.
- * @return the Web resource.
- */
-
- public WebResource resource(String url) {
- return client.resource(url);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/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
deleted file mode 100644
index 4286596..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/rest/RestClientFactory.java
+++ /dev/null
@@ -1,89 +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.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.WebResource;
-import org.apache.hadoop.registry.client.api.RegistryOperations;
-import org.apache.slider.client.ClientRegistryBinder;
-import org.apache.slider.api.SliderApplicationApi;
-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;
-
-/**
- * Factory for the Rest client; hides the lookup and instantiation.
- * <p>
- *
- */
-public class RestClientFactory {
-
- private final ClientRegistryBinder binder;
- private final Client jerseyClient;
- private final String user, serviceclass, instance;
-
- public RestClientFactory(RegistryOperations operations,
- Client jerseyClient,
- String user,
- String serviceclass,
- String instance) {
- this.jerseyClient = jerseyClient;
- this.user = user;
- this.serviceclass = serviceclass;
- this.instance = instance;
- binder = new ClientRegistryBinder(operations);
- }
-
- /**
- * Locate the AM
- * @return a resource to the AM
- * @throws IOException any failure to resolve to the AM
- */
- private WebResource locateAppmaster() throws IOException {
- String restAPI = binder.lookupExternalRestAPI(user, serviceclass, instance,
- CustomRegistryConstants.AM_REST_BASE);
- return jerseyClient.resource(restAPI);
- }
-
- /**
- * 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 SliderApplicationApiRestClient(jerseyClient, appResource);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java b/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
deleted file mode 100644
index 4283ee8..0000000
--- a/slider-core/src/main/java/org/apache/slider/client/rest/SliderApplicationApiRestClient.java
+++ /dev/null
@@ -1,326 +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.ClientHandlerException;
-import com.sun.jersey.api.client.GenericType;
-import com.sun.jersey.api.client.UniformInterfaceException;
-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.api.SliderApplicationApi;
-import org.apache.slider.api.types.NodeInformation;
-import org.apache.slider.api.types.NodeInformationList;
-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.exceptions.ExceptionConverter;
-import org.apache.slider.core.restclient.HttpVerb;
-import org.apache.slider.api.types.PingInformation;
-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 SliderApplicationApiRestClient extends BaseRestClient
- implements SliderApplicationApi {
- private static final Logger log =
- LoggerFactory.getLogger(SliderApplicationApiRestClient.class);
- private WebResource appResource;
-
- /**
- * Create an instance
- * @param jerseyClient jersey client for operations
- * @param appResource resource of application API
- */
- public SliderApplicationApiRestClient(Client jerseyClient,
- WebResource appResource) {
- super(jerseyClient);
- this.appResource = appResource;
- }
-
- /**
- * Create an instance
- * @param jerseyClient jersey client for operations
- * @param appmaster URL of appmaster/proxy to AM
- */
- public SliderApplicationApiRestClient(Client jerseyClient, String appmaster) {
- super(jerseyClient);
- WebResource amResource = jerseyClient.resource(appmaster);
- amResource.type(MediaType.APPLICATION_JSON);
- this.appResource = amResource.path(SLIDER_PATH_APPLICATION);
- }
-
-
- @Override
- public String toString() {
- final StringBuilder sb =
- new StringBuilder("SliderApplicationApiRestClient{");
- sb.append("appResource=").append(appResource);
- sb.append('}');
- return sb.toString();
- }
-
- /**
- * Create a resource under the application path
- * @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");
- return appResource.path(subpath);
- }
-
- /**
- * 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 {
- return exec(method, applicationResource(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 appResourceOperation(HttpVerb method, String subpath,
- GenericType<T> t)
- throws IOException {
- return exec(method, applicationResource(subpath), 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 getDesiredResources() throws IOException {
- ConfTree resource =
- getApplicationResource(MODEL_DESIRED_RESOURCES, ConfTree.class);
- return new ConfTreeOperations(resource);
- }
-
- @Override
- public void putDesiredResources(ConfTree updated) throws IOException {
- WebResource resource = applicationResource(MODEL_DESIRED_RESOURCES);
- try {
-
- // put operation. The result is discarded; it does help validate
- // that the operation returned a JSON data structure as well as a 200
- // response.
-
- resource.accept(MediaType.APPLICATION_JSON_TYPE)
- .type(MediaType.APPLICATION_JSON_TYPE)
- .entity(updated)
- .put(ConfTree.class);
- } catch (ClientHandlerException ex) {
- throw ExceptionConverter.convertJerseyException("PUT",
- resource.getURI().toString(),
- ex);
- } catch (UniformInterfaceException ex) {
- throw ExceptionConverter.convertJerseyException("PUT",
- resource.getURI().toString(), ex);
- }
- }
-
- @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 getResolvedResources() throws IOException {
- ConfTree resource =
- getApplicationResource(MODEL_RESOLVED_RESOURCES, ConfTree.class);
- return new ConfTreeOperations(resource);
- }
-
- @Override
- public ConfTreeOperations getLiveResources() 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 NodeInformationList getLiveNodes() throws IOException {
- return getApplicationResource(LIVE_NODES, NodeInformationList.class);
- }
-
- @Override
- public NodeInformation getLiveNode(String hostname) throws IOException {
- return getApplicationResource(LIVE_NODES + "/" + hostname,
- NodeInformation.class);
- }
-
- @Override
- public PingInformation 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 PingInformation pingGet(String text) throws IOException {
- WebResource pingResource = applicationResource(ACTION_PING);
- pingResource.getUriBuilder().queryParam("body", text);
- return pingResource.get(PingInformation.class);
- }
-
- /**
- * Ping as a POST
- * @param text text to include
- * @return the response
- * @throws IOException on any failure
- */
- public PingInformation pingPost(String text) throws IOException {
- WebResource pingResource = applicationResource(ACTION_PING);
- Form f = new Form();
- f.add("text", text);
- return pingResource
- .type(MediaType.APPLICATION_JSON_TYPE)
- .post(PingInformation.class, f);
- }
-
- /**
- * Ping as a POST
- * @param text text to include
- * @return the response
- * @throws IOException on any failure
- */
- public PingInformation pingPut(String text) throws IOException {
- WebResource pingResource = applicationResource(ACTION_PING);
- Form f = new Form();
- return pingResource
- .type(MediaType.TEXT_PLAIN)
- .put(PingInformation.class, text);
- }
-
- @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/51c2b92c/slider-core/src/main/java/org/apache/slider/common/Constants.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/Constants.java b/slider-core/src/main/java/org/apache/slider/common/Constants.java
deleted file mode 100644
index 0e3559a..0000000
--- a/slider-core/src/main/java/org/apache/slider/common/Constants.java
+++ /dev/null
@@ -1,35 +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.common;
-
-public class Constants {
- public static final int CONNECT_TIMEOUT = 10000;
- public static final int RPC_TIMEOUT = 15000;
-
- public static final String HADOOP_JAAS_DEBUG = "HADOOP_JAAS_DEBUG";
- public static final String KRB5_CCNAME = "KRB5CCNAME";
- public static final String JAVA_SECURITY_KRB5_CONF
- = "java.security.krb5.conf";
- public static final String JAVA_SECURITY_KRB5_REALM
- = "java.security.krb5.realm";
- public static final String SUN_SECURITY_KRB5_DEBUG
- = "sun.security.krb5.debug";
- public static final String SUN_SECURITY_SPNEGO_DEBUG
- = "sun.security.spnego.debug";
-}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/51c2b92c/slider-core/src/main/java/org/apache/slider/common/SliderExitCodes.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/SliderExitCodes.java b/slider-core/src/main/java/org/apache/slider/common/SliderExitCodes.java
deleted file mode 100644
index 5758f79..0000000
--- a/slider-core/src/main/java/org/apache/slider/common/SliderExitCodes.java
+++ /dev/null
@@ -1,88 +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.common;
-
-import org.apache.slider.core.main.LauncherExitCodes;
-
-public interface SliderExitCodes extends LauncherExitCodes {
-
- /**
- * starting point for exit codes; not an exception itself
- */
- int _EXIT_CODE_BASE = 64;
-
- /**
- * service entered the failed state: {@value}
- */
- int EXIT_YARN_SERVICE_FAILED = 65;
-
- /**
- * service was killed: {@value}
- */
- int EXIT_YARN_SERVICE_KILLED = 66;
-
- /**
- * timeout on monitoring client: {@value}
- */
- int EXIT_TIMED_OUT = 67;
-
- /**
- * service finished with an error: {@value}
- */
- int EXIT_YARN_SERVICE_FINISHED_WITH_ERROR = 68;
-
- /**
- * the application instance is unknown: {@value}
- */
- int EXIT_UNKNOWN_INSTANCE = 69;
-
- /**
- * the application instance is in the wrong state for that operation: {@value}
- */
- int EXIT_BAD_STATE = 70;
-
- /**
- * A spawned master process failed
- */
- int EXIT_PROCESS_FAILED = 71;
-
- /**
- * The instance failed -too many containers were
- * failing or some other threshold was reached
- */
- int EXIT_DEPLOYMENT_FAILED = 72;
-
- /**
- * The application is live -and the requested operation
- * does not work if the cluster is running
- */
- int EXIT_APPLICATION_IN_USE = 73;
-
- /**
- * There already is an application instance of that name
- * when an attempt is made to create a new instance
- */
- int EXIT_INSTANCE_EXISTS = 75;
-
- /**
- * Exit code when the configurations in valid/incomplete: {@value}
- */
- int EXIT_BAD_CONFIGURATION = 77;
-
-}