You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by zz...@apache.org on 2013/08/16 01:22:09 UTC

[1/2] HELIX-166: Rename modes to auto, semi-auto, and custom, rb=13444

Updated Branches:
  refs/heads/master f38b3da29 -> 13d19e914


http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/model/TestIdealState.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/model/TestIdealState.java b/helix-core/src/test/java/org/apache/helix/model/TestIdealState.java
index 89b02ad..120ab94 100644
--- a/helix-core/src/test/java/org/apache/helix/model/TestIdealState.java
+++ b/helix-core/src/test/java/org/apache/helix/model/TestIdealState.java
@@ -23,10 +23,11 @@ import java.util.*;
 
 import org.apache.helix.TestHelper;
 import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-
+@SuppressWarnings("deprecation")
 public class TestIdealState
 {
   @Test
@@ -46,8 +47,8 @@ public class TestIdealState
     instanceState.put("node_4", "SLAVE");
     idealState.getRecord().setMapField("TestDB_1", instanceState);
 
-    // test AUTO mode
-    idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
+    // test SEMI_AUTO mode
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
     Set<String> instances = idealState.getInstanceSet("TestDB_0");
 //    System.out.println("instances: " + instances);
     Assert.assertEquals(instances.size(), 2, "Should contain node_1 and node_2");
@@ -58,7 +59,7 @@ public class TestIdealState
     Assert.assertEquals(instances, Collections.emptySet(), "Should get empty set");
     
     // test CUSTOMIZED mode
-    idealState.setIdealStateMode(IdealStateModeProperty.CUSTOMIZED.toString());
+    idealState.setRebalanceMode(RebalanceMode.CUSTOMIZED);
     instances = idealState.getInstanceSet("TestDB_1");
 //    System.out.println("instances: " + instances);
     Assert.assertEquals(instances.size(), 2, "Should contain node_3 and node_4");
@@ -74,21 +75,59 @@ public class TestIdealState
 
   @Test
   public void testReplicas() {
-      IdealState idealState = new IdealState("test-db");
-      idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
-      idealState.setNumPartitions(4);
-      idealState.setStateModelDefRef("MasterSlave");
+    IdealState idealState = new IdealState("test-db");
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
+    idealState.setNumPartitions(4);
+    idealState.setStateModelDefRef("MasterSlave");
+
+    idealState.setReplicas("" + 2);
+
+    List<String> preferenceList = new ArrayList<String>();
+    preferenceList.add("node_0");
+    idealState.getRecord().setListField("test-db_0", preferenceList);
+    Assert.assertFalse(idealState.isValid(), "should fail since replicas not equals to preference-list size");
+
+    preferenceList.add("node_1");
+    idealState.getRecord().setListField("test-db_0", preferenceList);
+    Assert.assertTrue(idealState.isValid(), "should pass since replicas equals to preference-list size");
+  }
+
+  @Test
+  public void testFullAutoModeCompatibility() {
+    IdealState idealStateOld = new IdealState("old-test-db");
+    idealStateOld.setIdealStateMode(IdealStateModeProperty.AUTO_REBALANCE.toString());
+    Assert.assertEquals(idealStateOld.getRebalanceMode(), RebalanceMode.FULL_AUTO);
+    Assert.assertEquals(idealStateOld.getIdealStateMode(), IdealStateModeProperty.AUTO_REBALANCE);
+
+    IdealState idealStateNew = new IdealState("new-test-db");
+    idealStateNew.setRebalanceMode(RebalanceMode.FULL_AUTO);
+    Assert.assertEquals(idealStateNew.getIdealStateMode(), IdealStateModeProperty.AUTO_REBALANCE);
+    Assert.assertEquals(idealStateNew.getRebalanceMode(), RebalanceMode.FULL_AUTO);
+  }
 
-      idealState.setReplicas("" + 2);
+  @Test
+  public void testSemiAutoModeCompatibility() {
+    IdealState idealStateOld = new IdealState("old-test-db");
+    idealStateOld.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
+    Assert.assertEquals(idealStateOld.getRebalanceMode(), RebalanceMode.SEMI_AUTO);
+    Assert.assertEquals(idealStateOld.getIdealStateMode(), IdealStateModeProperty.AUTO);
 
-      List<String> preferenceList = new ArrayList<String>();
-      preferenceList.add("node_0");
-      idealState.getRecord().setListField("test-db_0", preferenceList);
-      Assert.assertFalse(idealState.isValid(), "should fail since replicas not equals to preference-list size");
+    IdealState idealStateNew = new IdealState("new-test-db");
+    idealStateNew.setRebalanceMode(RebalanceMode.SEMI_AUTO);
+    Assert.assertEquals(idealStateNew.getIdealStateMode(), IdealStateModeProperty.AUTO);
+    Assert.assertEquals(idealStateNew.getRebalanceMode(), RebalanceMode.SEMI_AUTO);
+  }
 
-      preferenceList.add("node_1");
-      idealState.getRecord().setListField("test-db_0", preferenceList);
-      Assert.assertTrue(idealState.isValid(), "should pass since replicas equals to preference-list size");
+  @Test
+  public void testCustomizedModeCompatibility() {
+    IdealState idealStateOld = new IdealState("old-test-db");
+    idealStateOld.setIdealStateMode(IdealStateModeProperty.CUSTOMIZED.toString());
+    Assert.assertEquals(idealStateOld.getRebalanceMode(), RebalanceMode.CUSTOMIZED);
+    Assert.assertEquals(idealStateOld.getIdealStateMode(), IdealStateModeProperty.CUSTOMIZED);
 
+    IdealState idealStateNew = new IdealState("new-test-db");
+    idealStateNew.setRebalanceMode(RebalanceMode.CUSTOMIZED);
+    Assert.assertEquals(idealStateNew.getIdealStateMode(), IdealStateModeProperty.CUSTOMIZED);
+    Assert.assertEquals(idealStateNew.getRebalanceMode(), RebalanceMode.CUSTOMIZED);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/model/builder/TestIdealStateBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/model/builder/TestIdealStateBuilder.java b/helix-core/src/test/java/org/apache/helix/model/builder/TestIdealStateBuilder.java
index cdb7867..1b5ba63 100644
--- a/helix-core/src/test/java/org/apache/helix/model/builder/TestIdealStateBuilder.java
+++ b/helix-core/src/test/java/org/apache/helix/model/builder/TestIdealStateBuilder.java
@@ -40,8 +40,9 @@ public class TestIdealStateBuilder {
             Assert.fail("fail to build an auto mode ideal-state.", e);
         }
 //        System.out.println("ideal-state: " + idealState);
-        Assert.assertEquals(idealState.getIdealStateMode(), IdealState.IdealStateModeProperty.AUTO,
-                "ideal-state mode should be auto");
+        Assert.assertEquals(idealState.getRebalanceMode(),
+            IdealState.RebalanceMode.SEMI_AUTO,
+            "rebalancer mode should be semi-auto");
     }
 
     @Test
@@ -60,8 +61,9 @@ public class TestIdealStateBuilder {
             Assert.fail("fail to build an auto-rebalance mode ideal-state.", e);
         }
 //        System.out.println("ideal-state: " + idealState);
-        Assert.assertEquals(idealState.getIdealStateMode(), IdealState.IdealStateModeProperty.AUTO_REBALANCE,
-                "ideal-state mode should be auto-rebalance");
+        Assert.assertEquals(idealState.getRebalanceMode(),
+            IdealState.RebalanceMode.FULL_AUTO,
+            "rebalancer mode should be auto");
 
     }
 
@@ -83,8 +85,9 @@ public class TestIdealStateBuilder {
             Assert.fail("fail to build a custom mode ideal-state.", e);
         }
 //        System.out.println("ideal-state: " + idealState);
-        Assert.assertEquals(idealState.getIdealStateMode(), IdealState.IdealStateModeProperty.CUSTOMIZED,
-                "ideal-state mode should be customized");
+        Assert.assertEquals(idealState.getRebalanceMode(),
+            IdealState.RebalanceMode.CUSTOMIZED,
+            "rebalancer mode should be customized");
 
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/recipes/distributed-lock-manager/README.md
----------------------------------------------------------------------
diff --git a/recipes/distributed-lock-manager/README.md b/recipes/distributed-lock-manager/README.md
index fdba382..f3b2fbe 100644
--- a/recipes/distributed-lock-manager/README.md
+++ b/recipes/distributed-lock-manager/README.md
@@ -137,7 +137,7 @@ This provides more details on how to setup the cluster and where to plugin appli
 Create a lock group and specify the number of locks in the lock group. 
 
 ```
-./helix-admin --zkSvr localhost:2199  --addResource lock-manager-demo lock-group 6 OnlineOffline AUTO_REBALANCE
+./helix-admin --zkSvr localhost:2199  --addResource lock-manager-demo lock-group 6 OnlineOffline FULL_AUTO
 ```
 
 ##### Start the nodes

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/recipes/distributed-lock-manager/src/main/java/org/apache/helix/lockmanager/LockManagerDemo.java
----------------------------------------------------------------------
diff --git a/recipes/distributed-lock-manager/src/main/java/org/apache/helix/lockmanager/LockManagerDemo.java b/recipes/distributed-lock-manager/src/main/java/org/apache/helix/lockmanager/LockManagerDemo.java
index 11cfdaf..ac08274 100644
--- a/recipes/distributed-lock-manager/src/main/java/org/apache/helix/lockmanager/LockManagerDemo.java
+++ b/recipes/distributed-lock-manager/src/main/java/org/apache/helix/lockmanager/LockManagerDemo.java
@@ -32,8 +32,8 @@ import org.apache.helix.HelixManager;
 import org.apache.helix.controller.HelixControllerMain;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
 import org.apache.helix.model.ExternalView;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.tools.StateModelConfigGenerator;
 
 public class LockManagerDemo
