http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java 
b/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
index 3441625..702c762 100644
--- 
a/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
+++ 
b/slider-core/src/main/java/org/apache/slider/api/proto/SliderClusterAPI.java
@@ -30,6 +30,19 @@ public final class SliderClusterAPI {
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.StopClusterResponseProto>
 done);
 
       /**
+       * <code>rpc 
upgradeContainers(.org.apache.slider.api.UpgradeContainersRequestProto) returns 
(.org.apache.slider.api.UpgradeContainersResponseProto);</code>
+       *
+       * <pre>
+       **
+       * Upgrade containers 
+       * </pre>
+       */
+      public abstract void upgradeContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto>
 done);
+
+      /**
        * <code>rpc flexCluster(.org.apache.slider.api.FlexClusterRequestProto) 
returns (.org.apache.slider.api.FlexClusterResponseProto);</code>
        *
        * <pre>
@@ -295,6 +308,14 @@ public final class SliderClusterAPI {
         }
 
         @java.lang.Override
+        public  void upgradeContainers(
+            com.google.protobuf.RpcController controller,
+            org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto 
request,
+            
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto>
 done) {
+          impl.upgradeContainers(controller, request, done);
+        }
+
+        @java.lang.Override
         public  void flexCluster(
             com.google.protobuf.RpcController controller,
             org.apache.slider.api.proto.Messages.FlexClusterRequestProto 
request,
@@ -495,48 +516,50 @@ public final class SliderClusterAPI {
             case 0:
               return impl.stopCluster(controller, 
(org.apache.slider.api.proto.Messages.StopClusterRequestProto)request);
             case 1:
-              return impl.flexCluster(controller, 
(org.apache.slider.api.proto.Messages.FlexClusterRequestProto)request);
+              return impl.upgradeContainers(controller, 
(org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto)request);
             case 2:
-              return impl.getJSONClusterStatus(controller, 
(org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto)request);
+              return impl.flexCluster(controller, 
(org.apache.slider.api.proto.Messages.FlexClusterRequestProto)request);
             case 3:
-              return impl.getInstanceDefinition(controller, 
(org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto)request);
+              return impl.getJSONClusterStatus(controller, 
(org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto)request);
             case 4:
-              return impl.listNodeUUIDsByRole(controller, 
(org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto)request);
+              return impl.getInstanceDefinition(controller, 
(org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto)request);
             case 5:
-              return impl.getNode(controller, 
(org.apache.slider.api.proto.Messages.GetNodeRequestProto)request);
+              return impl.listNodeUUIDsByRole(controller, 
(org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto)request);
             case 6:
-              return impl.getClusterNodes(controller, 
(org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto)request);
+              return impl.getNode(controller, 
(org.apache.slider.api.proto.Messages.GetNodeRequestProto)request);
             case 7:
-              return impl.echo(controller, 
(org.apache.slider.api.proto.Messages.EchoRequestProto)request);
+              return impl.getClusterNodes(controller, 
(org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto)request);
             case 8:
-              return impl.killContainer(controller, 
(org.apache.slider.api.proto.Messages.KillContainerRequestProto)request);
+              return impl.echo(controller, 
(org.apache.slider.api.proto.Messages.EchoRequestProto)request);
             case 9:
-              return impl.amSuicide(controller, 
(org.apache.slider.api.proto.Messages.AMSuicideRequestProto)request);
+              return impl.killContainer(controller, 
(org.apache.slider.api.proto.Messages.KillContainerRequestProto)request);
             case 10:
-              return impl.getLivenessInformation(controller, 
(org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto)request);
+              return impl.amSuicide(controller, 
(org.apache.slider.api.proto.Messages.AMSuicideRequestProto)request);
             case 11:
-              return impl.getLiveContainers(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto)request);
+              return impl.getLivenessInformation(controller, 
(org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto)request);
             case 12:
-              return impl.getLiveContainer(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto)request);
+              return impl.getLiveContainers(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto)request);
             case 13:
-              return impl.getLiveComponents(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto)request);
+              return impl.getLiveContainer(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto)request);
             case 14:
-              return impl.getLiveComponent(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto)request);
+              return impl.getLiveComponents(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto)request);
             case 15:
-              return impl.getModelDesired(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+              return impl.getLiveComponent(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto)request);
             case 16:
-              return impl.getModelDesiredAppconf(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+              return impl.getModelDesired(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
             case 17:
-              return impl.getModelDesiredResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+              return impl.getModelDesiredAppconf(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
             case 18:
-              return impl.getModelResolved(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+              return impl.getModelDesiredResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
             case 19:
-              return impl.getModelResolvedAppconf(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+              return impl.getModelResolved(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
             case 20:
-              return impl.getModelResolvedResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+              return impl.getModelResolvedAppconf(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
             case 21:
-              return impl.getLiveResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+              return impl.getModelResolvedResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
             case 22:
+              return impl.getLiveResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request);
+            case 23:
               return impl.getClientCertificateStore(controller, 
(org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto)request);
             default:
               throw new java.lang.AssertionError("Can't get here.");
@@ -555,35 +578,35 @@ public final class SliderClusterAPI {
             case 0:
               return 
org.apache.slider.api.proto.Messages.StopClusterRequestProto.getDefaultInstance();
             case 1:
-              return 
org.apache.slider.api.proto.Messages.FlexClusterRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto.getDefaultInstance();
             case 2:
-              return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.FlexClusterRequestProto.getDefaultInstance();
             case 3:
-              return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto.getDefaultInstance();
             case 4:
-              return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto.getDefaultInstance();
             case 5:
-              return 
org.apache.slider.api.proto.Messages.GetNodeRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto.getDefaultInstance();
             case 6:
-              return 
org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetNodeRequestProto.getDefaultInstance();
             case 7:
-              return 
org.apache.slider.api.proto.Messages.EchoRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto.getDefaultInstance();
             case 8:
-              return 
org.apache.slider.api.proto.Messages.KillContainerRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.EchoRequestProto.getDefaultInstance();
             case 9:
-              return 
org.apache.slider.api.proto.Messages.AMSuicideRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.KillContainerRequestProto.getDefaultInstance();
             case 10:
-              return 
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.AMSuicideRequestProto.getDefaultInstance();
             case 11:
-              return 
org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto.getDefaultInstance();
             case 12:
-              return 
org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto.getDefaultInstance();
             case 13:
-              return 
org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto.getDefaultInstance();
             case 14:
-              return 
org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto.getDefaultInstance();
             case 15:
-              return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance();
             case 16:
               return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
             case 17:
@@ -597,6 +620,8 @@ public final class SliderClusterAPI {
             case 21:
               return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
             case 22:
+              return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
+            case 23:
               return 
org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto.getDefaultInstance();
             default:
               throw new java.lang.AssertionError("Can't get here.");
@@ -615,35 +640,35 @@ public final class SliderClusterAPI {
             case 0:
               return 
org.apache.slider.api.proto.Messages.StopClusterResponseProto.getDefaultInstance();
             case 1:
-              return 
org.apache.slider.api.proto.Messages.FlexClusterResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto.getDefaultInstance();
             case 2:
-              return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.FlexClusterResponseProto.getDefaultInstance();
             case 3:
-              return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto.getDefaultInstance();
             case 4:
-              return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto.getDefaultInstance();
             case 5:
-              return 
org.apache.slider.api.proto.Messages.GetNodeResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto.getDefaultInstance();
             case 6:
-              return 
org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetNodeResponseProto.getDefaultInstance();
             case 7:
-              return 
org.apache.slider.api.proto.Messages.EchoResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto.getDefaultInstance();
             case 8:
-              return 
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.EchoResponseProto.getDefaultInstance();
             case 9:
-              return 
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance();
             case 10:
-              return 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance();
             case 11:
-              return 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance();
             case 12:
-              return 
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance();
             case 13:
-              return 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance();
             case 14:
-              return 
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance();
             case 15:
-              return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
+              return 
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance();
             case 16:
               return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
             case 17:
@@ -657,6 +682,8 @@ public final class SliderClusterAPI {
             case 21:
               return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
             case 22:
+              return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
+            case 23:
               return 
org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance();
             default:
               throw new java.lang.AssertionError("Can't get here.");
@@ -675,6 +702,19 @@ public final class SliderClusterAPI {
         
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.StopClusterResponseProto>
 done);
 
     /**
+     * <code>rpc 
upgradeContainers(.org.apache.slider.api.UpgradeContainersRequestProto) returns 
(.org.apache.slider.api.UpgradeContainersResponseProto);</code>
+     *
+     * <pre>
+     **
+     * Upgrade containers 
+     * </pre>
+     */
+    public abstract void upgradeContainers(
+        com.google.protobuf.RpcController controller,
+        org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto 
request,
+        
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto>
 done);
