| /* |
| * 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.annotations.VisibleForTesting; |
| import org.apache.hadoop.fs.Path; |
| 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.exceptions.YarnException; |
| import org.apache.slider.common.params.AbstractClusterBuildingActionArgs; |
| import org.apache.slider.common.params.ActionAMSuicideArgs; |
| 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.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.ActionStatusArgs; |
| import org.apache.slider.common.params.ActionThawArgs; |
| 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.List; |
| |
| /** |
| * 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) 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. |
| */ |
| int actionInstallKeytab(ActionInstallKeytabArgs installKeytabInfo) |
| 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; |
| |
| /** |
| * 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; |
| /** |
| * 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; |
| |
| /** |
| * 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 clusterName |
| * application name |
| * @param diagosticArgs |
| * 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; |
| } |