You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by te...@apache.org on 2014/07/11 22:23:31 UTC

git commit: SLIDER-223 Provide action to update Instance Definition

Repository: incubator-slider
Updated Branches:
  refs/heads/develop 166d25230 -> 0b760cde0


SLIDER-223 Provide action to update Instance Definition


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

Branch: refs/heads/develop
Commit: 0b760cde097d546a6a5e59d4850625adb0f6bf65
Parents: 166d252
Author: tedyu <yu...@gmail.com>
Authored: Fri Jul 11 13:23:24 2014 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Fri Jul 11 13:23:24 2014 -0700

----------------------------------------------------------------------
 .../org/apache/slider/client/SliderClient.java  | 23 ++++++++++++--
 .../slider/common/params/ActionUpdateArgs.java  | 32 ++++++++++++++++++++
 .../apache/slider/common/params/ClientArgs.java |  9 ++++++
 .../slider/common/params/SliderActions.java     |  3 ++
 .../slider/common/tools/CoreFileSystem.java     |  1 +
 .../slider/core/build/InstanceBuilder.java      |  6 ++--
 .../slider/client/TestCommonArgParsing.groovy   | 13 ++++++++
 7 files changed, 82 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0b760cde/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 e762c1e..9deb9c3 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
@@ -217,6 +217,9 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
       case ACTION_BUILD:
         exitCode = actionBuild(clusterName, serviceArgs.getActionBuildArgs());
         break;
+      case ACTION_UPDATE:
+        exitCode = actionUpdate(clusterName, serviceArgs.getActionUpdateArgs());
+        break;
       case ACTION_CREATE:
         exitCode = actionCreate(clusterName, serviceArgs.getActionCreateArgs());
         break;
@@ -460,22 +463,36 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
                                                YarnException,
                                                IOException {
 
-    buildInstanceDefinition(clustername, buildInfo);
+    buildInstanceDefinition(clustername, buildInfo, false);
     return EXIT_SUCCESS; 
   }
 