+
+    /**
      * <code>rpc flexCluster(.org.apache.slider.api.FlexClusterRequestProto) 
returns (.org.apache.slider.api.FlexClusterResponseProto);</code>
      *
      * <pre>
@@ -954,111 +994,116 @@ public final class SliderClusterAPI {
               done));
           return;
         case 1:
+          this.upgradeContainers(controller, 
(org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto)request,
+            
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto>specializeCallback(
+              done));
+          return;
+        case 2:
           this.flexCluster(controller, 
(org.apache.slider.api.proto.Messages.FlexClusterRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.FlexClusterResponseProto>specializeCallback(
               done));
           return;
-        case 2:
+        case 3:
           this.getJSONClusterStatus(controller, 
(org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto>specializeCallback(
               done));
           return;
-        case 3:
+        case 4:
           this.getInstanceDefinition(controller, 
(org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto>specializeCallback(
               done));
           return;
-        case 4:
+        case 5:
           this.listNodeUUIDsByRole(controller, 
(org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto>specializeCallback(
               done));
           return;
-        case 5:
+        case 6:
           this.getNode(controller, 
(org.apache.slider.api.proto.Messages.GetNodeRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetNodeResponseProto>specializeCallback(
               done));
           return;
-        case 6:
+        case 7:
           this.getClusterNodes(controller, 
(org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto>specializeCallback(
               done));
           return;
-        case 7:
+        case 8:
           this.echo(controller, 
(org.apache.slider.api.proto.Messages.EchoRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.EchoResponseProto>specializeCallback(
               done));
           return;
-        case 8:
+        case 9:
           this.killContainer(controller, 
(org.apache.slider.api.proto.Messages.KillContainerRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.KillContainerResponseProto>specializeCallback(
               done));
           return;
-        case 9:
+        case 10:
           this.amSuicide(controller, 
(org.apache.slider.api.proto.Messages.AMSuicideRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.AMSuicideResponseProto>specializeCallback(
               done));
           return;
-        case 10:
+        case 11:
           this.getLivenessInformation(controller, 
(org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto>specializeCallback(
               done));
           return;
-        case 11:
+        case 12:
           this.getLiveContainers(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto>specializeCallback(
               done));
           return;
-        case 12:
+        case 13:
           this.getLiveContainer(controller, 
(org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.ContainerInformationProto>specializeCallback(
               done));
           return;
-        case 13:
+        case 14:
           this.getLiveComponents(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto>specializeCallback(
               done));
           return;
-        case 14:
+        case 15:
           this.getLiveComponent(controller, 
(org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.ComponentInformationProto>specializeCallback(
               done));
           return;
-        case 15:
+        case 16:
           this.getModelDesired(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback(
               done));
           return;
-        case 16:
+        case 17:
           this.getModelDesiredAppconf(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback(
               done));
           return;
-        case 17:
+        case 18:
           this.getModelDesiredResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback(
               done));
           return;
-        case 18:
+        case 19:
           this.getModelResolved(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback(
               done));
           return;
-        case 19:
+        case 20:
           this.getModelResolvedAppconf(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback(
               done));
           return;
-        case 20:
+        case 21:
           this.getModelResolvedResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback(
               done));
           return;
-        case 21:
+        case 22:
           this.getLiveResources(controller, 
(org.apache.slider.api.proto.Messages.EmptyPayloadProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.WrappedJsonProto>specializeCallback(
               done));
           return;
-        case 22:
+        case 23:
           this.getClientCertificateStore(controller, 
(org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto)request,
             
com.google.protobuf.RpcUtil.<org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto>specializeCallback(
               done));
@@ -1080,35 +1125,35 @@ public final class SliderClusterAPI {
         case 0:
           return 
org.apache.slider.api.proto.Messages.StopClusterRequestProto.getDefaultInstance();
         case 1:
-          return 
org.apache.slider.api.proto.Messages.FlexClusterRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto.getDefaultInstance();
         case 2:
-          return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.FlexClusterRequestProto.getDefaultInstance();
         case 3:
-          return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto.getDefaultInstance();
         case 4:
-          return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto.getDefaultInstance();
         case 5:
-          return 
org.apache.slider.api.proto.Messages.GetNodeRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto.getDefaultInstance();
         case 6:
-          return 
org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetNodeRequestProto.getDefaultInstance();
         case 7:
-          return 
org.apache.slider.api.proto.Messages.EchoRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto.getDefaultInstance();
         case 8:
-          return 
org.apache.slider.api.proto.Messages.KillContainerRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.EchoRequestProto.getDefaultInstance();
         case 9:
-          return 
org.apache.slider.api.proto.Messages.AMSuicideRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.KillContainerRequestProto.getDefaultInstance();
         case 10:
-          return 
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.AMSuicideRequestProto.getDefaultInstance();
         case 11:
-          return 
org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto.getDefaultInstance();
         case 12:
-          return 
org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto.getDefaultInstance();
         case 13:
-          return 
org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto.getDefaultInstance();
         case 14:
-          return 
org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto.getDefaultInstance();
         case 15:
-          return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto.getDefaultInstance();
         case 16:
           return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
         case 17:
@@ -1122,6 +1167,8 @@ public final class SliderClusterAPI {
         case 21:
           return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
         case 22:
+          return 
org.apache.slider.api.proto.Messages.EmptyPayloadProto.getDefaultInstance();
+        case 23:
           return 
org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto.getDefaultInstance();
         default:
           throw new java.lang.AssertionError("Can't get here.");
@@ -1140,35 +1187,35 @@ public final class SliderClusterAPI {
         case 0:
           return 
org.apache.slider.api.proto.Messages.StopClusterResponseProto.getDefaultInstance();
         case 1:
-          return 
org.apache.slider.api.proto.Messages.FlexClusterResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto.getDefaultInstance();
         case 2:
-          return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.FlexClusterResponseProto.getDefaultInstance();
         case 3:
-          return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto.getDefaultInstance();
         case 4:
-          return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto.getDefaultInstance();
         case 5:
-          return 
org.apache.slider.api.proto.Messages.GetNodeResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto.getDefaultInstance();
         case 6:
-          return 
org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetNodeResponseProto.getDefaultInstance();
         case 7:
-          return 
org.apache.slider.api.proto.Messages.EchoResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto.getDefaultInstance();
         case 8:
-          return 
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.EchoResponseProto.getDefaultInstance();
         case 9:
-          return 
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance();
         case 10:
-          return 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance();
         case 11:
-          return 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance();
         case 12:
-          return 
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance();
         case 13:
-          return 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance();
         case 14:
-          return 
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance();
         case 15:
-          return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
+          return 
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance();
         case 16:
           return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
         case 17:
@@ -1182,6 +1229,8 @@ public final class SliderClusterAPI {
         case 21:
           return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
         case 22:
+          return 
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance();
+        case 23:
           return 
org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance();
         default:
           throw new java.lang.AssertionError("Can't get here.");
@@ -1219,12 +1268,27 @@ public final class SliderClusterAPI {
             
org.apache.slider.api.proto.Messages.StopClusterResponseProto.getDefaultInstance()));
       }
 
+      public  void upgradeContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto 
request,
+          
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto>
 done) {
+        channel.callMethod(
+          getDescriptor().getMethods().get(1),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto.getDefaultInstance(),
+          com.google.protobuf.RpcUtil.generalizeCallback(
+            done,
+            
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto.class,
+            
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto.getDefaultInstance()));
+      }
+
       public  void flexCluster(
           com.google.protobuf.RpcController controller,
           org.apache.slider.api.proto.Messages.FlexClusterRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.FlexClusterResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(1),
+          getDescriptor().getMethods().get(2),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.FlexClusterResponseProto.getDefaultInstance(),
@@ -1239,7 +1303,7 @@ public final class SliderClusterAPI {
           
org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(2),
+          getDescriptor().getMethods().get(3),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto.getDefaultInstance(),
@@ -1254,7 +1318,7 @@ public final class SliderClusterAPI {
           
org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(3),
+          getDescriptor().getMethods().get(4),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto.getDefaultInstance(),
@@ -1269,7 +1333,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(4),
+          getDescriptor().getMethods().get(5),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto.getDefaultInstance(),
@@ -1284,7 +1348,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetNodeRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetNodeResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(5),
+          getDescriptor().getMethods().get(6),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetNodeResponseProto.getDefaultInstance(),
@@ -1299,7 +1363,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(6),
+          getDescriptor().getMethods().get(7),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto.getDefaultInstance(),
@@ -1314,7 +1378,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EchoRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.EchoResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(7),
+          getDescriptor().getMethods().get(8),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.EchoResponseProto.getDefaultInstance(),
@@ -1329,7 +1393,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.KillContainerRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.KillContainerResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(8),
+          getDescriptor().getMethods().get(9),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance(),
@@ -1344,7 +1408,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.AMSuicideRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.AMSuicideResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(9),
+          getDescriptor().getMethods().get(10),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance(),
@@ -1359,7 +1423,7 @@ public final class SliderClusterAPI {
           
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(10),
+          getDescriptor().getMethods().get(11),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance(),
@@ -1374,7 +1438,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(11),
+          getDescriptor().getMethods().get(12),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance(),
@@ -1389,7 +1453,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ContainerInformationProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(12),
+          getDescriptor().getMethods().get(13),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance(),
@@ -1404,7 +1468,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(13),
+          getDescriptor().getMethods().get(14),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance(),
@@ -1419,7 +1483,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.ComponentInformationProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(14),
+          getDescriptor().getMethods().get(15),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance(),
@@ -1434,7 +1498,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(15),
+          getDescriptor().getMethods().get(16),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(),
@@ -1449,7 +1513,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(16),
+          getDescriptor().getMethods().get(17),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(),
@@ -1464,7 +1528,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(17),
+          getDescriptor().getMethods().get(18),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(),
@@ -1479,7 +1543,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(18),
+          getDescriptor().getMethods().get(19),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(),
@@ -1494,7 +1558,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(19),
+          getDescriptor().getMethods().get(20),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(),
@@ -1509,7 +1573,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(20),
+          getDescriptor().getMethods().get(21),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(),
@@ -1524,7 +1588,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.WrappedJsonProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(21),
+          getDescriptor().getMethods().get(22),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance(),
@@ -1539,7 +1603,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto 
request,
           
com.google.protobuf.RpcCallback<org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto>
 done) {
         channel.callMethod(
-          getDescriptor().getMethods().get(22),
+          getDescriptor().getMethods().get(23),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance(),
@@ -1561,6 +1625,11 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.StopClusterRequestProto request)
           throws com.google.protobuf.ServiceException;
 
+      public 
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto 
upgradeContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto 
request)
+          throws com.google.protobuf.ServiceException;
+
       public org.apache.slider.api.proto.Messages.FlexClusterResponseProto 
flexCluster(
           com.google.protobuf.RpcController controller,
           org.apache.slider.api.proto.Messages.FlexClusterRequestProto request)
@@ -1691,12 +1760,24 @@ public final class SliderClusterAPI {
       }
 
 
+      public 
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto 
upgradeContainers(
+          com.google.protobuf.RpcController controller,
+          org.apache.slider.api.proto.Messages.UpgradeContainersRequestProto 
request)
+          throws com.google.protobuf.ServiceException {
+        return 
(org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto) 
channel.callBlockingMethod(
+          getDescriptor().getMethods().get(1),
+          controller,
+          request,
+          
org.apache.slider.api.proto.Messages.UpgradeContainersResponseProto.getDefaultInstance());
+      }
+
+
       public org.apache.slider.api.proto.Messages.FlexClusterResponseProto 
flexCluster(
           com.google.protobuf.RpcController controller,
           org.apache.slider.api.proto.Messages.FlexClusterRequestProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.FlexClusterResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(1),
+          getDescriptor().getMethods().get(2),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.FlexClusterResponseProto.getDefaultInstance());
@@ -1708,7 +1789,7 @@ public final class SliderClusterAPI {
           
org.apache.slider.api.proto.Messages.GetJSONClusterStatusRequestProto request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(2),
+          getDescriptor().getMethods().get(3),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetJSONClusterStatusResponseProto.getDefaultInstance());
@@ -1720,7 +1801,7 @@ public final class SliderClusterAPI {
           
org.apache.slider.api.proto.Messages.GetInstanceDefinitionRequestProto request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(3),
+          getDescriptor().getMethods().get(4),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetInstanceDefinitionResponseProto.getDefaultInstance());
@@ -1732,7 +1813,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(4),
+          getDescriptor().getMethods().get(5),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ListNodeUUIDsByRoleResponseProto.getDefaultInstance());
@@ -1744,7 +1825,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetNodeRequestProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.GetNodeResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(5),
+          getDescriptor().getMethods().get(6),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetNodeResponseProto.getDefaultInstance());
@@ -1756,7 +1837,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetClusterNodesRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(6),
+          getDescriptor().getMethods().get(7),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetClusterNodesResponseProto.getDefaultInstance());
@@ -1768,7 +1849,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EchoRequestProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.EchoResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(7),
+          getDescriptor().getMethods().get(8),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.EchoResponseProto.getDefaultInstance());
@@ -1780,7 +1861,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.KillContainerRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.KillContainerResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(8),
+          getDescriptor().getMethods().get(9),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.KillContainerResponseProto.getDefaultInstance());
@@ -1792,7 +1873,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.AMSuicideRequestProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.AMSuicideResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(9),
+          getDescriptor().getMethods().get(10),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.AMSuicideResponseProto.getDefaultInstance());
@@ -1804,7 +1885,7 @@ public final class SliderClusterAPI {
           
org.apache.slider.api.proto.Messages.GetApplicationLivenessRequestProto request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(10),
+          getDescriptor().getMethods().get(11),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ApplicationLivenessInformationProto.getDefaultInstance());
@@ -1816,7 +1897,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveContainersRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(11),
+          getDescriptor().getMethods().get(12),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetLiveContainersResponseProto.getDefaultInstance());
@@ -1828,7 +1909,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveContainerRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.ContainerInformationProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(12),
+          getDescriptor().getMethods().get(13),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ContainerInformationProto.getDefaultInstance());
@@ -1840,7 +1921,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveComponentsRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(13),
+          getDescriptor().getMethods().get(14),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetLiveComponentsResponseProto.getDefaultInstance());
@@ -1852,7 +1933,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetLiveComponentRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.ComponentInformationProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(14),
+          getDescriptor().getMethods().get(15),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.ComponentInformationProto.getDefaultInstance());
@@ -1864,7 +1945,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.WrappedJsonProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(15),
+          getDescriptor().getMethods().get(16),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance());
@@ -1876,7 +1957,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.WrappedJsonProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(16),
+          getDescriptor().getMethods().get(17),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance());
@@ -1888,7 +1969,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.WrappedJsonProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(17),
+          getDescriptor().getMethods().get(18),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance());
@@ -1900,7 +1981,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.WrappedJsonProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(18),
+          getDescriptor().getMethods().get(19),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance());
@@ -1912,7 +1993,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.WrappedJsonProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(19),
+          getDescriptor().getMethods().get(20),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance());
@@ -1924,7 +2005,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.WrappedJsonProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(20),
+          getDescriptor().getMethods().get(21),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance());
@@ -1936,7 +2017,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.EmptyPayloadProto request)
           throws com.google.protobuf.ServiceException {
         return (org.apache.slider.api.proto.Messages.WrappedJsonProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(21),
+          getDescriptor().getMethods().get(22),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.WrappedJsonProto.getDefaultInstance());
@@ -1948,7 +2029,7 @@ public final class SliderClusterAPI {
           org.apache.slider.api.proto.Messages.GetCertificateStoreRequestProto 
request)
           throws com.google.protobuf.ServiceException {
         return 
(org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto) 
channel.callBlockingMethod(
-          getDescriptor().getMethods().get(22),
+          getDescriptor().getMethods().get(23),
           controller,
           request,
           
org.apache.slider.api.proto.Messages.GetCertificateStoreResponseProto.getDefaultInstance());
@@ -1970,77 +2051,80 @@ public final class SliderClusterAPI {
     java.lang.String[] descriptorData = {
       "\n\033SliderClusterProtocol.proto\022\025org.apach" +
       "e.slider.api\032\033SliderClusterMessages.prot" +
-      "o2\303\025\n\027SliderClusterProtocolPB\022n\n\013stopClu" +
+      "o2\306\026\n\027SliderClusterProtocolPB\022n\n\013stopClu" +
       "ster\022..org.apache.slider.api.StopCluster" +
       "RequestProto\032/.org.apache.slider.api.Sto" +
-      "pClusterResponseProto\022n\n\013flexCluster\022..o" +
-      "rg.apache.slider.api.FlexClusterRequestP" +
-      "roto\032/.org.apache.slider.api.FlexCluster" +
-      "ResponseProto\022\211\001\n\024getJSONClusterStatus\0227" +
-      ".org.apache.slider.api.GetJSONClusterSta",
-      "tusRequestProto\0328.org.apache.slider.api." +
-      "GetJSONClusterStatusResponseProto\022\214\001\n\025ge" +
-      "tInstanceDefinition\0228.org.apache.slider." +
-      "api.GetInstanceDefinitionRequestProto\0329." +
-      "org.apache.slider.api.GetInstanceDefinit" +
-      "ionResponseProto\022\206\001\n\023listNodeUUIDsByRole" +
-      "\0226.org.apache.slider.api.ListNodeUUIDsBy" +
-      "RoleRequestProto\0327.org.apache.slider.api" +
-      ".ListNodeUUIDsByRoleResponseProto\022b\n\007get" +
-      "Node\022*.org.apache.slider.api.GetNodeRequ",
-      "estProto\032+.org.apache.slider.api.GetNode" +
-      "ResponseProto\022z\n\017getClusterNodes\0222.org.a" +
-      "pache.slider.api.GetClusterNodesRequestP" +
-      "roto\0323.org.apache.slider.api.GetClusterN" +
-      "odesResponseProto\022Y\n\004echo\022\'.org.apache.s" +
-      "lider.api.EchoRequestProto\032(.org.apache." +
-      "slider.api.EchoResponseProto\022t\n\rkillCont" +
-      "ainer\0220.org.apache.slider.api.KillContai" +
-      "nerRequestProto\0321.org.apache.slider.api." +
-      "KillContainerResponseProto\022h\n\tamSuicide\022",
-      ",.org.apache.slider.api.AMSuicideRequest" +
-      "Proto\032-.org.apache.slider.api.AMSuicideR" +
-      "esponseProto\022\217\001\n\026getLivenessInformation\022" +
-      "9.org.apache.slider.api.GetApplicationLi" +
-      "venessRequestProto\032:.org.apache.slider.a" +
-      "pi.ApplicationLivenessInformationProto\022\200" +
-      "\001\n\021getLiveContainers\0224.org.apache.slider" +
-      ".api.GetLiveContainersRequestProto\0325.org" +
-      ".apache.slider.api.GetLiveContainersResp" +
-      "onseProto\022y\n\020getLiveContainer\0223.org.apac",
-      "he.slider.api.GetLiveContainerRequestPro" +
-      "to\0320.org.apache.slider.api.ContainerInfo" +
-      "rmationProto\022\200\001\n\021getLiveComponents\0224.org" +
-      ".apache.slider.api.GetLiveComponentsRequ" +
-      "estProto\0325.org.apache.slider.api.GetLive" +
-      "ComponentsResponseProto\022y\n\020getLiveCompon" +
-      "ent\0223.org.apache.slider.api.GetLiveCompo" +
-      "nentRequestProto\0320.org.apache.slider.api" +
-      ".ComponentInformationProto\022d\n\017getModelDe" +
-      "sired\022(.org.apache.slider.api.EmptyPaylo",
+      "pClusterResponseProto\022\200\001\n\021upgradeContain" +
+      "ers\0224.org.apache.slider.api.UpgradeConta" +
+      "inersRequestProto\0325.org.apache.slider.ap" +
+      "i.UpgradeContainersResponseProto\022n\n\013flex" +
+      "Cluster\022..org.apache.slider.api.FlexClus",
+      "terRequestProto\032/.org.apache.slider.api." +
+      "FlexClusterResponseProto\022\211\001\n\024getJSONClus" +
+      "terStatus\0227.org.apache.slider.api.GetJSO" +
+      "NClusterStatusRequestProto\0328.org.apache." +
+      "slider.api.GetJSONClusterStatusResponseP" +
+      "roto\022\214\001\n\025getInstanceDefinition\0228.org.apa" +
+      "che.slider.api.GetInstanceDefinitionRequ" +
+      "estProto\0329.org.apache.slider.api.GetInst" +
+      "anceDefinitionResponseProto\022\206\001\n\023listNode" +
+      "UUIDsByRole\0226.org.apache.slider.api.List",
+      "NodeUUIDsByRoleRequestProto\0327.org.apache" +
+      ".slider.api.ListNodeUUIDsByRoleResponseP" +
+      "roto\022b\n\007getNode\022*.org.apache.slider.api." +
+      "GetNodeRequestProto\032+.org.apache.slider." +
+      "api.GetNodeResponseProto\022z\n\017getClusterNo" +
+      "des\0222.org.apache.slider.api.GetClusterNo" +
+      "desRequestProto\0323.org.apache.slider.api." +
+      "GetClusterNodesResponseProto\022Y\n\004echo\022\'.o" +
+      "rg.apache.slider.api.EchoRequestProto\032(." +
+      "org.apache.slider.api.EchoResponseProto\022",
+      "t\n\rkillContainer\0220.org.apache.slider.api" +
+      ".KillContainerRequestProto\0321.org.apache." +
+      "slider.api.KillContainerResponseProto\022h\n" +
+      "\tamSuicide\022,.org.apache.slider.api.AMSui" +
+      "cideRequestProto\032-.org.apache.slider.api" +
+      ".AMSuicideResponseProto\022\217\001\n\026getLivenessI" +
+      "nformation\0229.org.apache.slider.api.GetAp" +
+      "plicationLivenessRequestProto\032:.org.apac" +
+      "he.slider.api.ApplicationLivenessInforma" +
+      "tionProto\022\200\001\n\021getLiveContainers\0224.org.ap",
+      "ache.slider.api.GetLiveContainersRequest" +
+      "Proto\0325.org.apache.slider.api.GetLiveCon" +
+      "tainersResponseProto\022y\n\020getLiveContainer" +
+      "\0223.org.apache.slider.api.GetLiveContaine" +
+      "rRequestProto\0320.org.apache.slider.api.Co" +
+      "ntainerInformationProto\022\200\001\n\021getLiveCompo" +
+      "nents\0224.org.apache.slider.api.GetLiveCom" +
+      "ponentsRequestProto\0325.org.apache.slider." +
+      "api.GetLiveComponentsResponseProto\022y\n\020ge" +
+      "tLiveComponent\0223.org.apache.slider.api.G",
+      "etLiveComponentRequestProto\0320.org.apache" +
+      ".slider.api.ComponentInformationProto\022d\n" +
+      "\017getModelDesired\022(.org.apache.slider.api" +
+      ".EmptyPayloadProto\032\'.org.apache.slider.a" +
+      "pi.WrappedJsonProto\022k\n\026getModelDesiredAp" +
+      "pconf\022(.org.apache.slider.api.EmptyPaylo" +
       "adProto\032\'.org.apache.slider.api.WrappedJ" +
-      "sonProto\022k\n\026getModelDesiredAppconf\022(.org" +
-      ".apache.slider.api.EmptyPayloadProto\032\'.o" +
-      "rg.apache.slider.api.WrappedJsonProto\022m\n" +
-      "\030getModelDesiredResources\022(.org.apache.s" +
-      "lider.api.EmptyPayloadProto\032\'.org.apache" +
-      ".slider.api.WrappedJsonProto\022e\n\020getModel" +
-      "Resolved\022(.org.apache.slider.api.EmptyPa" +
-      "yloadProto\032\'.org.apache.slider.api.Wrapp" +
-      "edJsonProto\022l\n\027getModelResolvedAppconf\022(",
-      ".org.apache.slider.api.EmptyPayloadProto" +
-      "\032\'.org.apache.slider.api.WrappedJsonProt" +
-      "o\022n\n\031getModelResolvedResources\022(.org.apa" +
-      "che.slider.api.EmptyPayloadProto\032\'.org.a" +
-      "pache.slider.api.WrappedJsonProto\022e\n\020get" +
-      "LiveResources\022(.org.apache.slider.api.Em" +
-      "ptyPayloadProto\032\'.org.apache.slider.api." +
-      "WrappedJsonProto\022\214\001\n\031getClientCertificat" +
-      "eStore\0226.org.apache.slider.api.GetCertif" +
-      "icateStoreRequestProto\0327.org.apache.slid",
-      "er.api.GetCertificateStoreResponseProtoB" +
-      "5\n\033org.apache.slider.api.protoB\020SliderCl" +
-      "usterAPI\210\001\001\240\001\001"
+      "sonProto\022m\n\030getModelDesiredResources\022(.o" +
+      "rg.apache.slider.api.EmptyPayloadProto\032\'" +
+      ".org.apache.slider.api.WrappedJsonProto\022",
+      "e\n\020getModelResolved\022(.org.apache.slider." +
+      "api.EmptyPayloadProto\032\'.org.apache.slide" +
+      "r.api.WrappedJsonProto\022l\n\027getModelResolv" +
+      "edAppconf\022(.org.apache.slider.api.EmptyP" +
+      "ayloadProto\032\'.org.apache.slider.api.Wrap" +
+      "pedJsonProto\022n\n\031getModelResolvedResource" +
+      "s\022(.org.apache.slider.api.EmptyPayloadPr" +
+      "oto\032\'.org.apache.slider.api.WrappedJsonP" +
+      "roto\022e\n\020getLiveResources\022(.org.apache.sl" +
+      "ider.api.EmptyPayloadProto\032\'.org.apache.",
+      "slider.api.WrappedJsonProto\022\214\001\n\031getClien" +
+      "tCertificateStore\0226.org.apache.slider.ap" +
+      "i.GetCertificateStoreRequestProto\0327.org." +
+      "apache.slider.api.GetCertificateStoreRes" +
+      "ponseProtoB5\n\033org.apache.slider.api.prot" +
+      "oB\020SliderClusterAPI\210\001\001\240\001\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner 
assigner =
       new 
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/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 883942d..ffb8909 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
@@ -22,6 +22,7 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.io.Files;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
@@ -100,10 +101,12 @@ 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.common.params.ActionUpgradeArgs;
 import org.apache.slider.common.params.Arguments;
 import org.apache.slider.common.params.ClientArgs;
 import org.apache.slider.common.params.CommonArgs;
 import org.apache.slider.common.params.LaunchArgsAccessor;
+import org.apache.slider.common.params.SliderActions;
 import org.apache.slider.common.tools.ConfigHelper;
 import org.apache.slider.common.tools.Duration;
 import org.apache.slider.common.tools.SliderFileSystem;
@@ -125,6 +128,7 @@ import 
org.apache.slider.core.exceptions.NoSuchNodeException;
 import org.apache.slider.core.exceptions.NotFoundException;
 import org.apache.slider.core.exceptions.SliderException;
 import org.apache.slider.core.exceptions.UnknownApplicationInstanceException;
+import org.apache.slider.core.exceptions.UsageException;
 import org.apache.slider.core.exceptions.WaitTimeoutException;
 import org.apache.slider.core.launch.AppMasterLauncher;
 import org.apache.slider.core.launch.ClasspathConstructor;
@@ -310,6 +314,9 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
       case ACTION_UPDATE:
         exitCode = actionUpdate(clusterName, 
serviceArgs.getActionUpdateArgs());
         break;
+      case ACTION_UPGRADE:
+        exitCode = actionUpgrade(clusterName, 
serviceArgs.getActionUpgradeArgs());
+        break;
       case ACTION_CREATE:
         exitCode = actionCreate(clusterName, 
serviceArgs.getActionCreateArgs());
         break;
@@ -495,6 +502,10 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
         exitCode = actionUpdate(clusterName, 
serviceArgs.getActionUpdateArgs());
         break;
       
+      case ACTION_UPGRADE:
+        exitCode = actionUpgrade(clusterName, 
serviceArgs.getActionUpgradeArgs());
+        break;
+
       case ACTION_VERSION:
         exitCode = actionVersion();
         break;
@@ -705,6 +716,111 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
     return startCluster(clustername, createArgs);
   }
 
+  @Override
+  public int actionUpgrade(String clustername, ActionUpgradeArgs upgradeArgs)
+      throws YarnException, IOException {
+    File template = upgradeArgs.template;
+    File resources = upgradeArgs.resources;
+    List<String> containers = upgradeArgs.containers;
+    List<String> components = upgradeArgs.components;
+
+    // For upgrade spec, only --template and --resources should be specified
+    if (template != null || resources != null) {
+      if (CollectionUtils.isNotEmpty(containers)) {
+        throw new BadCommandArgumentsException(
+            "Option %s cannot be specified with %s or %s",
+            Arguments.ARG_CONTAINERS, Arguments.ARG_TEMPLATE,
+            Arguments.ARG_RESOURCES);
+      }
+      if (CollectionUtils.isNotEmpty(components)) {
+        throw new BadCommandArgumentsException(
+            "Option %s cannot be specified with %s or %s",
+            Arguments.ARG_COMPONENTS, Arguments.ARG_TEMPLATE,
+            Arguments.ARG_RESOURCES);
+      }
+      buildInstanceDefinition(clustername, upgradeArgs, true, true);
+      SliderClusterOperations clusterOperations = 
createClusterOperations(clustername);
+      clusterOperations.amSuicide("Application upgrade", 1, 1000);
+      // upgradeYarnApplicationSubmissionContext(clustername, upgradeArgs);
+      return EXIT_SUCCESS;
+    }
+
+    if (CollectionUtils.isNotEmpty(containers)
+        && CollectionUtils.isNotEmpty(components)) {
+      throw new BadCommandArgumentsException(
+          "Only one of option %s or %s can be specified",
+          Arguments.ARG_CONTAINERS, Arguments.ARG_COMPONENTS);
+    }
+    if (CollectionUtils.isNotEmpty(containers)) {
+      log.info("Going to stop containers (total {}) : {}", containers.size(),
+          containers);
+    }
+    if (CollectionUtils.isNotEmpty(components)) {
+      log.info("Going to stop all containers of components (total {}) : {}",
+          components.size(), components);
+    }
+    return actionUpgradeContainers(clustername, upgradeArgs);
+  }
+
+  private int actionUpgradeContainers(String clustername,
+      ActionUpgradeArgs upgradeArgs) throws YarnException, IOException {
+    verifyBindingsDefined();
+    SliderUtils.validateClusterName(clustername);
+    int waittime = upgradeArgs.getWaittime(); // ignored for now
+    String text = "Upgrade containers";
+    log.debug("actionUpgradeContainers({}, reason={}, wait={})", clustername,
+        text, waittime);
+
+    // is this actually a known cluster?
+    sliderFileSystem.locateInstanceDefinition(clustername);
+    ApplicationReport app = findInstance(clustername);
+    if (app == null) {
+      // exit early
+      log.info("Cluster {} not running", clustername);
+      // not an error to try to upgrade a stopped cluster
+      return EXIT_SUCCESS;
+    }
+    log.debug("App to upgrade was found: {}:\n{}", clustername,
+        new SliderUtils.OnDemandReportStringifier(app));
+    if (app.getYarnApplicationState().ordinal() >= 
YarnApplicationState.FINISHED
+        .ordinal()) {
+      log.info("Cluster {} is in a terminated state {}", clustername,
+          app.getYarnApplicationState());
+      return EXIT_SUCCESS;
+    }
+
+    // IPC request to upgrade containers is possible if the app is running.
+    if (app.getYarnApplicationState().ordinal() < YarnApplicationState.RUNNING
+        .ordinal()) {
+      log.info("Cluster {} is in a pre-running state {}. It needs to be "
+          + "RUNNING to upgrade.", clustername, app.getYarnApplicationState());
+      return EXIT_SUCCESS;
+    }
+
+    try {
+      SliderClusterProtocol appMaster = connect(app);
+      Messages.UpgradeContainersRequestProto r =
+        Messages.UpgradeContainersRequestProto
+                .newBuilder()
+                .setMessage(text)
+                .addAllContainer(upgradeArgs.containers)
+                .addAllComponent(upgradeArgs.components)
+                .build();
+      appMaster.upgradeContainers(r);
+      log.debug("Cluster upgrade containers issued");
+    } catch (YarnException e) {
+      log.warn("Exception while trying to upgrade containers {}", clustername,
+          e);
+      return EXIT_FALSE;
+    } catch (IOException e) {
+      log.warn("Exception while trying to upgrade containers {}", clustername,
+          e);
+      return EXIT_FALSE;
+    }
+
+    return EXIT_SUCCESS;
+  }
+
   private static void checkForCredentials(Configuration conf,
       ConfTree tree) throws IOException {
     if (tree.credentials == null || tree.credentials.size()==0) {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/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
index c7756da..8a6e49a 100644
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java
+++ b/slider-core/src/main/java/org/apache/slider/client/SliderClientAPI.java
@@ -41,6 +41,7 @@ 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.common.params.ActionUpgradeArgs;
 import org.apache.slider.core.exceptions.BadCommandArgumentsException;
 import org.apache.slider.core.exceptions.SliderException;
 import org.apache.slider.providers.AbstractClientProvider;
@@ -158,6 +159,19 @@ public interface SliderClientAPI extends Service {
   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.

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java
 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java
index feae7eb..d9fde41 100644
--- 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java
+++ 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionPackageArgs.java
@@ -58,7 +58,8 @@ public class ActionPackageArgs extends AbstractActionArgs {
   @Parameter(names = {ARG_VERSION}, description = "Package version")
   public String version;
 
-  @Parameter(names = {ARG_REPLACE_PKG}, description = "Overwrite existing 
package")
+  @Parameter(names = {ARG_REPLACE_PKG}, 
+      description = "Overwrite existing package")
   public boolean replacePkg = false;
 
   @Parameter(names = {ARG_OUTPUT, ARG_OUTPUT_SHORT},

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.java
 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.java
new file mode 100644
index 0000000..ec46f50
--- /dev/null
+++ 
b/slider-core/src/main/java/org/apache/slider/common/params/ActionUpgradeArgs.java
@@ -0,0 +1,70 @@
+/*
+ * 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 java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+import com.beust.jcommander.ParametersDelegate;
+
+@Parameters(commandNames = { SliderActions.ACTION_UPGRADE },
+            commandDescription = SliderActions.DESCRIBE_ACTION_UPGRADE)
+public class ActionUpgradeArgs extends AbstractClusterBuildingActionArgs
+    implements WaitTimeAccessor, LaunchArgsAccessor {
+
+  @Override
+  public String getActionName() {
+    return SliderActions.ACTION_UPGRADE;
+  }
+
+  @ParametersDelegate
+  LaunchArgsDelegate launchArgs = new LaunchArgsDelegate();
+
+  @Override
+  public File getOutputFile() {
+    return launchArgs.getOutputFile();
+  }
+
+  @Override
+  public String getRmAddress() {
+    return launchArgs.getRmAddress();
+  }
+
+  @Override
+  public int getWaittime() {
+    return launchArgs.getWaittime();
+  }
+
+  @Override
+  public void setWaittime(int waittime) {
+    launchArgs.setWaittime(waittime);
+  }
+
+  @Parameter(names={ARG_CONTAINERS}, variableArity = true,
+             description = "stop specific containers")
+  public List<String> containers = new ArrayList<String>(0);
+
+  @Parameter(names={ARG_COMPONENTS}, variableArity = true,
+      description = "stop all containers of specific components")
+  public List<String> components = new ArrayList<String>(0);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/slider-core/src/main/java/org/apache/slider/common/params/Arguments.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/params/Arguments.java 
b/slider-core/src/main/java/org/apache/slider/common/params/Arguments.java
index d19222a..89d5a3e 100644
--- a/slider-core/src/main/java/org/apache/slider/common/params/Arguments.java
+++ b/slider-core/src/main/java/org/apache/slider/common/params/Arguments.java
@@ -35,6 +35,7 @@ public interface Arguments {
   String ARG_CONFDIR = "--appconf";
   String ARG_COMPONENT = "--component";
   String ARG_COMPONENT_SHORT = "--comp";
+  String ARG_COMPONENTS = "--components";
   String ARG_COMP_OPT= "--compopt";
   String ARG_COMP_OPT_SHORT = "--co";
   String ARG_CREDENTIALS = "--credentials";

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/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 fcc1b81..f594407 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
@@ -71,7 +71,7 @@ public class ClientArgs extends CommonArgs {
   private final ActionThawArgs actionThawArgs = new ActionThawArgs();
   private final ActionUpdateArgs actionUpdateArgs = new ActionUpdateArgs();
   private final ActionVersionArgs actionVersionArgs = new ActionVersionArgs();
-
+  private final ActionUpgradeArgs actionUpgradeArgs = new ActionUpgradeArgs();
 
   public ClientArgs(String[] args) {
     super(args);
@@ -89,6 +89,7 @@ public class ClientArgs extends CommonArgs {
         actionBuildArgs,
         actionCreateArgs,
         actionUpdateArgs,
+        actionUpgradeArgs,
         actionDestroyArgs,
         actionDiagnosticArgs,
         actionExistsArgs,
@@ -157,6 +158,10 @@ public class ClientArgs extends CommonArgs {
     return actionUpdateArgs;
   }
 
+  public ActionUpgradeArgs getActionUpgradeArgs() {
+    return actionUpgradeArgs;
+  }
+
   public ActionCreateArgs getActionCreateArgs() {
     return actionCreateArgs;
   }
@@ -284,6 +289,9 @@ public class ClientArgs extends CommonArgs {
     } else if (SliderActions.ACTION_UPDATE.equals(action)) {
       bindCoreAction(actionUpdateArgs);
 
+    } else if (SliderActions.ACTION_UPGRADE.equals(action)) {
+      bindCoreAction(actionUpgradeArgs);
+
     } else if (SliderActions.ACTION_VERSION.equals(action)) {
       bindCoreAction(actionVersionArgs);
 

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/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 f7b97d5..6c34eb3 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
@@ -28,6 +28,7 @@ public interface SliderActions {
   String ACTION_BUILD = "build";
   String ACTION_CREATE = "create";
   String ACTION_UPDATE = "update";
+  String ACTION_UPGRADE = "upgrade";
   String ACTION_DESTROY = "destroy";
   String ACTION_ECHO = "echo";
   String ACTION_EXISTS = "exists";
@@ -58,6 +59,8 @@ public interface SliderActions {
       "Create a live Slider application";
   String DESCRIBE_ACTION_UPDATE =
       "Update template for a Slider application";
+  String DESCRIBE_ACTION_UPGRADE =
+      "Rolling upgrade/downgrade the application to a newer/previous version";
   String DESCRIBE_ACTION_DESTROY =
         "Destroy a frozen Slider application)";
   String DESCRIBE_ACTION_EXISTS =

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7ae7d153/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
index 1df1533..5cd7ead 100644
--- 
a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
+++ 
b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentClientProvider.java
@@ -150,7 +150,6 @@ public class AgentClientProvider extends 
AbstractClientProvider
     String appDef = null;
     try {
       // Validate the app definition
-      // Validate the app definition
       appDef = SliderUtils.getApplicationDefinitionPath(instanceDefinition
           .getAppConfOperations());
     } catch (BadConfigException bce) {

Reply via email to