SLIDER-377 AM checks for validity of server side; client does this if the CLI 
action says it should (default is yes)


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

Branch: refs/heads/develop
Commit: b636180392a719b1b663f77592c23b7b16a8f4d3
Parents: 8034012
Author: Steve Loughran <ste...@apache.org>
Authored: Thu Sep 4 16:53:35 2014 +0100
Committer: Steve Loughran <ste...@apache.org>
Committed: Thu Sep 4 16:53:35 2014 +0100

----------------------------------------------------------------------
 .../org/apache/slider/client/SliderClient.java    | 18 ++++++++++++++----
 .../slider/common/params/AbstractActionArgs.java  | 11 +++++++++++
 .../slider/common/params/ActionHelpArgs.java      | 14 ++++++++++++--
 .../slider/common/params/ActionVersionArgs.java   | 12 +++++++++++-
 .../apache/slider/common/tools/SliderUtils.java   |  2 +-
 .../apache/slider/core/build/InstanceBuilder.java |  5 +++--
 .../slider/server/appmaster/SliderAppMaster.java  |  2 +-
 .../services/workflow/LongLivedProcess.java       |  3 ++-
 8 files changed, 55 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java 
b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
index f6d761e..f4040c4 100644
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
+++ b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
@@ -46,6 +46,7 @@ import org.apache.slider.api.proto.Messages;
 import org.apache.slider.common.Constants;
 import org.apache.slider.common.SliderExitCodes;
 import org.apache.slider.common.SliderKeys;
+import org.apache.slider.common.params.AbstractActionArgs;
 import org.apache.slider.common.params.AbstractClusterBuildingActionArgs;
 import org.apache.slider.common.params.ActionAMSuicideArgs;
 import org.apache.slider.common.params.ActionCreateArgs;
@@ -291,6 +292,12 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
 
     // choose the action
     String action = serviceArgs.getAction();
+    
+    AbstractActionArgs coreAction = serviceArgs.getCoreAction();
+    if (coreAction.getHadoopServicesRequired()) {
+      // validate the client
+      SliderUtils.validateSliderClientEnvironment(null);
+    }
     int exitCode = EXIT_SUCCESS;
     String clusterName = serviceArgs.getClusterName();
     // actions
@@ -613,7 +620,9 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
     // verify that a live cluster isn't there
     SliderUtils.validateClusterName(clustername);
     verifyBindingsDefined();
-    if (!liveClusterAllowed) verifyNoLiveClusters(clustername);
+    if (!liveClusterAllowed) {
+      verifyNoLiveClusters(clustername);
+    }
 
     Configuration conf = getConfig();
     String registryQuorum = lookupZKQuorum();
@@ -1169,7 +1178,7 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
 */
       addConfOptionToCLI(commandLine,
           config,
-          DFSConfigKeys.DFS_NAMENODE_USER_NAME_KEY);
+          DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY);
     }
     // write out the path output
     commandLine.addOutAndErrFiles(STDOUT_AM, STDERR_AM);