@@ -64,7 +64,7 @@ public class LockManagerDemo
       admin.addStateModelDef(clusterName, "OnlineOffline",
           new StateModelDefinition(generator.generateConfigForOnlineOffline()));
       admin.addResource(clusterName, lockGroupName, numPartitions,
-          "OnlineOffline", IdealStateModeProperty.AUTO_REBALANCE.toString());
+          "OnlineOffline", RebalanceMode.FULL_AUTO.toString());
       admin.rebalance(clusterName, lockGroupName, 1);
       for (int i = 0; i < numInstances; i++)
       {

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/recipes/rabbitmq-consumer-group/src/main/java/org/apache/helix/recipes/rabbitmq/SetupConsumerCluster.java
----------------------------------------------------------------------
diff --git a/recipes/rabbitmq-consumer-group/src/main/java/org/apache/helix/recipes/rabbitmq/SetupConsumerCluster.java b/recipes/rabbitmq-consumer-group/src/main/java/org/apache/helix/recipes/rabbitmq/SetupConsumerCluster.java
index 93aadb4..8bc0a0d 100644
--- a/recipes/rabbitmq-consumer-group/src/main/java/org/apache/helix/recipes/rabbitmq/SetupConsumerCluster.java
+++ b/recipes/rabbitmq-consumer-group/src/main/java/org/apache/helix/recipes/rabbitmq/SetupConsumerCluster.java
@@ -22,7 +22,7 @@ package org.apache.helix.recipes.rabbitmq;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.StateModelDefinition;
 import org.apache.helix.tools.StateModelConfigGenerator;
 
@@ -62,7 +62,7 @@ public class SetupConsumerCluster
       // add resource "topic" which has 6 partitions
       String resourceName = DEFAULT_RESOURCE_NAME;
       admin.addResource(clusterName, resourceName, DEFAULT_PARTITION_NUMBER, DEFAULT_STATE_MODEL,
-          IdealStateModeProperty.AUTO_REBALANCE.toString());
+          RebalanceMode.FULL_AUTO.toString());
       
       admin.rebalance(clusterName, resourceName, 1);
 

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/recipes/rsync-replicated-file-system/src/main/java/org/apache/helix/filestore/SetupCluster.java
----------------------------------------------------------------------
diff --git a/recipes/rsync-replicated-file-system/src/main/java/org/apache/helix/filestore/SetupCluster.java b/recipes/rsync-replicated-file-system/src/main/java/org/apache/helix/filestore/SetupCluster.java
index 77cc2f9..097d27b 100644
--- a/recipes/rsync-replicated-file-system/src/main/java/org/apache/helix/filestore/SetupCluster.java
+++ b/recipes/rsync-replicated-file-system/src/main/java/org/apache/helix/filestore/SetupCluster.java
@@ -22,7 +22,7 @@ package org.apache.helix.filestore;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.helix.model.StateModelDefinition;
 import org.apache.helix.tools.StateModelConfigGenerator;
@@ -75,7 +75,7 @@ public class SetupCluster
       // add resource "repository" which has 1 partition
       String resourceName = DEFAULT_RESOURCE_NAME;
       admin.addResource(clusterName, resourceName, DEFAULT_PARTITION_NUMBER,
-          DEFAULT_STATE_MODEL, IdealStateModeProperty.AUTO.toString());
+          DEFAULT_STATE_MODEL, RebalanceMode.SEMI_AUTO.toString());
       admin.rebalance(clusterName, resourceName, 1);
 
     } finally

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/recipes/task-execution/src/main/java/org/apache/helix/taskexecution/TaskCluster.java
----------------------------------------------------------------------
diff --git a/recipes/task-execution/src/main/java/org/apache/helix/taskexecution/TaskCluster.java b/recipes/task-execution/src/main/java/org/apache/helix/taskexecution/TaskCluster.java
index c49659e..de462f0 100644
--- a/recipes/task-execution/src/main/java/org/apache/helix/taskexecution/TaskCluster.java
+++ b/recipes/task-execution/src/main/java/org/apache/helix/taskexecution/TaskCluster.java
@@ -24,9 +24,9 @@ import org.apache.helix.manager.zk.ZKHelixAdmin;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.HelixConfigScope;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.StateModelDefinition;
 import org.apache.helix.model.HelixConfigScope.ConfigScopeProperty;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.model.builder.HelixConfigScopeBuilder;
 import org.apache.helix.tools.StateModelConfigGenerator;
 
@@ -78,7 +78,7 @@ public class TaskCluster {
 			clusterConfig.set(clusterScope, node.getId(), node.toJson());
 			_admin.addResource(_clusterName, node.getId(),
 					node.getNumPartitions(), DEFAULT_STATE_MODEL,
-					IdealStateModeProperty.AUTO_REBALANCE.toString());
+					RebalanceMode.FULL_AUTO.toString());
 
 		}
 


[2/2] git commit: HELIX-166: Rename modes to auto, semi-auto, and custom, rb=13444

Posted by zz...@apache.org.
HELIX-166: Rename modes to auto, semi-auto, and custom, rb=13444


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

Branch: refs/heads/master
Commit: 13d19e914e7deec29c5cd665e75df12eafbce1b1
Parents: f38b3da
Author: zzhang <zz...@apache.org>
Authored: Thu Aug 15 16:21:52 2013 -0700
Committer: zzhang <zz...@apache.org>
Committed: Thu Aug 15 16:21:52 2013 -0700

----------------------------------------------------------------------
 .../resources/ResourceGroupsResource.java       |   4 +-
 .../main/java/org/apache/helix/HelixAdmin.java  |  12 +-
 .../controller/rebalancer/AutoRebalancer.java   |   4 +-
 .../stages/BestPossibleStateCalcStage.java      |   7 +-
 .../stages/RebalanceIdealStateStage.java        |   3 +-
 .../examples/IdealStateBuilderExample.java      |  11 +-
 .../helix/examples/IdealStateExample.java       |  20 +--
 .../apache/helix/manager/zk/ZKHelixAdmin.java   |  34 ++---
 .../java/org/apache/helix/model/IdealState.java | 117 ++++++++++++---
 .../helix/model/builder/AutoModeISBuilder.java  |   4 +-
 .../builder/AutoRebalanceModeISBuilder.java     |   4 +-
 .../model/builder/CustomModeISBuilder.java      |   4 +-
 .../helix/model/builder/IdealStateBuilder.java  |  13 +-
 .../participant/HelixCustomCodeRunner.java      |   4 +-
 .../org/apache/helix/tools/ClusterSetup.java    |  24 ++--
 .../apache/helix/tools/ZkLogCSVFormatter.java   |   2 +-
 .../test/java/org/apache/helix/TestHelper.java  |  10 +-
 .../java/org/apache/helix/TestZnodeModify.java  |  14 +-
 .../java/org/apache/helix/ZkUnitTestBase.java   |   8 +-
 .../helix/controller/stages/BaseStageTest.java  |   7 +-
 .../TestBestPossibleCalcStageCompatibility.java | 144 +++++++++++++++++++
 .../stages/TestBestPossibleStateCalcStage.java  |   3 +-
 .../stages/TestResourceComputationStage.java    |   3 +-
 .../helix/integration/TestAutoRebalance.java    |  15 +-
 .../TestAutoRebalancePartitionLimit.java        |   5 +-
 .../TestCustomizedIdealStateRebalancer.java     |   4 +-
 .../apache/helix/integration/TestDisable.java   |   6 +-
 .../apache/helix/integration/TestDriver.java    |  10 +-
 .../helix/integration/TestInstanceAutoJoin.java |   5 +-
 .../integration/TestInvalidAutoIdealState.java  |   9 +-
 .../helix/integration/TestRenamePartition.java  |   3 +-
 ...estStartMultipleControllersWithSameName.java |   4 +-
 .../helix/integration/TestZkReconnect.java      |   3 +-
 .../helix/manager/zk/TestZNRecordSizeLimit.java |  13 +-
 .../org/apache/helix/model/TestIdealState.java  |  71 ++++++---
 .../model/builder/TestIdealStateBuilder.java    |  15 +-
 recipes/distributed-lock-manager/README.md      |   2 +-
 .../helix/lockmanager/LockManagerDemo.java      |   4 +-
 .../recipes/rabbitmq/SetupConsumerCluster.java  |   4 +-
 .../apache/helix/filestore/SetupCluster.java    |   4 +-
 .../apache/helix/taskexecution/TaskCluster.java |   4 +-
 41 files changed, 458 insertions(+), 179 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/ResourceGroupsResource.java
----------------------------------------------------------------------
diff --git a/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/ResourceGroupsResource.java b/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/ResourceGroupsResource.java
index dbbf0a1..2bc4169 100644
--- a/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/ResourceGroupsResource.java
+++ b/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/ResourceGroupsResource.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.helix.HelixException;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.ClusterSetup;
 import org.apache.helix.webapp.RestAdminApplication;
 import org.apache.log4j.Logger;
@@ -140,7 +140,7 @@ public class ResourceGroupsResource extends Resource
             jsonParameters.getParameter(JsonParameters.STATE_MODEL_DEF_REF);
         int partitions =
             Integer.parseInt(jsonParameters.getParameter(JsonParameters.PARTITIONS));
-        String mode = IdealStateModeProperty.AUTO.toString();
+        String mode = RebalanceMode.SEMI_AUTO.toString();
         if (jsonParameters.getParameter(JsonParameters.IDEAL_STATE_MODE) != null)
         {
           mode = jsonParameters.getParameter(JsonParameters.IDEAL_STATE_MODE);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/HelixAdmin.java b/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
index 5f92c24..4791703 100644
--- a/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
+++ b/helix-core/src/main/java/org/apache/helix/HelixAdmin.java
@@ -115,13 +115,13 @@ public interface HelixAdmin
    * @param resourceName
    * @param numPartitions
    * @param stateModelRef
-   * @param idealStateMode
+   * @param rebalancerMode
    */
   void addResource(String clusterName,
                    String resourceName,
                    int numPartitions,
                    String stateModelRef,
-                   String idealStateMode);
+                   String rebalancerMode);
 
   /**
    * Add a resource to a cluster, using a bucket size > 1
@@ -130,14 +130,14 @@ public interface HelixAdmin
    * @param resourceName
    * @param numPartitions
    * @param stateModelRef
-   * @param idealStateMode
+   * @param rebalancerMode
    * @param bucketSize
    */
   void addResource(String clusterName,
                    String resourceName,
                    int numPartitions,
                    String stateModelRef,
-                   String idealStateMode,
+                   String rebalancerMode,
                    int bucketSize);
   
   /**
@@ -147,7 +147,7 @@ public interface HelixAdmin
    * @param resourceName
    * @param numPartitions
    * @param stateModelRef
-   * @param idealStateMode
+   * @param rebalancerMode
    * @param bucketSize
    * @param maxPartitionsPerInstance
    */
@@ -155,7 +155,7 @@ public interface HelixAdmin
                    String resourceName,
                    int numPartitions,
                    String stateModelRef,
-                   String idealStateMode,
+                   String rebalancerMode,
                    int bucketSize,
                    int maxPartitionsPerInstance);
   

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/controller/rebalancer/AutoRebalancer.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/AutoRebalancer.java b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/AutoRebalancer.java
index c0fb5bf..2e3cce7 100644
--- a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/AutoRebalancer.java
+++ b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/AutoRebalancer.java
@@ -41,11 +41,11 @@ import org.apache.helix.controller.strategy.AutoRebalanceStrategy.DefaultPlaceme
 import org.apache.helix.controller.strategy.AutoRebalanceStrategy.ReplicaPlacementScheme;
 import org.apache.helix.model.CurrentState;
 import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.LiveInstance;
 import org.apache.helix.model.Partition;
 import org.apache.helix.model.Resource;
 import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.log4j.Logger;
 
 /**
@@ -112,7 +112,7 @@ public class AutoRebalancer implements Rebalancer {
 
     IdealState newIdealState = new IdealState(resourceName);
     newIdealState.getRecord().setSimpleFields(currentIdealState.getRecord().getSimpleFields());
-    newIdealState.setIdealStateMode(IdealStateModeProperty.AUTO_REBALANCE.toString());
+    newIdealState.setRebalanceMode(RebalanceMode.FULL_AUTO);
     newIdealState.getRecord().setListFields(newMapping.getListFields());
     return newIdealState;
   }

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/controller/stages/BestPossibleStateCalcStage.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/controller/stages/BestPossibleStateCalcStage.java b/helix-core/src/main/java/org/apache/helix/controller/stages/BestPossibleStateCalcStage.java
index 4b9f835..79e957c 100644
--- a/helix-core/src/main/java/org/apache/helix/controller/stages/BestPossibleStateCalcStage.java
+++ b/helix-core/src/main/java/org/apache/helix/controller/stages/BestPossibleStateCalcStage.java
@@ -20,6 +20,7 @@ package org.apache.helix.controller.stages;
  */
 
 import java.util.Map;