+  /**
+   * 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
+   */
+  public int actionUpdate(String clustername, AbstractClusterBuildingActionArgs buildInfo) throws
+      YarnException, IOException {
+    buildInstanceDefinition(clustername, buildInfo, true);
+    return EXIT_SUCCESS; 
+  }
 
   /**
    * Build up the AggregateConfiguration for an application instance then
    * persists it
    * @param clustername name of the cluster
    * @param buildInfo the arguments needed to build the cluster
+   * @param overwrite true if existing cluster directory can be overwritten
    * @throws YarnException
    * @throws IOException
    */
   
   public void buildInstanceDefinition(String clustername,
-                                      AbstractClusterBuildingActionArgs buildInfo)
+      AbstractClusterBuildingActionArgs buildInfo, boolean overwrite)
         throws YarnException, IOException {
     // verify that a live cluster isn't there
     SliderUtils.validateClusterName(clustername);
@@ -629,7 +646,7 @@ public class SliderClient extends AbstractSliderLaunchedService implements RunSe
       throw e;
     }
     try {
-      builder.persist(appconfdir);
+      builder.persist(appconfdir, overwrite);
     } catch (LockAcquireFailedException e) {
       log.warn("Failed to get a Lock on {} : {}", builder, e);
       throw new BadClusterStateException("Failed to save " + clustername

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0b760cde/slider-core/src/main/java/org/apache/slider/common/params/ActionUpdateArgs.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/params/ActionUpdateArgs.java b/slider-core/src/main/java/org/apache/slider/common/params/ActionUpdateArgs.java
new file mode 100644
index 0000000..9d76bd8
--- /dev/null
+++ b/slider-core/src/main/java/org/apache/slider/common/params/ActionUpdateArgs.java
@@ -0,0 +1,32 @@
+/*
+ * 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.params;
+
+import com.beust.jcommander.Parameters;
+
+@Parameters(commandNames = {SliderActions.ACTION_UPDATE},
+            commandDescription = SliderActions.DESCRIBE_ACTION_UPDATE)
+
+public class ActionUpdateArgs extends AbstractClusterBuildingActionArgs {
+
+  @Override
+  public String getActionName() {
+    return SliderActions.ACTION_UPDATE;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0b760cde/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java b/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
index 44a2a7a..6e44402 100644
--- a/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
+++ b/slider-core/src/main/java/org/apache/slider/common/params/ClientArgs.java
@@ -46,6 +46,7 @@ public class ClientArgs extends CommonArgs {
   private AbstractClusterBuildingActionArgs buildingActionArgs;
   private final ActionAMSuicideArgs actionAMSuicideArgs = new ActionAMSuicideArgs();
   private final ActionBuildArgs actionBuildArgs = new ActionBuildArgs();
+  private final ActionUpdateArgs actionUpdateArgs = new ActionUpdateArgs();
   private final ActionCreateArgs actionCreateArgs = new ActionCreateArgs();
   private final ActionDestroyArgs actionDestroyArgs = new ActionDestroyArgs();
   private final ActionExistsArgs actionExistsArgs = new ActionExistsArgs();
@@ -77,6 +78,7 @@ public class ClientArgs extends CommonArgs {
       actionAMSuicideArgs,
       actionBuildArgs,
       actionCreateArgs,
+      actionUpdateArgs,
       actionDestroyArgs,
       actionExistsArgs,
       actionFlexArgs,
@@ -119,6 +121,10 @@ public class ClientArgs extends CommonArgs {
     return actionBuildArgs;
   }
 
+  public ActionUpdateArgs getActionUpdateArgs() {
+    return actionUpdateArgs;
+  }
+
   public ActionCreateArgs getActionCreateArgs() {
     return actionCreateArgs;
   }
@@ -182,6 +188,9 @@ public class ClientArgs extends CommonArgs {
       //its a builder, so set those actions too
       buildingActionArgs = actionCreateArgs;
 
+    } else if (SliderActions.ACTION_UPDATE.equals(action)) {
+      bindCoreAction(actionUpdateArgs);
+
     } else if (SliderActions.ACTION_FREEZE.equals(action)) {
       bindCoreAction(actionFreezeArgs);
 

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0b760cde/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java b/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
index 2219a25..8e50a83 100644
--- a/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
+++ b/slider-core/src/main/java/org/apache/slider/common/params/SliderActions.java
@@ -27,6 +27,7 @@ public interface SliderActions {
   String ACTION_AM_SUICIDE = "am-suicide";
   String ACTION_BUILD = "build";
   String ACTION_CREATE = "create";
+  String ACTION_UPDATE = "update";
   String ACTION_DESTROY = "destroy";
   String ACTION_ECHO = "echo";
   String ACTION_EXISTS = "exists";
@@ -49,6 +50,8 @@ public interface SliderActions {
     "Build a Slider cluster specification -but do not start it";
   String DESCRIBE_ACTION_CREATE =
       "Create a live Slider application";
+  String DESCRIBE_ACTION_UPDATE =
+      "Update template for a Slider application";
   String DESCRIBE_ACTION_DESTROY =
         "Destroy a frozen Slider application)";
   String DESCRIBE_ACTION_EXISTS =

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0b760cde/slider-core/src/main/java/org/apache/slider/common/tools/CoreFileSystem.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/tools/CoreFileSystem.java b/slider-core/src/main/java/org/apache/slider/common/tools/CoreFileSystem.java
index 714322c..cada732 100644
--- a/slider-core/src/main/java/org/apache/slider/common/tools/CoreFileSystem.java
+++ b/slider-core/src/main/java/org/apache/slider/common/tools/CoreFileSystem.java
@@ -242,6 +242,7 @@ public class CoreFileSystem {
           IOException,
       SliderException {
     if (fileSystem.exists(clusterDirectory)) {
+      
       log.error("Dir {} exists: {}",
                 clusterDirectory,
                 listFSDir(clusterDirectory));

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0b760cde/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 0580013..0a33c36 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
@@ -224,16 +224,18 @@ public class InstanceBuilder {
 
   /**
    * Persist this
+   * @param appconfdir conf dir
+   * @param overwrite if true, we don't need to create cluster dir
    * @throws IOException
    * @throws SliderException
    * @throws LockAcquireFailedException
    * @param appconfdir dir to persist the conf to
    */
-  public void persist(Path appconfdir) throws
+  public void persist(Path appconfdir, boolean overwrite) throws
       IOException,
       SliderException,
       LockAcquireFailedException {
-    coreFS.createClusterDirectories(instancePaths);
+    if (!overwrite) coreFS.createClusterDirectories(instancePaths);
     ConfPersister persister =
       new ConfPersister(coreFS, getInstanceDir());
     ConfDirSnapshotAction action = null;

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0b760cde/slider-core/src/test/groovy/org/apache/slider/client/TestCommonArgParsing.groovy
----------------------------------------------------------------------
diff --git a/slider-core/src/test/groovy/org/apache/slider/client/TestCommonArgParsing.groovy b/slider-core/src/test/groovy/org/apache/slider/client/TestCommonArgParsing.groovy
index 12e4a43..d94cd54 100644
--- a/slider-core/src/test/groovy/org/apache/slider/client/TestCommonArgParsing.groovy
+++ b/slider-core/src/test/groovy/org/apache/slider/client/TestCommonArgParsing.groovy
@@ -391,6 +391,19 @@ class TestCommonArgParsing implements SliderActions, Arguments {
   }
   
   @Test
+  public void testArgUpdate() throws Throwable {
+    def ca = createClientArgs([
+        ACTION_UPDATE, 'cluster1',
+        ARG_TEMPLATE, "appConfig.json",
+    ])
+    assert ca.action == ACTION_UPDATE
+    assert ca.coreAction instanceof ActionUpdateArgs
+    assert ca.actionUpdateArgs instanceof ActionUpdateArgs
+    AbstractClusterBuildingActionArgs args = ca.actionUpdateArgs
+    assert args.template != null
+  }
+  
+  @Test
   public void testFlexArgs() throws Throwable {
     def ca = createClientArgs([
         ACTION_FLEX, 'cluster1',