@@ -1263,10 +1272,11 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
    */
   private void propagatePrincipals(Configuration config,
                                    AggregateConf clusterSpec) {
-    String dfsPrincipal = config.get(DFSConfigKeys.DFS_NAMENODE_USER_NAME_KEY);
+    String dfsPrincipal = config.get(
+        DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY);
     if (dfsPrincipal != null) {
       String siteDfsPrincipal = OptionKeys.SITE_XML_PREFIX +
-                                DFSConfigKeys.DFS_NAMENODE_USER_NAME_KEY;
+                                
DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY;
       clusterSpec.getAppConfOperations().getGlobalOptions().putIfUnset(
         siteDfsPrincipal,
         dfsPrincipal);

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/common/params/AbstractActionArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/AbstractActionArgs.java
 
b/slider-core/src/main/java/org/apache/slider/common/params/AbstractActionArgs.java
index f4a4569..d18c85b 100644
--- 
a/slider-core/src/main/java/org/apache/slider/common/params/AbstractActionArgs.java
+++ 
b/slider-core/src/main/java/org/apache/slider/common/params/AbstractActionArgs.java
@@ -148,4 +148,15 @@ public abstract class AbstractActionArgs extends ArgOps 
implements Arguments {
   public String toString() {
     return super.toString() + ": " + getActionName();
   }
+
+  /**
+   * Override point: 
+   * Flag to indicate that core hadoop API services are needed (HDFS, YARN, 
etc)
+   * —and that validation of the client state should take place.
+   * 
+   * @return a flag to indicate that the core hadoop services will be needed.
+   */
+  public boolean getHadoopServicesRequired() {
+    return true;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/common/params/ActionHelpArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionHelpArgs.java 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionHelpArgs.java
index 4d4098f..f59396a 100644
--- 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionHelpArgs.java
+++ 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionHelpArgs.java
@@ -20,9 +20,11 @@ package org.apache.slider.common.params;
 
 import com.beust.jcommander.Parameters;
 
+/**
+ * The Help command
+ */
 @Parameters(commandNames = {SliderActions.ACTION_HELP, 
SliderActions.ACTION_USAGE},
-            commandDescription = SliderActions.DESCRIBE_ACTION_LIST)
-
+            commandDescription = SliderActions.DESCRIBE_ACTION_HELP)
 public class ActionHelpArgs extends AbstractActionArgs {
   @Override
   public String getActionName() {
@@ -38,4 +40,12 @@ public class ActionHelpArgs extends AbstractActionArgs {
     return 0;
   }
 
+  /**
+   * This action does not need hadoop services
+   * @return false
+   */
+  @Override
+  public boolean getHadoopServicesRequired() {
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java
 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java
index c36ef62..b9d212b 100644
--- 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java
+++ 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionVersionArgs.java
@@ -20,9 +20,11 @@ package org.apache.slider.common.params;
 
 import com.beust.jcommander.Parameters;
 
+/**
+ * The version command
+ */
 @Parameters(commandNames = {SliderActions.ACTION_VERSION},
             commandDescription = SliderActions.DESCRIBE_ACTION_VERSION)
-
 public class ActionVersionArgs extends AbstractActionArgs {
   @Override
   public String getActionName() {
@@ -33,4 +35,12 @@ public class ActionVersionArgs extends AbstractActionArgs {
     return 0;
   }
 
+  /**
+   * This action does not need hadoop services
+   * @return false
+   */
+  @Override
+  public boolean getHadoopServicesRequired() {
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java 
b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
index 44fe4fd..4cdc580 100644
--- a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
+++ b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
@@ -1026,7 +1026,7 @@ public final class SliderUtils {
 
     SliderUtils.verifyPrincipalSet(conf, YarnConfiguration.RM_PRINCIPAL);
     SliderUtils.verifyPrincipalSet(conf,
-        DFSConfigKeys.DFS_NAMENODE_USER_NAME_KEY);
+        DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY);
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java 
b/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
index 937b777..bfa7097 100644
--- 
a/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
+++ 
b/slider-core/src/main/java/org/apache/slider/core/build/InstanceBuilder.java
@@ -181,10 +181,11 @@ public class InstanceBuilder {
    * Propagate any critical principals from the current site config down to 
the HBase one.
    */
   public void propagatePrincipals() {
-    String dfsPrincipal = conf.get(DFSConfigKeys.DFS_NAMENODE_USER_NAME_KEY);
+    String dfsPrincipal = conf.get(
+        DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY);
     if (dfsPrincipal != null) {
       String siteDfsPrincipal = OptionKeys.SITE_XML_PREFIX +
-                                DFSConfigKeys.DFS_NAMENODE_USER_NAME_KEY;
+                                
DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY;
       instanceDescription.getAppConfOperations().set(siteDfsPrincipal, 
dfsPrincipal);
     }
   }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
index 49c7792..1c60b69 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java
@@ -390,7 +390,7 @@ public class SliderAppMaster extends 
AbstractSliderLaunchedService
       UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
       log.debug("Authenticating as {}", ugi);
       SliderUtils.verifyPrincipalSet(conf,
-          DFSConfigKeys.DFS_NAMENODE_USER_NAME_KEY);
+          DFSConfigKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY);
       // always enforce protocol to be token-based.
       conf.set(
         CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION,

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/b6361803/slider-core/src/main/java/org/apache/slider/server/services/workflow/LongLivedProcess.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/services/workflow/LongLivedProcess.java
 
b/slider-core/src/main/java/org/apache/slider/server/services/workflow/LongLivedProcess.java
index a0df2c9..57b989c 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/services/workflow/LongLivedProcess.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/services/workflow/LongLivedProcess.java
@@ -284,7 +284,8 @@ public class LongLivedProcess implements Runnable {
   /**
    * Exec the process
    * @return the process
-   * @throws IOException
+   * @throws IOException on aany failure to start the process
+   * @throws FileNotFoundException if the process could not be found
    */
   private Process spawnChildProcess() throws IOException {
     if (process != null) {

Reply via email to