+
 import org.apache.helix.controller.pipeline.AbstractBaseStage;
 import org.apache.helix.controller.pipeline.StageException;
 import org.apache.helix.controller.rebalancer.AutoRebalancer;
@@ -29,8 +30,8 @@ import org.apache.helix.controller.rebalancer.SemiAutoRebalancer;
 import org.apache.helix.model.IdealState;
 import org.apache.helix.model.Partition;
 import org.apache.helix.model.Resource;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.model.IdealState.IdealStateProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.util.HelixUtil;
 import org.apache.log4j.Logger;
 
@@ -120,11 +121,11 @@ public class BestPossibleStateCalcStage extends AbstractBaseStage
       }
       if (rebalancer == null)
       {
-        if (idealState.getIdealStateMode() == IdealStateModeProperty.AUTO_REBALANCE)
+        if (idealState.getRebalanceMode() == RebalanceMode.FULL_AUTO)
         {
           rebalancer = new AutoRebalancer();
         }
-        else if (idealState.getIdealStateMode() == IdealStateModeProperty.AUTO)
+        else if (idealState.getRebalanceMode() == RebalanceMode.SEMI_AUTO)
         {
           rebalancer = new SemiAutoRebalancer();
         }

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/controller/stages/RebalanceIdealStateStage.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/controller/stages/RebalanceIdealStateStage.java b/helix-core/src/main/java/org/apache/helix/controller/stages/RebalanceIdealStateStage.java
index cb69b00..a049fef 100644
--- a/helix-core/src/main/java/org/apache/helix/controller/stages/RebalanceIdealStateStage.java
+++ b/helix-core/src/main/java/org/apache/helix/controller/stages/RebalanceIdealStateStage.java
@@ -54,7 +54,8 @@ public class RebalanceIdealStateStage extends AbstractBaseStage
     for(String resourceName : idealStateMap.keySet())
     {
       IdealState currentIdealState = idealStateMap.get(resourceName);
-      if(currentIdealState.getRecord().getSimpleFields().containsKey(IdealStateProperty.REBALANCER_CLASS_NAME.toString()))
+      if(currentIdealState.getRecord().getSimpleFields().containsKey(
+          IdealStateProperty.REBALANCER_CLASS_NAME.toString()))
       {
         String rebalancerClassName = currentIdealState.getRebalancerClassName();
         LOG.info("resource " + resourceName + " use idealStateRebalancer " + rebalancerClassName);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/examples/IdealStateBuilderExample.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/examples/IdealStateBuilderExample.java b/helix-core/src/main/java/org/apache/helix/examples/IdealStateBuilderExample.java
index c516d39..2d18630 100644
--- a/helix-core/src/main/java/org/apache/helix/examples/IdealStateBuilderExample.java
+++ b/helix-core/src/main/java/org/apache/helix/examples/IdealStateBuilderExample.java
@@ -24,9 +24,9 @@ import org.apache.helix.manager.zk.ZKHelixAdmin;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.model.builder.AutoModeISBuilder;
 import org.apache.helix.model.builder.AutoRebalanceModeISBuilder;
 import org.apache.helix.model.builder.CustomModeISBuilder;
@@ -41,13 +41,14 @@ public class IdealStateBuilderExample {
   public static void main(String[] args) {
     
     if (args.length < 3) {
-      System.err.println("USAGE: java IdealStateBuilderExample zkAddress clusterName idealStateMode (AUTO, AUTO_REBALANCE, or CUSTOMIZED)");
+      System.err.println("USAGE: java IdealStateBuilderExample zkAddress clusterName idealStateMode" +
+          " (FULL_AUTO, SEMI_AUTO, CUSTOMIZED, or USER_DEFINED)");
       System.exit(1);
     }
 
     final String zkAddr = args[0];
     final String clusterName = args[1];
-    IdealStateModeProperty idealStateMode = IdealStateModeProperty.valueOf(args[2].toUpperCase());
+    RebalanceMode idealStateMode = RebalanceMode.valueOf(args[2].toUpperCase());
 
     ZkClient zkclient =
         new ZkClient(zkAddr,
@@ -79,7 +80,7 @@ public class IdealStateBuilderExample {
     String resourceName = "TestDB";
     IdealState idealState = null;
     switch (idealStateMode) {
-    case AUTO: {
+    case SEMI_AUTO: {
       AutoModeISBuilder builder = new AutoModeISBuilder(resourceName);
       builder.setStateModel("MasterSlave")
              .setNumPartitions(2)
@@ -90,7 +91,7 @@ public class IdealStateBuilderExample {
       idealState = builder.build();
       break;
     }
-    case AUTO_REBALANCE: {
+    case FULL_AUTO: {
       AutoRebalanceModeISBuilder builder = new AutoRebalanceModeISBuilder(resourceName);
       builder.setStateModel("MasterSlave")
               .setNumPartitions(2)

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/examples/IdealStateExample.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/examples/IdealStateExample.java b/helix-core/src/main/java/org/apache/helix/examples/IdealStateExample.java
index f98199d..23249a4 100644
--- a/helix-core/src/main/java/org/apache/helix/examples/IdealStateExample.java
+++ b/helix-core/src/main/java/org/apache/helix/examples/IdealStateExample.java
@@ -23,7 +23,7 @@ import org.apache.helix.controller.HelixControllerMain;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.helix.model.StateModelDefinition;
 import org.apache.helix.tools.StateModelConfigGenerator;
@@ -78,17 +78,17 @@ public class IdealStateExample
   {
     if (args.length < 3)
     {
-      System.err.println("USAGE: IdealStateExample zkAddress clusterName idealStateMode (AUTO, AUTO_REBALANCE, or CUSTOMIZED) idealStateJsonFile (required for CUSTOMIZED mode)");
+      System.err.println("USAGE: IdealStateExample zkAddress clusterName idealStateMode (FULL_AUTO, SEMI_AUTO, or CUSTOMIZED) idealStateJsonFile (required for CUSTOMIZED mode)");
       System.exit(1);
     }
 
     final String zkAddr = args[0];
     final String clusterName = args[1];
-    final String idealStateModeStr = args[2].toUpperCase();
+    final String idealStateRebalancerModeStr = args[2].toUpperCase();
     String idealStateJsonFile = null;
-    IdealStateModeProperty idealStateMode =
-        IdealStateModeProperty.valueOf(idealStateModeStr);
-    if (idealStateMode == IdealStateModeProperty.CUSTOMIZED)
+    RebalanceMode idealStateRebalancerMode =
+        RebalanceMode.valueOf(idealStateRebalancerModeStr);
+    if (idealStateRebalancerMode == RebalanceMode.CUSTOMIZED)
     {
       if (args.length < 4)
       {
@@ -126,15 +126,15 @@ public class IdealStateExample
 
     // add resource "TestDB" which has 4 partitions and uses MasterSlave state model
     String resourceName = "TestDB";
-    if (idealStateMode == IdealStateModeProperty.AUTO
-        || idealStateMode == IdealStateModeProperty.AUTO_REBALANCE)
+    if (idealStateRebalancerMode == RebalanceMode.SEMI_AUTO
+        || idealStateRebalancerMode == RebalanceMode.FULL_AUTO)
     {
-      admin.addResource(clusterName, resourceName, 4, "MasterSlave", idealStateModeStr);
+      admin.addResource(clusterName, resourceName, 4, "MasterSlave", idealStateRebalancerModeStr);
 
       // rebalance resource "TestDB" using 3 replicas
       admin.rebalance(clusterName, resourceName, 3);
     }
-    else if (idealStateMode == IdealStateModeProperty.CUSTOMIZED)
+    else if (idealStateRebalancerMode == RebalanceMode.CUSTOMIZED)
     {
       admin.addIdealState(clusterName, resourceName, idealStateJsonFile);
     }

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
index 1a5609b..a9226d3 100644
--- a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
+++ b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixAdmin.java
@@ -64,7 +64,7 @@ import org.apache.helix.model.ExternalView;
 import org.apache.helix.model.HelixConfigScope;
 import org.apache.helix.model.HelixConfigScope.ConfigScopeProperty;
 import org.apache.helix.model.IdealState;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.helix.model.InstanceConfig.InstanceConfigProperty;
 import org.apache.helix.model.LiveInstance;
@@ -274,8 +274,10 @@ public class ZKHelixAdmin implements HelixAdmin
       IdealState idealState = new IdealState(idealStateRecord);
       for (String partitionName : partitionNames)
       {
-        if ((idealState.getIdealStateMode() == IdealStateModeProperty.AUTO && idealState.getPreferenceList(partitionName) == null)
-            || (idealState.getIdealStateMode() == IdealStateModeProperty.CUSTOMIZED && idealState.getInstanceStateMap(partitionName) == null))
+        if ((idealState.getRebalanceMode() == RebalanceMode.SEMI_AUTO
+              && idealState.getPreferenceList(partitionName) == null)
+            || (idealState.getRebalanceMode() == RebalanceMode.CUSTOMIZED
+              && idealState.getInstanceStateMap(partitionName) == null))
         {
           logger.warn("Cluster: " + clusterName + ", resource: " + resourceName
               + ", partition: " + partitionName
@@ -373,7 +375,7 @@ public class ZKHelixAdmin implements HelixAdmin
 
     // check partition exists in resource group
     Set<String> resetPartitionNames = new HashSet<String>(partitionNames);
-    if (idealState.getIdealStateMode() == IdealStateModeProperty.CUSTOMIZED)
+    if (idealState.getRebalanceMode() == RebalanceMode.CUSTOMIZED)
     {
       Set<String> partitions =
           new HashSet<String>(idealState.getRecord().getMapFields().keySet());
@@ -700,7 +702,7 @@ public class ZKHelixAdmin implements HelixAdmin
                 resourceName,
                 partitions,
                 stateModelRef,
-                IdealStateModeProperty.AUTO.toString(),
+                RebalanceMode.SEMI_AUTO.toString(),
                 0);
   }
 
@@ -709,9 +711,9 @@ public class ZKHelixAdmin implements HelixAdmin
                           String resourceName,
                           int partitions,
                           String stateModelRef,
-                          String idealStateMode)
+                          String rebalancerMode)
   {
-    addResource(clusterName, resourceName, partitions, stateModelRef, idealStateMode, 0);
+    addResource(clusterName, resourceName, partitions, stateModelRef, rebalancerMode, 0);
   }
 
   @Override
@@ -746,17 +748,17 @@ public class ZKHelixAdmin implements HelixAdmin
                           String resourceName,
                           int partitions,
                           String stateModelRef,
-                          String idealStateMode,
+                          String rebalancerMode,
                           int bucketSize)
   {
-    addResource(clusterName, resourceName, partitions, stateModelRef, idealStateMode,
+    addResource(clusterName, resourceName, partitions, stateModelRef, rebalancerMode,
         bucketSize, -1);
 
   }
   
   @Override
   public void addResource(String clusterName, String resourceName,
-      int partitions, String stateModelRef, String idealStateMode,
+      int partitions, String stateModelRef, String rebalancerMode,
       int bucketSize, int maxPartitionsPerInstance)
   {
     if (!ZKUtil.isClusterSetup(clusterName, _zkClient))
@@ -764,10 +766,10 @@ public class ZKHelixAdmin implements HelixAdmin
       throw new HelixException("cluster " + clusterName + " is not setup yet");
     }
 
-    IdealStateModeProperty mode = IdealStateModeProperty.AUTO;
+    RebalanceMode mode = RebalanceMode.SEMI_AUTO;
     try
     {
-      mode = IdealStateModeProperty.valueOf(idealStateMode);
+      mode = RebalanceMode.valueOf(rebalancerMode);
     }
     catch (Exception e)
     {
@@ -776,7 +778,7 @@ public class ZKHelixAdmin implements HelixAdmin
     IdealState idealState = new IdealState(resourceName);
     idealState.setNumPartitions(partitions);
     idealState.setStateModelDefRef(stateModelRef);
-    idealState.setIdealStateMode(mode.toString());
+    idealState.setRebalanceMode(mode);
     idealState.setReplicas("" + 0);
     idealState.setStateModelFactoryName(HelixConstants.DEFAULT_STATE_MODEL_FACTORY);
     if(maxPartitionsPerInstance > 0 && maxPartitionsPerInstance < Integer.MAX_VALUE)
@@ -1256,7 +1258,7 @@ public class ZKHelixAdmin implements HelixAdmin
     {
       masterStateValue = slaveStateValue;
     }
-    if (idealState.getIdealStateMode() != IdealStateModeProperty.AUTO_REBALANCE)
+    if (idealState.getRebalanceMode() != RebalanceMode.FULL_AUTO)
     {
       ZNRecord newIdealState =
           DefaultIdealStateCalculator.calculateIdealState(instanceNames,
@@ -1267,12 +1269,12 @@ public class ZKHelixAdmin implements HelixAdmin
                                                                  slaveStateValue);
 
       // for now keep mapField in AUTO mode and remove listField in CUSTOMIZED mode
-      if (idealState.getIdealStateMode() == IdealStateModeProperty.AUTO)
+      if (idealState.getRebalanceMode() == RebalanceMode.SEMI_AUTO)
       {
         idealState.getRecord().setListFields(newIdealState.getListFields());
         idealState.getRecord().setMapFields(newIdealState.getMapFields());
       }
-      if (idealState.getIdealStateMode() == IdealStateModeProperty.CUSTOMIZED)
+      if (idealState.getRebalanceMode() == RebalanceMode.CUSTOMIZED)
       {
         idealState.getRecord().setMapFields(newIdealState.getMapFields());
       }

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/model/IdealState.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/model/IdealState.java b/helix-core/src/main/java/org/apache/helix/model/IdealState.java
index 800477d..22e2328 100644
--- a/helix-core/src/main/java/org/apache/helix/model/IdealState.java
+++ b/helix-core/src/main/java/org/apache/helix/model/IdealState.java
@@ -39,23 +39,32 @@ public class IdealState extends HelixProperty
 {
   public enum IdealStateProperty
   {
-    NUM_PARTITIONS, 
-    STATE_MODEL_DEF_REF, 
-    STATE_MODEL_FACTORY_NAME, 
-    REPLICAS, IDEAL_STATE_MODE, 
-    REBALANCE_TIMER_PERIOD, 
-    MAX_PARTITIONS_PER_INSTANCE, 
-    INSTANCE_GROUP_TAG, 
+    NUM_PARTITIONS,
+    STATE_MODEL_DEF_REF,
+    STATE_MODEL_FACTORY_NAME,
+    REPLICAS,
+    @Deprecated
+    IDEAL_STATE_MODE,
+    REBALANCE_MODE,
+    REBALANCE_TIMER_PERIOD,
+    MAX_PARTITIONS_PER_INSTANCE,
+    INSTANCE_GROUP_TAG,
     REBALANCER_CLASS_NAME
   }
 
   public static final String QUERY_LIST = "PREFERENCE_LIST_QUERYS";
 
+  @Deprecated
   public enum IdealStateModeProperty
   {
     AUTO, CUSTOMIZED, AUTO_REBALANCE
   }
 
+  public enum RebalanceMode
+  {
+    FULL_AUTO, SEMI_AUTO, CUSTOMIZED, USER_DEFINED, NONE
+  }
+
   private static final Logger logger = Logger.getLogger(IdealState.class
       .getName());
 
@@ -74,11 +83,21 @@ public class IdealState extends HelixProperty
     return _record.getId();
   }
 
+  @Deprecated
   public void setIdealStateMode(String mode)
   {
     _record.setSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString(), mode);
+    RebalanceMode rebalanceMode = normalizeRebalanceMode(IdealStateModeProperty.valueOf(mode));
+    _record.setEnumField(IdealStateProperty.REBALANCE_MODE.toString(), rebalanceMode);
   }
-  
+
+  public void setRebalanceMode(RebalanceMode rebalancerType)
+  {
+    _record.setEnumField(IdealStateProperty.REBALANCE_MODE.toString(), rebalancerType);
+    IdealStateModeProperty idealStateMode = denormalizeRebalanceMode(rebalancerType);
+    _record.setEnumField(IdealStateProperty.IDEAL_STATE_MODE.toString(),idealStateMode);
+  }
+
   public int getMaxPartitionsPerInstance()
   {
     return _record.getIntField(IdealStateProperty.MAX_PARTITIONS_PER_INSTANCE.toString(),
@@ -101,12 +120,25 @@ public class IdealState extends HelixProperty
     _record.setIntField(IdealStateProperty.MAX_PARTITIONS_PER_INSTANCE.toString(), max);
   }
 
+  @Deprecated
   public IdealStateModeProperty getIdealStateMode()
   {
     return _record.getEnumField(IdealStateProperty.IDEAL_STATE_MODE.toString(),
         IdealStateModeProperty.class, IdealStateModeProperty.AUTO);
   }
 
+  public RebalanceMode getRebalanceMode()
+  {
+    RebalanceMode property = _record.getEnumField(
+        IdealStateProperty.REBALANCE_MODE.toString(), RebalanceMode.class,
+        RebalanceMode.NONE);
+    if (property == RebalanceMode.NONE)
+    {
+      property = normalizeRebalanceMode(getIdealStateMode());
+    }
+    return property;
+  }
+
   public void setPartitionState(String partitionName, String instanceName,
       String state)
   {
@@ -120,11 +152,12 @@ public class IdealState extends HelixProperty
 
   public Set<String> getPartitionSet()
   {
-    if (getIdealStateMode() == IdealStateModeProperty.AUTO
-        || getIdealStateMode() == IdealStateModeProperty.AUTO_REBALANCE)
+    if (getRebalanceMode() == RebalanceMode.SEMI_AUTO
+        || getRebalanceMode() == RebalanceMode.FULL_AUTO
+        || getRebalanceMode() == RebalanceMode.USER_DEFINED)
     {
       return _record.getListFields().keySet();
-    } else if (getIdealStateMode() == IdealStateModeProperty.CUSTOMIZED)
+    } else if (getRebalanceMode() == RebalanceMode.CUSTOMIZED)
     {
       return _record.getMapFields().keySet();
     } else
@@ -141,8 +174,8 @@ public class IdealState extends HelixProperty
 
   public Set<String> getInstanceSet(String partitionName)
   {
-    if (getIdealStateMode() == IdealStateModeProperty.AUTO
-        || getIdealStateMode() == IdealStateModeProperty.AUTO_REBALANCE)
+    if (getRebalanceMode() == RebalanceMode.SEMI_AUTO
+        || getRebalanceMode() == RebalanceMode.FULL_AUTO)
     {
       List<String> prefList = _record.getListField(partitionName);
       if (prefList != null)
@@ -153,7 +186,7 @@ public class IdealState extends HelixProperty
         logger.warn(partitionName + " does NOT exist");
         return Collections.emptySet();
       }
-    } else if (getIdealStateMode() == IdealStateModeProperty.CUSTOMIZED)
+    } else if (getRebalanceMode() == RebalanceMode.CUSTOMIZED)
     {
       Map<String, String> stateMap = _record.getMapField(partitionName);
       if (stateMap != null)
@@ -222,9 +255,9 @@ public class IdealState extends HelixProperty
     if (replica == null)
     {
       String firstPartition = null;
-      switch (getIdealStateMode())
+      switch (getRebalanceMode())
       {
-      case AUTO:
+      case SEMI_AUTO:
         if (_record.getListFields().size() == 0)
         {
           replica = "0";
@@ -299,7 +332,7 @@ public class IdealState extends HelixProperty
       return false;
     }
 
-    if (getIdealStateMode() == IdealStateModeProperty.AUTO)
+    if (getRebalanceMode() == RebalanceMode.SEMI_AUTO)
     {
         String replicaStr = getReplicas();
         if (replicaStr == null) {
@@ -336,4 +369,54 @@ public class IdealState extends HelixProperty
     return _record.getSimpleField(
         IdealStateProperty.INSTANCE_GROUP_TAG.toString());
   }
+
+  private RebalanceMode normalizeRebalanceMode(IdealStateModeProperty mode)
+  {
+    RebalanceMode property;
+    switch (mode)
+    {
+    case AUTO_REBALANCE:
+      property = RebalanceMode.FULL_AUTO;
+      break;
+    case AUTO:
+      property = RebalanceMode.SEMI_AUTO;
+      break;
+    case CUSTOMIZED:
+      property = RebalanceMode.CUSTOMIZED;
+      break;
+    default:
+      if (getRebalancerClassName() != null)
+      {
+        property = RebalanceMode.USER_DEFINED;
+      }
+      else
+      {
+        property = RebalanceMode.SEMI_AUTO;
+      }
+      break;
+    }
+    return property;
+  }
+
+  private IdealStateModeProperty denormalizeRebalanceMode(
+      RebalanceMode rebalancerType)
+  {
+    IdealStateModeProperty property;
+    switch (rebalancerType)
+    {
+    case FULL_AUTO:
+      property = IdealStateModeProperty.AUTO_REBALANCE;
+      break;
+    case SEMI_AUTO:
+      property = IdealStateModeProperty.AUTO;
+      break;
+    case CUSTOMIZED:
+      property = IdealStateModeProperty.CUSTOMIZED;
+      break;
+    default:
+      property = IdealStateModeProperty.AUTO;
+      break;
+    }
+    return property;
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/model/builder/AutoModeISBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/model/builder/AutoModeISBuilder.java b/helix-core/src/main/java/org/apache/helix/model/builder/AutoModeISBuilder.java
index d3e7120..ab98998 100644
--- a/helix-core/src/main/java/org/apache/helix/model/builder/AutoModeISBuilder.java
+++ b/helix-core/src/main/java/org/apache/helix/model/builder/AutoModeISBuilder.java
@@ -19,7 +19,7 @@ package org.apache.helix.model.builder;
  * under the License.
  */
 
-import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -28,7 +28,7 @@ public class AutoModeISBuilder extends IdealStateBuilder {
     public AutoModeISBuilder(String resourceName)
     {
         super(resourceName);
-        setMode(IdealState.IdealStateModeProperty.AUTO);
+        setRebalancerMode(RebalanceMode.SEMI_AUTO);
     }
 
     public void add(String partitionName)

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/model/builder/AutoRebalanceModeISBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/model/builder/AutoRebalanceModeISBuilder.java b/helix-core/src/main/java/org/apache/helix/model/builder/AutoRebalanceModeISBuilder.java
index 15638e3..fcb4e0f 100644
--- a/helix-core/src/main/java/org/apache/helix/model/builder/AutoRebalanceModeISBuilder.java
+++ b/helix-core/src/main/java/org/apache/helix/model/builder/AutoRebalanceModeISBuilder.java
@@ -19,7 +19,7 @@ package org.apache.helix.model.builder;
  * under the License.
  */
 
-import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 
 import java.util.ArrayList;
 
@@ -27,7 +27,7 @@ public class AutoRebalanceModeISBuilder extends IdealStateBuilder {
     public AutoRebalanceModeISBuilder(String resourceName)
     {
         super(resourceName);
-        setMode(IdealState.IdealStateModeProperty.AUTO_REBALANCE);
+        setRebalancerMode(RebalanceMode.FULL_AUTO);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/model/builder/CustomModeISBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/model/builder/CustomModeISBuilder.java b/helix-core/src/main/java/org/apache/helix/model/builder/CustomModeISBuilder.java
index e75b7ac..10fefec 100644
--- a/helix-core/src/main/java/org/apache/helix/model/builder/CustomModeISBuilder.java
+++ b/helix-core/src/main/java/org/apache/helix/model/builder/CustomModeISBuilder.java
@@ -19,7 +19,7 @@ package org.apache.helix.model.builder;
  * under the License.
  */
 
-import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 
 import java.util.Map;
 import java.util.TreeMap;
@@ -29,7 +29,7 @@ public class CustomModeISBuilder extends IdealStateBuilder {
     public CustomModeISBuilder(String resourceName)
     {
         super(resourceName);
-        setMode(IdealState.IdealStateModeProperty.CUSTOMIZED);
+        setRebalancerMode(RebalanceMode.CUSTOMIZED);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/model/builder/IdealStateBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/model/builder/IdealStateBuilder.java b/helix-core/src/main/java/org/apache/helix/model/builder/IdealStateBuilder.java
index 2877c74..ab847af 100644
--- a/helix-core/src/main/java/org/apache/helix/model/builder/IdealStateBuilder.java
+++ b/helix-core/src/main/java/org/apache/helix/model/builder/IdealStateBuilder.java
@@ -49,9 +49,9 @@ public abstract class IdealStateBuilder {
      */
     private String stateModelFactoryName = HelixConstants.DEFAULT_STATE_MODEL_FACTORY;
     /**
-     * Helix Execution mode/strategies. AUTO_REBALANCE, AUTO, CUSTOM
+     * Helix rebalancer strategies. AUTO, SEMI_AUTO, CUSTOMIZED
      */
-    protected IdealState.IdealStateModeProperty mode;
+    protected IdealState.RebalanceMode rebalancerMode;
     /**
      * A constraint that limits the maximum number of partitions per Node.
      */
@@ -140,9 +140,10 @@ public abstract class IdealStateBuilder {
      *
      * @return
      */
-    public IdealStateBuilder setMode(IdealState.IdealStateModeProperty mode) {
-        this.mode = mode;
-        return this;
+    public IdealStateBuilder setRebalancerMode(
+        IdealState.RebalanceMode rebalancerMode) {
+      this.rebalancerMode = rebalancerMode;
+      return this;
     }
 
     /**
@@ -156,7 +157,7 @@ public abstract class IdealStateBuilder {
         idealstate.setMaxPartitionsPerInstance(maxPartitionsPerNode);
         idealstate.setStateModelDefRef(stateModel);
         idealstate.setStateModelFactoryName(stateModelFactoryName);
-        idealstate.setIdealStateMode(mode.toString());
+        idealstate.setRebalanceMode(rebalancerMode);
         idealstate.setReplicas("" + numReplica);
         
         if (!idealstate.isValid()) {

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/participant/HelixCustomCodeRunner.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/participant/HelixCustomCodeRunner.java b/helix-core/src/main/java/org/apache/helix/participant/HelixCustomCodeRunner.java
index d92b92f..6996011 100644
--- a/helix-core/src/main/java/org/apache/helix/participant/HelixCustomCodeRunner.java
+++ b/helix-core/src/main/java/org/apache/helix/participant/HelixCustomCodeRunner.java
@@ -33,7 +33,7 @@ import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.IdealState;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.log4j.Logger;
 
 
@@ -145,7 +145,7 @@ public class HelixCustomCodeRunner
       Builder keyBuilder = accessor.keyBuilder();
 
       IdealState idealState = new IdealState(_resourceName);
-      idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
+      idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
       idealState.setReplicas(StateModelToken.ANY_LIVEINSTANCE.toString());
       idealState.setNumPartitions(1);
       idealState.setStateModelDefRef(LEADER_STANDBY);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java b/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
index 4260e87..c63f5f7 100644
--- a/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
+++ b/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
@@ -53,7 +53,7 @@ import org.apache.helix.model.ExternalView;
 import org.apache.helix.model.HelixConfigScope;
 import org.apache.helix.model.HelixConfigScope.ConfigScopeProperty;
 import org.apache.helix.model.IdealState;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.helix.model.LiveInstance;
 import org.apache.helix.model.StateModelDefinition;
@@ -411,34 +411,34 @@ public class ClusterSetup
                          resourceName,
                          numResources,
                          stateModelRef,
-                         IdealStateModeProperty.AUTO.toString());
+                         RebalanceMode.SEMI_AUTO.toString());
   }
 
   public void addResourceToCluster(String clusterName,
                                    String resourceName,
                                    int numResources,
                                    String stateModelRef,
-                                   String idealStateMode)
+                                   String rebalancerMode)
   {
     _admin.addResource(clusterName,
                        resourceName,
                        numResources,
                        stateModelRef,
-                       idealStateMode);
+                       rebalancerMode);
   }
 
   public void addResourceToCluster(String clusterName,
                                    String resourceName,
                                    int numResources,
                                    String stateModelRef,
-                                   String idealStateMode,
+                                   String rebalancerMode,
                                    int bucketSize)
   {
     _admin.addResource(clusterName,
                        resourceName,
                        numResources,
                        stateModelRef,
-                       idealStateMode,
+                       rebalancerMode,
                        bucketSize);
   }
   
@@ -446,7 +446,7 @@ public class ClusterSetup
       String resourceName,
       int numResources,
       String stateModelRef,
-      String idealStateMode,
+      String rebalancerMode,
       int bucketSize,
       int maxPartitionsPerInstance)
   {
@@ -454,7 +454,7 @@ public class ClusterSetup
       resourceName,
       numResources,
       stateModelRef,
-      idealStateMode,
+      rebalancerMode,
       bucketSize,
       maxPartitionsPerInstance);
   }
@@ -477,11 +477,11 @@ public class ClusterSetup
   public void expandResource(String clusterName, String resourceName)
   {
     IdealState idealState = _admin.getResourceIdealState(clusterName, resourceName);
-    if (idealState.getIdealStateMode() == IdealStateModeProperty.AUTO_REBALANCE
-        || idealState.getIdealStateMode() == IdealStateModeProperty.CUSTOMIZED)
+    if (idealState.getRebalanceMode() == RebalanceMode.FULL_AUTO
+        || idealState.getRebalanceMode() == RebalanceMode.CUSTOMIZED)
     {
       _logger.info("Skipping idealState " + idealState.getResourceName() + " "
-          + idealState.getIdealStateMode());
+          + idealState.getRebalanceMode());
       return;
     }
     boolean anyLiveInstance = false;
@@ -1241,7 +1241,7 @@ public class ClusterSetup
       String resourceName = cmd.getOptionValues(addResource)[1];
       int partitions = Integer.parseInt(cmd.getOptionValues(addResource)[2]);
       String stateModelRef = cmd.getOptionValues(addResource)[3];
-      String modeValue = IdealStateModeProperty.AUTO.toString();
+      String modeValue = RebalanceMode.SEMI_AUTO.toString();
       if (cmd.hasOption(mode))
       {
         modeValue = cmd.getOptionValues(mode)[0];

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/main/java/org/apache/helix/tools/ZkLogCSVFormatter.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/tools/ZkLogCSVFormatter.java b/helix-core/src/main/java/org/apache/helix/tools/ZkLogCSVFormatter.java
index 1618eee..04c503a 100644
--- a/helix-core/src/main/java/org/apache/helix/tools/ZkLogCSVFormatter.java
+++ b/helix-core/src/main/java/org/apache/helix/tools/ZkLogCSVFormatter.java
@@ -234,7 +234,7 @@ public class ZkLogCSVFormatter
                           timestamp,
                           record.getId(),
                           record.getSimpleField(IdealStateProperty.NUM_PARTITIONS.toString()),
-                          record.getSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString()),
+                          record.getSimpleField(IdealStateProperty.REBALANCE_MODE.toString()),
                           partition,
                           instance,
                           Integer.toString(i));

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/TestHelper.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/TestHelper.java b/helix-core/src/test/java/org/apache/helix/TestHelper.java
index 6516138..59b5665 100644
--- a/helix-core/src/test/java/org/apache/helix/TestHelper.java
+++ b/helix-core/src/test/java/org/apache/helix/TestHelper.java
@@ -19,14 +19,10 @@ package org.apache.helix;
  * under the License.
  */
 
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
 import java.lang.reflect.Method;
 import java.net.ServerSocket;
-import java.net.Socket;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -59,7 +55,7 @@ import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.CurrentState;
 import org.apache.helix.model.ExternalView;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.Message;
 import org.apache.helix.model.Message.MessageType;
 import org.apache.helix.model.StateModelDefinition;
@@ -429,7 +425,7 @@ public class TestHelper
                             nodesNb,
                             replica,
                             stateModelDef,
-                            IdealStateModeProperty.AUTO,
+                            RebalanceMode.SEMI_AUTO,
                             doRebalance);
   }
 
@@ -443,7 +439,7 @@ public class TestHelper
                                   int nodesNb,
                                   int replica,
                                   String stateModelDef,
-                                  IdealStateModeProperty mode,
+                                  RebalanceMode mode,
                                   boolean doRebalance) throws Exception
   {
     ZkClient zkClient = new ZkClient(ZkAddr);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/TestZnodeModify.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/TestZnodeModify.java b/helix-core/src/test/java/org/apache/helix/TestZnodeModify.java
index 35ab5f0..2046316 100644
--- a/helix-core/src/test/java/org/apache/helix/TestZnodeModify.java
+++ b/helix-core/src/test/java/org/apache/helix/TestZnodeModify.java
@@ -28,8 +28,8 @@ import java.util.Map;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.model.IdealState.IdealStateProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.TestCommand;
 import org.apache.helix.tools.TestExecutor;
 import org.apache.helix.tools.TestTrigger;
@@ -117,7 +117,8 @@ public class TestZnodeModify extends ZkUnitTestBase
 
     ZNRecord record = getExampleZNRecord();
     ZNRecord recordNew = new ZNRecord(record);
-    recordNew.setSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString(), IdealStateModeProperty.AUTO.toString());
+    recordNew.setSimpleField(IdealStateProperty.REBALANCE_MODE.toString(),
+        RebalanceMode.SEMI_AUTO.toString());
     arg = new ZnodeOpArg(pathChild2, ZnodePropertyType.ZNODE, "+", recordNew);
     command = new TestCommand(CommandType.MODIFY, new TestTrigger(0, 3000, record), arg);
     commandList.add(command);
@@ -162,7 +163,8 @@ public class TestZnodeModify extends ZkUnitTestBase
 
     ZNRecord record = getExampleZNRecord();
     ZNRecord recordNew = new ZNRecord(record);
-    recordNew.setSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString(), IdealStateModeProperty.AUTO.toString());
+    recordNew.setSimpleField(IdealStateProperty.REBALANCE_MODE.toString(),
+        RebalanceMode.SEMI_AUTO.toString());
     arg1 = new ZnodeOpArg(pathChild2, ZnodePropertyType.ZNODE, "+", recordNew);
     command1 = new TestCommand(CommandType.MODIFY, new TestTrigger(0, 500, record), arg1);
     commandList.add(command1);
@@ -196,7 +198,8 @@ public class TestZnodeModify extends ZkUnitTestBase
 
     final ZNRecord record = getExampleZNRecord();
     ZNRecord recordNew = new ZNRecord(record);
-    recordNew.setSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString(), IdealStateModeProperty.AUTO.toString());
+    recordNew.setSimpleField(IdealStateProperty.REBALANCE_MODE.toString(),
+        RebalanceMode.SEMI_AUTO.toString());
     ZnodeOpArg arg1 = new ZnodeOpArg(pathChild1, ZnodePropertyType.ZNODE, "+", recordNew);
     TestCommand command1 = new TestCommand(CommandType.MODIFY, new TestTrigger(0, 8000, record), arg1);
     commandList.add(command1);
@@ -266,7 +269,8 @@ public class TestZnodeModify extends ZkUnitTestBase
   private ZNRecord getExampleZNRecord()
   {
     ZNRecord record = new ZNRecord("TestDB");
-    record.setSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString(), IdealStateModeProperty.CUSTOMIZED.toString());
+    record.setSimpleField(IdealStateProperty.REBALANCE_MODE.toString(),
+        RebalanceMode.CUSTOMIZED.toString());
     Map<String, String> map = new HashMap<String, String>();
     map.put("localhost_12918", "MASTER");
     map.put("localhost_12919", "SLAVE");

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java b/helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java
index 14d8892..c61a4ac 100644
--- a/helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java
+++ b/helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java
@@ -39,11 +39,11 @@ import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.HelixConfigScope.ConfigScopeProperty;
 import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.helix.model.LiveInstance;
 import org.apache.helix.model.Message;
 import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.model.Message.Attributes;
 import org.apache.helix.model.Message.MessageType;
 import org.apache.helix.tools.StateModelConfigGenerator;
@@ -210,11 +210,11 @@ public class ZkUnitTestBase
     IdealState idealState = accessor.getProperty(keyBuilder.idealStates(resource));
     for (String partitionName : idealState.getPartitionSet())
     {
-      if (idealState.getIdealStateMode() == IdealStateModeProperty.AUTO)
+      if (idealState.getRebalanceMode() == RebalanceMode.SEMI_AUTO)
       {
         AssertJUnit.assertEquals(repl, idealState.getPreferenceList(partitionName).size());
       }
-      else if (idealState.getIdealStateMode() == IdealStateModeProperty.CUSTOMIZED)
+      else if (idealState.getRebalanceMode() == RebalanceMode.CUSTOMIZED)
       {
         AssertJUnit.assertEquals(repl, idealState.getInstanceStateMap(partitionName)
                                                  .size());
@@ -351,7 +351,7 @@ public class ZkUnitTestBase
 
       idealState.setReplicas(Integer.toString(replicas));
       idealState.setStateModelDefRef("MasterSlave");
-      idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
+      idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
       idealState.setNumPartitions(partitions);
       idealStates.add(idealState);
 

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/controller/stages/BaseStageTest.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/controller/stages/BaseStageTest.java b/helix-core/src/test/java/org/apache/helix/controller/stages/BaseStageTest.java
index af98620..f2e49e5 100644
--- a/helix-core/src/test/java/org/apache/helix/controller/stages/BaseStageTest.java
+++ b/helix-core/src/test/java/org/apache/helix/controller/stages/BaseStageTest.java
@@ -35,10 +35,10 @@ import org.apache.helix.controller.pipeline.Stage;
 import org.apache.helix.controller.pipeline.StageContext;
 import org.apache.helix.controller.stages.ClusterEvent;
 import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.LiveInstance;
 import org.apache.helix.model.Resource;
 import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.tools.StateModelConfigGenerator;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
@@ -77,7 +77,8 @@ public class BaseStageTest
   }
 
   protected List<IdealState> setupIdealState(int nodes, String[] resources,
-                                             int partitions, int replicas)
+                                             int partitions, int replicas,
+                                             RebalanceMode rebalanceMode)
   {
     List<IdealState> idealStates = new ArrayList<IdealState>();
     List<String> instances = new ArrayList<String>();
@@ -101,7 +102,7 @@ public class BaseStageTest
       }
       IdealState idealState = new IdealState(record);
       idealState.setStateModelDefRef("MasterSlave");
-      idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
+      idealState.setRebalanceMode(rebalanceMode);
       idealState.setNumPartitions(partitions);
       idealStates.add(idealState);
 

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleCalcStageCompatibility.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleCalcStageCompatibility.java b/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleCalcStageCompatibility.java
new file mode 100644
index 0000000..ba0d3d7
--- /dev/null
+++ b/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleCalcStageCompatibility.java
@@ -0,0 +1,144 @@
+package org.apache.helix.controller.stages;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.helix.ZNRecord;
+import org.apache.helix.PropertyKey.Builder;
+import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.Partition;
+import org.apache.helix.model.Resource;
+import org.testng.AssertJUnit;
+import org.testng.annotations.Test;
+
+@SuppressWarnings("deprecation")
+/**
+ * These tests ensure that BestPossibleStateCalcStage correctly recognizes the mode and follows
+ * appropriate code paths, even though the old method of setting rebalance mode is used.
+ */
+public class TestBestPossibleCalcStageCompatibility extends BaseStageTest {
+  @Test
+  public void testSemiAutoModeCompatibility() {
+    System.out.println("START TestBestPossibleStateCalcStage at "
+        + new Date(System.currentTimeMillis()));
+
+    String[] resources = new String[]{ "testResourceName" };
+    setupIdealStateDeprecated(5, resources, 10, 1, IdealStateModeProperty.AUTO);
+    setupLiveInstances(5);
+    setupStateModel();
+
+    Map<String, Resource> resourceMap = getResourceMap();
+    CurrentStateOutput currentStateOutput = new CurrentStateOutput();
+    event.addAttribute(AttributeName.RESOURCES.toString(),
+        resourceMap);
+    event.addAttribute(AttributeName.CURRENT_STATE.toString(),
+        currentStateOutput);
+
+    ReadClusterDataStage stage1 = new ReadClusterDataStage();
+    runStage(event, stage1);
+    BestPossibleStateCalcStage stage2 = new BestPossibleStateCalcStage();
+    runStage(event, stage2);
+
+    BestPossibleStateOutput output = event
+        .getAttribute(AttributeName.BEST_POSSIBLE_STATE.toString());
+    for (int p = 0; p < 5; p++) {
+      Partition resource = new Partition("testResourceName_" + p);
+      AssertJUnit.assertEquals(
+          "MASTER",
+          output.getInstanceStateMap("testResourceName", resource).get(
+              "localhost_" + (p + 1) % 5));
+    }
+    System.out.println("END TestBestPossibleStateCalcStage at "
+        + new Date(System.currentTimeMillis()));
+  }
+
+  @Test
+  public void testCustomModeCompatibility() {
+    System.out.println("START TestBestPossibleStateCalcStage at "
+        + new Date(System.currentTimeMillis()));
+
+    String[] resources = new String[]{ "testResourceName" };
+    setupIdealStateDeprecated(5, resources, 10, 1, IdealStateModeProperty.CUSTOMIZED);
+    setupLiveInstances(5);
+    setupStateModel();
+
+    Map<String, Resource> resourceMap = getResourceMap();
+    CurrentStateOutput currentStateOutput = new CurrentStateOutput();
+    event.addAttribute(AttributeName.RESOURCES.toString(),
+        resourceMap);
+    event.addAttribute(AttributeName.CURRENT_STATE.toString(),
+        currentStateOutput);
+
+    ReadClusterDataStage stage1 = new ReadClusterDataStage();
+    runStage(event, stage1);
+    BestPossibleStateCalcStage stage2 = new BestPossibleStateCalcStage();
+    runStage(event, stage2);
+
+    BestPossibleStateOutput output = event
+        .getAttribute(AttributeName.BEST_POSSIBLE_STATE.toString());
+    for (int p = 0; p < 5; p++) {
+      Partition resource = new Partition("testResourceName_" + p);
+      AssertJUnit.assertNull(
+          output.getInstanceStateMap("testResourceName", resource).get(
+              "localhost_" + (p + 1) % 5));
+    }
+    System.out.println("END TestBestPossibleStateCalcStage at "
+        + new Date(System.currentTimeMillis()));
+  }
+
+  protected List<IdealState> setupIdealStateDeprecated(int nodes, String[] resources,
+      int partitions, int replicas, IdealStateModeProperty mode) {
+    List<IdealState> idealStates = new ArrayList<IdealState>();
+    List<String> instances = new ArrayList<String>();
+    for (int i = 0; i < nodes; i++) {
+      instances.add("localhost_" + i);
+    }
+
+    for (int i = 0; i < resources.length; i++) {
+      String resourceName = resources[i];
+      ZNRecord record = new ZNRecord(resourceName);
+      for (int p = 0; p < partitions; p++) {
+        List<String> value = new ArrayList<String>();
+        for (int r = 0; r < replicas; r++)
+        {
+          value.add("localhost_" + (p + r + 1) % nodes);
+        }
+        record.setListField(resourceName + "_" + p, value);
+      }
+      IdealState idealState = new IdealState(record);
+      idealState.setStateModelDefRef("MasterSlave");
+      idealState.setIdealStateMode(mode.toString());
+      idealState.setNumPartitions(partitions);
+      idealStates.add(idealState);
+
+      //System.out.println(idealState);
+
+      Builder keyBuilder = accessor.keyBuilder();
+
+      accessor.setProperty(keyBuilder.idealStates(resourceName), idealState);
+    }
+    return idealStates;
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleStateCalcStage.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleStateCalcStage.java b/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleStateCalcStage.java
index effea2c..e57f193 100644
--- a/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleStateCalcStage.java
+++ b/helix-core/src/test/java/org/apache/helix/controller/stages/TestBestPossibleStateCalcStage.java
@@ -29,6 +29,7 @@ import org.apache.helix.controller.stages.CurrentStateOutput;
 import org.apache.helix.controller.stages.ReadClusterDataStage;
 import org.apache.helix.model.Partition;
 import org.apache.helix.model.Resource;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.testng.AssertJUnit;
 import org.testng.annotations.Test;
 
@@ -42,7 +43,7 @@ public class TestBestPossibleStateCalcStage extends BaseStageTest
 //    List<IdealState> idealStates = new ArrayList<IdealState>();
 
     String[] resources = new String[]{ "testResourceName" };
-    setupIdealState(5, resources, 10, 1);
+    setupIdealState(5, resources, 10, 1, RebalanceMode.SEMI_AUTO);
     setupLiveInstances(5);
     setupStateModel();
 

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/controller/stages/TestResourceComputationStage.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/controller/stages/TestResourceComputationStage.java b/helix-core/src/test/java/org/apache/helix/controller/stages/TestResourceComputationStage.java
index c0b6528..71013a1 100644
--- a/helix-core/src/test/java/org/apache/helix/controller/stages/TestResourceComputationStage.java
+++ b/helix-core/src/test/java/org/apache/helix/controller/stages/TestResourceComputationStage.java
@@ -36,6 +36,7 @@ import org.apache.helix.model.CurrentState;
 import org.apache.helix.model.IdealState;
 import org.apache.helix.model.LiveInstance;
 import org.apache.helix.model.Resource;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.DefaultIdealStateCalculator;
 import org.testng.AssertJUnit;
 import org.testng.annotations.Test;
@@ -93,7 +94,7 @@ public class TestResourceComputationStage extends BaseStageTest
 //    List<IdealState> idealStates = new ArrayList<IdealState>();
     String[] resources = new String[]
         { "testResource1", "testResource2" };
-    List<IdealState> idealStates = setupIdealState(5, resources, 10, 1);
+    List<IdealState> idealStates = setupIdealState(5, resources, 10, 1, RebalanceMode.SEMI_AUTO);
     ResourceComputationStage stage = new ResourceComputationStage();
     runStage(event, new ReadClusterDataStage());
     runStage(event, stage);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalance.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalance.java b/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalance.java
index ea860c7..daf8654 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalance.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalance.java
@@ -32,13 +32,12 @@ import org.apache.helix.PropertyKey.Builder;
 import org.apache.helix.TestHelper.StartCMResult;
 import org.apache.helix.controller.HelixControllerMain;
 import org.apache.helix.controller.stages.ClusterDataCache;
-import org.apache.helix.integration.TestAutoRebalancePartitionLimit.ExternalViewBalancedVerifier;
 import org.apache.helix.manager.zk.ZKHelixDataAccessor;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.ExternalView;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.ClusterSetup;
 import org.apache.helix.tools.ClusterStateVerifier;
 import org.apache.helix.tools.ClusterStateVerifier.ZkVerifier;
@@ -71,9 +70,11 @@ public class TestAutoRebalance extends ZkStandAloneCMTestBaseWithPropertyServerC
 
     // setup storage cluster
     _setupTool.addCluster(CLUSTER_NAME, true);
-    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, STATE_MODEL, IdealStateModeProperty.AUTO_REBALANCE+"");
+    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, STATE_MODEL,
+        RebalanceMode.FULL_AUTO+"");
     
-    _setupTool.addResourceToCluster(CLUSTER_NAME, db2, _PARTITIONS, "OnlineOffline", IdealStateModeProperty.AUTO_REBALANCE+"");
+    _setupTool.addResourceToCluster(CLUSTER_NAME, db2, _PARTITIONS, "OnlineOffline",
+        RebalanceMode.FULL_AUTO+"");
     
     
     for (int i = 0; i < NODE_NR; i++)
@@ -132,7 +133,8 @@ public class TestAutoRebalance extends ZkStandAloneCMTestBaseWithPropertyServerC
   public void testDropResourceAutoRebalance() throws Exception
   {
     // add a resource to be dropped
-    _setupTool.addResourceToCluster(CLUSTER_NAME, "MyDB", _PARTITIONS, "OnlineOffline", IdealStateModeProperty.AUTO_REBALANCE+"");
+    _setupTool.addResourceToCluster(CLUSTER_NAME, "MyDB", _PARTITIONS, "OnlineOffline",
+        RebalanceMode.FULL_AUTO+"");
      
     _setupTool.rebalanceStorageCluster(CLUSTER_NAME, "MyDB", 1);
 
@@ -157,7 +159,8 @@ public class TestAutoRebalance extends ZkStandAloneCMTestBaseWithPropertyServerC
                                  ZK_ADDR);
     
  // add a resource to be dropped
-    _setupTool.addResourceToCluster(CLUSTER_NAME, "MyDB2", _PARTITIONS, "MasterSlave", IdealStateModeProperty.AUTO_REBALANCE+"");
+    _setupTool.addResourceToCluster(CLUSTER_NAME, "MyDB2", _PARTITIONS, "MasterSlave",
+        RebalanceMode.FULL_AUTO+"");
      
     _setupTool.rebalanceStorageCluster(CLUSTER_NAME, "MyDB2", 3);
 

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalancePartitionLimit.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalancePartitionLimit.java b/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalancePartitionLimit.java
index f26a867..d660e3f 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalancePartitionLimit.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestAutoRebalancePartitionLimit.java
@@ -36,7 +36,7 @@ import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.ExternalView;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.ClusterSetup;
 import org.apache.helix.tools.ClusterStateVerifier;
 import org.apache.helix.tools.ClusterStateVerifier.ZkVerifier;
@@ -68,7 +68,8 @@ private static final Logger LOG = Logger.getLogger(TestAutoRebalancePartitionLim
     // setup storage cluster
     _setupTool.addCluster(CLUSTER_NAME, true);
     
-    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, 100, "OnlineOffline", IdealStateModeProperty.AUTO_REBALANCE+"", 0, 25);
+    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, 100, "OnlineOffline",
+        RebalanceMode.FULL_AUTO+"", 0, 25);
     for (int i = 0; i < NODE_NR; i++)
     {
       String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestCustomizedIdealStateRebalancer.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestCustomizedIdealStateRebalancer.java b/helix-core/src/test/java/org/apache/helix/integration/TestCustomizedIdealStateRebalancer.java
index 70ab39c..1d34e5b 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestCustomizedIdealStateRebalancer.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestCustomizedIdealStateRebalancer.java
@@ -34,6 +34,7 @@ import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.ExternalView;
 import org.apache.helix.model.IdealState;
 import org.apache.helix.model.IdealState.IdealStateProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.ClusterStateVerifier;
 import org.apache.helix.tools.ClusterStateVerifier.ZkVerifier;
 import org.testng.Assert;
@@ -77,8 +78,7 @@ public class TestCustomizedIdealStateRebalancer extends ZkStandAloneCMTestBaseWi
   {
     _setupTool.addResourceToCluster(CLUSTER_NAME, db2, 60, "MasterSlave");
     _setupTool.addResourceProperty(CLUSTER_NAME, db2, IdealStateProperty.REBALANCER_CLASS_NAME.toString(), 
-        TestCustomizedIdealStateRebalancer.TestRebalancer.class.getName()
-        );
+        TestCustomizedIdealStateRebalancer.TestRebalancer.class.getName());
 
     _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db2, 3);
     

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestDisable.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestDisable.java b/helix-core/src/test/java/org/apache/helix/integration/TestDisable.java
index f154007..ae00657 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestDisable.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestDisable.java
@@ -32,7 +32,7 @@ import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.mock.controller.ClusterController;
 import org.apache.helix.mock.participant.MockParticipant;
 import org.apache.helix.model.IdealState;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.ClusterSetup;
 import org.apache.helix.tools.ClusterStateVerifier;
 import org.apache.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
@@ -75,7 +75,7 @@ public class TestDisable extends ZkIntegrationTestBase
     ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, baseAccessor);
     Builder keyBuilder = accessor.keyBuilder();
     IdealState idealState = accessor.getProperty(keyBuilder.idealStates("TestDB0"));
-    idealState.setIdealStateMode(IdealStateModeProperty.CUSTOMIZED.toString());
+    idealState.setRebalanceMode(RebalanceMode.CUSTOMIZED);
     accessor.setProperty(keyBuilder.idealStates("TestDB0"), idealState);
 
     
@@ -259,7 +259,7 @@ public class TestDisable extends ZkIntegrationTestBase
     ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, baseAccessor);
     Builder keyBuilder = accessor.keyBuilder();
     IdealState idealState = accessor.getProperty(keyBuilder.idealStates("TestDB0"));
-    idealState.setIdealStateMode(IdealStateModeProperty.CUSTOMIZED.toString());
+    idealState.setRebalanceMode(RebalanceMode.CUSTOMIZED);
     accessor.setProperty(keyBuilder.idealStates("TestDB0"), idealState);
 
     

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestDriver.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestDriver.java b/helix-core/src/test/java/org/apache/helix/integration/TestDriver.java
index 74b3bdc..63009fd 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestDriver.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestDriver.java
@@ -37,8 +37,8 @@ import org.apache.helix.TestHelper.StartCMResult;
 import org.apache.helix.controller.HelixControllerMain;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
 import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
 import org.apache.helix.model.IdealState.IdealStateProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.store.PropertyJsonSerializer;
 import org.apache.helix.store.PropertyStoreException;
 import org.apache.helix.tools.ClusterSetup;
@@ -367,8 +367,8 @@ public class TestDriver
       ZNRecord destIS = DefaultIdealStateCalculator.calculateIdealState(instanceNames,
           testInfo._numPartitionsPerDb, testInfo._replica - 1, dbName, "MASTER", "SLAVE");
       // destIS.setId(dbName);
-      destIS.setSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString(),
-          IdealStateModeProperty.CUSTOMIZED.toString());
+      destIS.setSimpleField(IdealStateProperty.REBALANCE_MODE.toString(),
+          RebalanceMode.CUSTOMIZED.toString());
       destIS.setSimpleField(IdealStateProperty.NUM_PARTITIONS.toString(),
           Integer.toString(testInfo._numPartitionsPerDb));
       destIS.setSimpleField(IdealStateProperty.STATE_MODEL_DEF_REF.toString(), STATE_MODEL);
@@ -378,8 +378,8 @@ public class TestDriver
       // + TEST_DB_PREFIX + i;
       ZNRecord initIS = new ZNRecord(dbName); // _zkClient.<ZNRecord>
                                               // readData(idealStatePath);
-      initIS.setSimpleField(IdealStateProperty.IDEAL_STATE_MODE.toString(),
-          IdealStateModeProperty.CUSTOMIZED.toString());
+      initIS.setSimpleField(IdealStateProperty.REBALANCE_MODE.toString(),
+          RebalanceMode.CUSTOMIZED.toString());
       initIS.setSimpleField(IdealStateProperty.NUM_PARTITIONS.toString(),
           Integer.toString(testInfo._numPartitionsPerDb));
       initIS.setSimpleField(IdealStateProperty.STATE_MODEL_DEF_REF.toString(), STATE_MODEL);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestInstanceAutoJoin.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestInstanceAutoJoin.java b/helix-core/src/test/java/org/apache/helix/integration/TestInstanceAutoJoin.java
index c9970e5..3ee96b8 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestInstanceAutoJoin.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestInstanceAutoJoin.java
@@ -6,7 +6,7 @@ import org.apache.helix.TestHelper;
 import org.apache.helix.TestHelper.StartCMResult;
 import org.apache.helix.manager.zk.ZKHelixManager;
 import org.apache.helix.model.ConfigScope;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.builder.ConfigScopeBuilder;
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -40,7 +40,8 @@ public class TestInstanceAutoJoin extends ZkStandAloneCMTestBase
     HelixManager manager = _startCMResultMap.get(instanceName)._manager;
     HelixDataAccessor accessor = manager.getHelixDataAccessor();
     
-    _setupTool.addResourceToCluster(CLUSTER_NAME, db2, 60, "OnlineOffline", IdealStateModeProperty.AUTO_REBALANCE+"");
+    _setupTool.addResourceToCluster(CLUSTER_NAME, db2, 60, "OnlineOffline",
+        RebalanceMode.FULL_AUTO+"");
     
 
     _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db2, 1);

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestInvalidAutoIdealState.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestInvalidAutoIdealState.java b/helix-core/src/test/java/org/apache/helix/integration/TestInvalidAutoIdealState.java
index f742a74..4e488f6 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestInvalidAutoIdealState.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestInvalidAutoIdealState.java
@@ -19,7 +19,6 @@ package org.apache.helix.integration;
  * under the License.
  */
 
-import java.net.URL;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Map;
@@ -27,24 +26,20 @@ import java.util.Map;
 import org.apache.helix.HelixAdmin;
 import org.apache.helix.HelixDataAccessor;
 import org.apache.helix.TestHelper;
-import org.apache.helix.ZNRecord;
 import org.apache.helix.ZkUnitTestBase;
 import org.apache.helix.PropertyKey.Builder;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
-import org.apache.helix.manager.zk.ZKHelixDataAccessor;
-import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.mock.controller.ClusterController;
 import org.apache.helix.mock.participant.MockParticipant;
 import org.apache.helix.model.ExternalView;
 import org.apache.helix.model.IdealState;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.helix.model.StateModelDefinition;
 import org.apache.helix.tools.ClusterStateVerifier;
 import org.apache.helix.tools.StateModelConfigGenerator;
 import org.apache.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
 import org.testng.Assert;
-import org.testng.annotations.Test;
 
 // Helix-50: integration test for generate message based on state priority
 public class TestInvalidAutoIdealState extends ZkUnitTestBase {
@@ -85,7 +80,7 @@ public class TestInvalidAutoIdealState extends ZkUnitTestBase {
 
         // construct ideal-state manually
         IdealState idealState = new IdealState(db);
-        idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
+        idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
         idealState.setNumPartitions(2);
         idealState.setReplicas("" + 2);	// should be 3
         idealState.setStateModelDefRef("MasterSlave");

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestRenamePartition.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestRenamePartition.java b/helix-core/src/test/java/org/apache/helix/integration/TestRenamePartition.java
index 4e52444..fe0cbc9 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestRenamePartition.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestRenamePartition.java
@@ -32,6 +32,7 @@ import org.apache.helix.manager.zk.ZKHelixDataAccessor;
 import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.mock.participant.MockParticipant;
 import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.tools.ClusterStateVerifier;
 import org.apache.helix.tools.DefaultIdealStateCalculator;
 import org.testng.Assert;
@@ -98,7 +99,7 @@ public class TestRenamePartition extends ZkIntegrationTestBase
     ZNRecord destIS = DefaultIdealStateCalculator.calculateIdealState(instanceNames,
         10, 3-1, "TestDB0", "MASTER", "SLAVE");
     IdealState idealState = new IdealState(destIS);
-    idealState.setIdealStateMode("CUSTOMIZED");
+    idealState.setRebalanceMode(RebalanceMode.CUSTOMIZED);
     idealState.setReplicas("3");
     idealState.setStateModelDefRef("MasterSlave");
     

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestStartMultipleControllersWithSameName.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestStartMultipleControllersWithSameName.java b/helix-core/src/test/java/org/apache/helix/integration/TestStartMultipleControllersWithSameName.java
index 27e6bdb..3bdeeec 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestStartMultipleControllersWithSameName.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestStartMultipleControllersWithSameName.java
@@ -26,7 +26,7 @@ import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZkTestHelper;
 import org.apache.helix.mock.controller.ClusterController;
-import org.apache.helix.model.IdealState.IdealStateModeProperty;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.testng.Assert;
@@ -50,7 +50,7 @@ public class TestStartMultipleControllersWithSameName extends ZkIntegrationTestB
 	        10, // partitions per resource
 	        n, // number of nodes
 	        1, // replicas
-	        "OnlineOffline", IdealStateModeProperty.AUTO_REBALANCE, true); // do
+	        "OnlineOffline", RebalanceMode.FULL_AUTO, true); // do
 									       // rebalance
 
 	// start controller

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/integration/TestZkReconnect.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestZkReconnect.java b/helix-core/src/test/java/org/apache/helix/integration/TestZkReconnect.java
index 0c261e2..1edfa30 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestZkReconnect.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestZkReconnect.java
@@ -21,7 +21,6 @@ package org.apache.helix.integration;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -92,7 +91,7 @@ public class TestZkReconnect {
     LOG.info("Ideal state assignment");
     HelixAdmin helixAdmin = participant.getClusterManagmentTool();
     helixAdmin.addResource(clusterName, resourceName, 1, "OnlineOffline", 
-        IdealState.IdealStateModeProperty.CUSTOMIZED.toString());
+        IdealState.RebalanceMode.CUSTOMIZED.toString());
 
     IdealState idealState = helixAdmin.getResourceIdealState(clusterName, resourceName);
     idealState.setReplicas("1");

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/13d19e91/helix-core/src/test/java/org/apache/helix/manager/zk/TestZNRecordSizeLimit.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/manager/zk/TestZNRecordSizeLimit.java b/helix-core/src/test/java/org/apache/helix/manager/zk/TestZNRecordSizeLimit.java
index 403864a..158a705 100644
--- a/helix-core/src/test/java/org/apache/helix/manager/zk/TestZNRecordSizeLimit.java
+++ b/helix-core/src/test/java/org/apache/helix/manager/zk/TestZNRecordSizeLimit.java
@@ -34,6 +34,7 @@ import org.apache.helix.manager.zk.ZNRecordStreamingSerializer;
 import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.model.IdealState;
+import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
 import org.apache.log4j.Logger;
 import org.testng.Assert;
@@ -130,7 +131,7 @@ public class TestZNRecordSizeLimit extends ZkUnitTestBase
 
     IdealState idealState = new IdealState("currentState");
     idealState.setStateModelDefRef("MasterSlave");
-    idealState.setIdealStateMode("AUTO");
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
     idealState.setNumPartitions(10);
 
     for (int i = 0; i < 1024; i++)
@@ -148,7 +149,7 @@ public class TestZNRecordSizeLimit extends ZkUnitTestBase
     // legal sized data gets written to zk
     idealState.getRecord().getSimpleFields().clear();
     idealState.setStateModelDefRef("MasterSlave");
-    idealState.setIdealStateMode("AUTO");
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
     idealState.setNumPartitions(10);
 
     for (int i = 0; i < 900; i++)
@@ -164,7 +165,7 @@ public class TestZNRecordSizeLimit extends ZkUnitTestBase
     // oversized data should not update existing data on zk
     idealState.getRecord().getSimpleFields().clear();
     idealState.setStateModelDefRef("MasterSlave");
-    idealState.setIdealStateMode("AUTO");
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
     idealState.setNumPartitions(10);
     for (int i = 900; i < 1024; i++)
     {
@@ -271,7 +272,7 @@ public class TestZNRecordSizeLimit extends ZkUnitTestBase
 //    ZNRecord statusUpdates = new ZNRecord("statusUpdates");
     IdealState idealState = new IdealState("currentState");
     idealState.setStateModelDefRef("MasterSlave");
-    idealState.setIdealStateMode("AUTO");
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
     idealState.setNumPartitions(10);
 
     for (int i = 0; i < 1024; i++)
@@ -289,7 +290,7 @@ public class TestZNRecordSizeLimit extends ZkUnitTestBase
     // legal sized data gets written to zk
     idealState.getRecord().getSimpleFields().clear();
     idealState.setStateModelDefRef("MasterSlave");
-    idealState.setIdealStateMode("AUTO");
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
     idealState.setNumPartitions(10);
 
     for (int i = 0; i < 900; i++)
@@ -307,7 +308,7 @@ public class TestZNRecordSizeLimit extends ZkUnitTestBase
     // oversized data should not update existing data on zk
     idealState.getRecord().getSimpleFields().clear();
     idealState.setStateModelDefRef("MasterSlave");
-    idealState.setIdealStateMode("AUTO");
+    idealState.setRebalanceMode(RebalanceMode.SEMI_AUTO);
     idealState.setNumPartitions(10);
 
     for (int i = 900; i < 1024; i++)