You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by lx...@apache.org on 2017/02/02 17:53:27 UTC

[7/9] helix git commit: Rename PropertyPathConfig to PropertyPathBuilder

Rename PropertyPathConfig to PropertyPathBuilder


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

Branch: refs/heads/helix-0.6.x
Commit: 0b7a1a0fc93bf1f4699c45b7427663a17e94fc99
Parents: e9b4f6a
Author: Junkai Xue <jx...@linkedin.com>
Authored: Sat Jan 28 16:55:24 2017 -0800
Committer: Junkai Xue <jx...@linkedin.com>
Committed: Wed Feb 1 20:19:43 2017 -0800

----------------------------------------------------------------------
 .../helix/webapp/resources/JobResource.java     |   2 -
 .../resources/SchedulerTasksResource.java       |   4 +-
 .../webapp/TestClusterManagementWebapp.java     |   4 +-
 .../main/java/org/apache/helix/PropertyKey.java |   3 +-
 .../org/apache/helix/PropertyPathBuilder.java   | 204 +++++++++++++++++++
 .../org/apache/helix/PropertyPathConfig.java    | 204 -------------------
 .../helix/manager/zk/CallbackHandler.java       |   6 +-
 .../apache/helix/manager/zk/ZKHelixAdmin.java   |  36 ++--
 .../apache/helix/manager/zk/ZKHelixManager.java |   4 +-
 .../org/apache/helix/manager/zk/ZKUtil.java     |  40 ++--
 .../java/org/apache/helix/task/TaskDriver.java  |   4 +-
 .../helix/tools/ClusterStateVerifier.java       |   4 +-
 .../java/org/apache/helix/util/HelixUtil.java   |   4 +-
 .../src/test/java/org/apache/helix/Mocks.java   |   4 +-
 .../apache/helix/TestPropertyPathBuilder.java   |  53 +++++
 .../apache/helix/TestPropertyPathConfig.java    |  53 -----
 .../java/org/apache/helix/ZkUnitTestBase.java   |   2 +-
 .../TestAddNodeAfterControllerStart.java        |  10 +-
 .../integration/TestAutoIsWithEmptyMap.java     |   4 +-
 .../integration/TestCarryOverBadCurState.java   |   4 +-
 .../apache/helix/integration/TestDriver.java    |   4 +-
 .../integration/TestEnableCompression.java      |   7 +-
 .../helix/integration/TestMessageThrottle.java  |   4 +-
 .../helix/integration/TestNullReplica.java      |   4 +-
 ...estStartMultipleControllersWithSameName.java |   4 +-
 .../manager/TestParticipantManager.java         |   4 +-
 .../task/TestTaskRebalancerStopResume.java      |   4 +-
 .../zk/TestWtCacheAsyncOpMultiThread.java       |  14 +-
 .../zk/TestWtCacheAsyncOpSingleThread.java      |  22 +-
 .../zk/TestWtCacheSyncOpSingleThread.java       |  20 +-
 .../org/apache/helix/manager/zk/TestZKUtil.java |  14 +-
 .../manager/zk/TestZkBaseDataAccessor.java      |  39 ++--
 .../zk/TestZkCacheAsyncOpSingleThread.java      |  26 +--
 .../zk/TestZkCacheSyncOpSingleThread.java       |  10 +-
 .../helix/manager/zk/TestZkHelixAdmin.java      |   8 +-
 .../participant/TestDistControllerElection.java |   8 +-
 .../apache/helix/tools/TestClusterSetup.java    |   5 +-
 37 files changed, 412 insertions(+), 434 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/JobResource.java
----------------------------------------------------------------------
diff --git a/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/JobResource.java b/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/JobResource.java
index d31c81b..42f700a 100644
--- a/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/JobResource.java
+++ b/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/JobResource.java
@@ -22,8 +22,6 @@ package org.apache.helix.webapp.resources;
 import org.apache.helix.HelixDataAccessor;
 import org.apache.helix.HelixProperty;
 import org.apache.helix.PropertyKey;
-import org.apache.helix.PropertyPathConfig;
-import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.manager.zk.ZkClient;
 import org.apache.helix.task.JobContext;

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/SchedulerTasksResource.java
----------------------------------------------------------------------
diff --git a/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/SchedulerTasksResource.java b/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/SchedulerTasksResource.java
index b9083bb..76cb7a6 100644
--- a/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/SchedulerTasksResource.java
+++ b/helix-admin-webapp/src/main/java/org/apache/helix/webapp/resources/SchedulerTasksResource.java
@@ -29,7 +29,7 @@ import java.util.UUID;
 import org.apache.helix.HelixDataAccessor;
 import org.apache.helix.HelixException;
 import org.apache.helix.InstanceType;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.manager.zk.DefaultSchedulerMessageHandlerFactory;
 import org.apache.helix.manager.zk.ZkClient;
@@ -148,7 +148,7 @@ public class SchedulerTasksResource extends ServerResource {
           schedulerMessage);
 
       Map<String, String> resultMap = new HashMap<String, String>();
-      resultMap.put("StatusUpdatePath", PropertyPathConfig.getPath(
+      resultMap.put("StatusUpdatePath", PropertyPathBuilder.getPath(
           PropertyType.STATUSUPDATES_CONTROLLER, clusterName, MessageType.SCHEDULER_MSG.toString(),
           schedulerMessage.getMsgId()));
       resultMap.put("MessageType", Message.MessageType.SCHEDULER_MSG.toString());

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-admin-webapp/src/test/java/org/apache/helix/webapp/TestClusterManagementWebapp.java
----------------------------------------------------------------------
diff --git a/helix-admin-webapp/src/test/java/org/apache/helix/webapp/TestClusterManagementWebapp.java b/helix-admin-webapp/src/test/java/org/apache/helix/webapp/TestClusterManagementWebapp.java
index b645dfd..3ee3fde 100644
--- a/helix-admin-webapp/src/test/java/org/apache/helix/webapp/TestClusterManagementWebapp.java
+++ b/helix-admin-webapp/src/test/java/org/apache/helix/webapp/TestClusterManagementWebapp.java
@@ -26,7 +26,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.model.InstanceConfig.InstanceConfigProperty;
@@ -562,7 +562,7 @@ public class TestClusterManagementWebapp extends AdminTestBase {
     System.out.println(sw.toString());
 
     // verify pause znode exists
-    String pausePath = PropertyPathConfig.getPath(PropertyType.PAUSE, clusterName);
+    String pausePath = PropertyPathBuilder.getPath(PropertyType.PAUSE, clusterName);
     System.out.println("pausePath: " + pausePath);
     boolean exists = _gZkClient.exists(pausePath);
     Assert.assertTrue(exists, pausePath + " should exist");

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/PropertyKey.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/PropertyKey.java b/helix-core/src/main/java/org/apache/helix/PropertyKey.java
index 0125902..7265a7e 100644
--- a/helix-core/src/main/java/org/apache/helix/PropertyKey.java
+++ b/helix-core/src/main/java/org/apache/helix/PropertyKey.java
@@ -54,7 +54,6 @@ import org.apache.helix.model.PauseSignal;
 import org.apache.helix.model.ResourceConfig;
 import org.apache.helix.model.StateModelDefinition;
 import org.apache.helix.model.StatusUpdate;
-import org.apache.helix.tools.YAMLClusterSetup;
 import org.apache.log4j.Logger;
 
 /**
@@ -116,7 +115,7 @@ public class PropertyKey {
   public String getPath() {
     String clusterName = _params[0];
     String[] subKeys = Arrays.copyOfRange(_params, 1, _params.length);
-    String path = PropertyPathConfig.getPath(_type, clusterName, subKeys);
+    String path = PropertyPathBuilder.getPath(_type, clusterName, subKeys);
     if (path == null) {
       LOG.error("Invalid property key with type:" + _type + "subKeys:" + Arrays.toString(_params));
     }

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/PropertyPathBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/PropertyPathBuilder.java b/helix-core/src/main/java/org/apache/helix/PropertyPathBuilder.java
new file mode 100644
index 0000000..5773c60
--- /dev/null
+++ b/helix-core/src/main/java/org/apache/helix/PropertyPathBuilder.java
@@ -0,0 +1,204 @@
+package org.apache.helix;
+
+/*
+ * 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 static org.apache.helix.PropertyType.CONFIGS;
+import static org.apache.helix.PropertyType.CURRENTSTATES;
+import static org.apache.helix.PropertyType.EXTERNALVIEW;
+import static org.apache.helix.PropertyType.HISTORY;
+import static org.apache.helix.PropertyType.IDEALSTATES;
+import static org.apache.helix.PropertyType.LIVEINSTANCES;
+import static org.apache.helix.PropertyType.MESSAGES;
+import static org.apache.helix.PropertyType.PAUSE;
+import static org.apache.helix.PropertyType.STATEMODELDEFS;
+import static org.apache.helix.PropertyType.STATUSUPDATES;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.helix.model.CurrentState;
+import org.apache.helix.model.ExternalView;
+import org.apache.helix.model.IdealState;
+import org.apache.helix.model.InstanceConfig;
+import org.apache.helix.model.LeaderHistory;
+import org.apache.helix.model.LiveInstance;
+import org.apache.helix.model.Message;
+import org.apache.helix.model.PauseSignal;
+import org.apache.helix.model.StateModelDefinition;
+import org.apache.helix.model.StatusUpdate;
+import org.apache.log4j.Logger;
+
+/**
+ * Utility mapping properties to their Zookeeper locations
+ */
+public class PropertyPathBuilder {
+  private static Logger logger = Logger.getLogger(PropertyPathBuilder.class);
+
+  static final Map<PropertyType, Map<Integer, String>> templateMap =
+      new HashMap<PropertyType, Map<Integer, String>>();
+  static final Map<PropertyType, Class<? extends HelixProperty>> typeToClassMapping =
+      new HashMap<PropertyType, Class<? extends HelixProperty>>();
+  static {
+    typeToClassMapping.put(LIVEINSTANCES, LiveInstance.class);
+    typeToClassMapping.put(IDEALSTATES, IdealState.class);
+    typeToClassMapping.put(CONFIGS, InstanceConfig.class);
+    typeToClassMapping.put(EXTERNALVIEW, ExternalView.class);
+    typeToClassMapping.put(STATEMODELDEFS, StateModelDefinition.class);
+    typeToClassMapping.put(MESSAGES, Message.class);
+    typeToClassMapping.put(CURRENTSTATES, CurrentState.class);
+    typeToClassMapping.put(STATUSUPDATES, StatusUpdate.class);
+    typeToClassMapping.put(HISTORY, LeaderHistory.class);
+    typeToClassMapping.put(PAUSE, PauseSignal.class);
+
+    // @formatter:off
+    addEntry(PropertyType.CONFIGS, 1, "/{clusterName}/CONFIGS");
+    addEntry(PropertyType.CONFIGS, 2, "/{clusterName}/CONFIGS/{scope}");
+    addEntry(PropertyType.CONFIGS, 3, "/{clusterName}/CONFIGS/{scope}/{scopeKey}");
+    // addEntry(PropertyType.CONFIGS,2,"/{clusterName}/CONFIGS/{instanceName}");
+    addEntry(PropertyType.LIVEINSTANCES, 1, "/{clusterName}/LIVEINSTANCES");
+    addEntry(PropertyType.LIVEINSTANCES, 2, "/{clusterName}/LIVEINSTANCES/{instanceName}");
+    addEntry(PropertyType.INSTANCES, 1, "/{clusterName}/INSTANCES");
+    addEntry(PropertyType.INSTANCES, 2, "/{clusterName}/INSTANCES/{instanceName}");
+    addEntry(PropertyType.IDEALSTATES, 1, "/{clusterName}/IDEALSTATES");
+    addEntry(PropertyType.IDEALSTATES, 2, "/{clusterName}/IDEALSTATES/{resourceName}");
+    addEntry(PropertyType.EXTERNALVIEW, 1, "/{clusterName}/EXTERNALVIEW");
+    addEntry(PropertyType.EXTERNALVIEW, 2, "/{clusterName}/EXTERNALVIEW/{resourceName}");
+    addEntry(PropertyType.STATEMODELDEFS, 1, "/{clusterName}/STATEMODELDEFS");
+    addEntry(PropertyType.STATEMODELDEFS, 2, "/{clusterName}/STATEMODELDEFS/{stateModelName}");
+    addEntry(PropertyType.CONTROLLER, 1, "/{clusterName}/CONTROLLER");
+    addEntry(PropertyType.PROPERTYSTORE, 1, "/{clusterName}/PROPERTYSTORE");
+
+    // INSTANCE
+    addEntry(PropertyType.MESSAGES, 2, "/{clusterName}/INSTANCES/{instanceName}/MESSAGES");
+    addEntry(PropertyType.MESSAGES, 3, "/{clusterName}/INSTANCES/{instanceName}/MESSAGES/{msgId}");
+    addEntry(PropertyType.CURRENTSTATES, 2, "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES");
+    addEntry(PropertyType.CURRENTSTATES, 3,
+        "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES/{sessionId}");
+    addEntry(PropertyType.CURRENTSTATES, 4,
+        "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES/{sessionId}/{resourceName}");
+    addEntry(PropertyType.CURRENTSTATES, 5,
+        "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES/{sessionId}/{resourceName}/{bucketName}");
+    addEntry(PropertyType.STATUSUPDATES, 2, "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES");
+    addEntry(PropertyType.STATUSUPDATES, 3,
+        "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES/{sessionId}");
+    addEntry(PropertyType.STATUSUPDATES, 4,
+        "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES/{sessionId}/{subPath}");
+    addEntry(PropertyType.STATUSUPDATES, 5,
+        "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES/{sessionId}/{subPath}/{recordName}");
+    addEntry(PropertyType.ERRORS, 2, "/{clusterName}/INSTANCES/{instanceName}/ERRORS");
+    addEntry(PropertyType.ERRORS, 3, "/{clusterName}/INSTANCES/{instanceName}/ERRORS/{sessionId}");
+    addEntry(PropertyType.ERRORS, 4,
+        "/{clusterName}/INSTANCES/{instanceName}/ERRORS/{sessionId}/{subPath}");
+    addEntry(PropertyType.ERRORS, 5,
+        "/{clusterName}/INSTANCES/{instanceName}/ERRORS/{sessionId}/{subPath}/{recordName}");
+    addEntry(PropertyType.HEALTHREPORT, 2, "/{clusterName}/INSTANCES/{instanceName}/HEALTHREPORT");
+    addEntry(PropertyType.HEALTHREPORT, 3,
+        "/{clusterName}/INSTANCES/{instanceName}/HEALTHREPORT/{reportName}");
+    // CONTROLLER
+    addEntry(PropertyType.MESSAGES_CONTROLLER, 1, "/{clusterName}/CONTROLLER/MESSAGES");
+    addEntry(PropertyType.MESSAGES_CONTROLLER, 2, "/{clusterName}/CONTROLLER/MESSAGES/{msgId}");
+    addEntry(PropertyType.ERRORS_CONTROLLER, 1, "/{clusterName}/CONTROLLER/ERRORS");
+    addEntry(PropertyType.ERRORS_CONTROLLER, 2, "/{clusterName}/CONTROLLER/ERRORS/{errorId}");
+    addEntry(PropertyType.STATUSUPDATES_CONTROLLER, 1, "/{clusterName}/CONTROLLER/STATUSUPDATES");
+    addEntry(PropertyType.STATUSUPDATES_CONTROLLER, 2,
+        "/{clusterName}/CONTROLLER/STATUSUPDATES/{subPath}");
+    addEntry(PropertyType.STATUSUPDATES_CONTROLLER, 3,
+        "/{clusterName}/CONTROLLER/STATUSUPDATES/{subPath}/{recordName}");
+    addEntry(PropertyType.LEADER, 1, "/{clusterName}/CONTROLLER/LEADER");
+    addEntry(PropertyType.HISTORY, 1, "/{clusterName}/CONTROLLER/HISTORY");
+    addEntry(PropertyType.PAUSE, 1, "/{clusterName}/CONTROLLER/PAUSE");
+    // @formatter:on
+
+  }
+  static Pattern pattern = Pattern.compile("(\\{.+?\\})");
+
+  private static void addEntry(PropertyType type, int numKeys, String template) {
+    if (!templateMap.containsKey(type)) {
+      templateMap.put(type, new HashMap<Integer, String>());
+    }
+    logger.trace("Adding template for type:" + type.getType() + " arguments:" + numKeys
+        + " template:" + template);
+    templateMap.get(type).put(numKeys, template);
+  }
+
+  /**
+   * Get the Zookeeper path given the property type, cluster, and parameters
+   * @param type
+   * @param clusterName
+   * @param keys
+   * @return a valid path, or null if none exists
+   */
+  public static String getPath(PropertyType type, String clusterName, String... keys) {
+    if (clusterName == null) {
+      logger.warn("ClusterName can't be null for type:" + type);
+      return null;
+    }
+    if (keys == null) {
+      keys = new String[] {};
+    }
+    String template = null;
+    if (templateMap.containsKey(type)) {
+      // keys.length+1 since we add clusterName
+      template = templateMap.get(type).get(keys.length + 1);
+    }
+
+    String result = null;
+
+    if (template != null) {
+      result = template;
+      Matcher matcher = pattern.matcher(template);
+      int count = 0;
+      while (matcher.find()) {
+        count = count + 1;
+        String var = matcher.group();
+        if (count == 1) {
+          result = result.replace(var, clusterName);
+        } else {
+          result = result.replace(var, keys[count - 2]);
+        }
+      }
+    }
+    if (result == null || result.indexOf('{') > -1 || result.indexOf('}') > -1) {
+      logger.warn("Unable to instantiate template:" + template + " using clusterName:"
+          + clusterName + " and keys:" + Arrays.toString(keys));
+    }
+    return result;
+  }
+
+  /**
+   * Given a path, find the name of an instance at that path
+   * @param path
+   * @return a valid instance name, or null if none exists
+   */
+  public static String getInstanceNameFromPath(String path) {
+    // path structure
+    // /<cluster_name>/instances/<instance_name>/[currentStates/messages]
+    if (path.contains("/" + PropertyType.INSTANCES + "/")) {
+      String[] split = path.split("\\/");
+      if (split.length > 3) {
+        return split[3];
+      }
+    }
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/PropertyPathConfig.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/PropertyPathConfig.java b/helix-core/src/main/java/org/apache/helix/PropertyPathConfig.java
deleted file mode 100644
index 97beb47..0000000
--- a/helix-core/src/main/java/org/apache/helix/PropertyPathConfig.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package org.apache.helix;
-
-/*
- * 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 static org.apache.helix.PropertyType.CONFIGS;
-import static org.apache.helix.PropertyType.CURRENTSTATES;
-import static org.apache.helix.PropertyType.EXTERNALVIEW;
-import static org.apache.helix.PropertyType.HISTORY;
-import static org.apache.helix.PropertyType.IDEALSTATES;
-import static org.apache.helix.PropertyType.LIVEINSTANCES;
-import static org.apache.helix.PropertyType.MESSAGES;
-import static org.apache.helix.PropertyType.PAUSE;
-import static org.apache.helix.PropertyType.STATEMODELDEFS;
-import static org.apache.helix.PropertyType.STATUSUPDATES;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.helix.model.CurrentState;
-import org.apache.helix.model.ExternalView;
-import org.apache.helix.model.IdealState;
-import org.apache.helix.model.InstanceConfig;
-import org.apache.helix.model.LeaderHistory;
-import org.apache.helix.model.LiveInstance;
-import org.apache.helix.model.Message;
-import org.apache.helix.model.PauseSignal;
-import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.StatusUpdate;
-import org.apache.log4j.Logger;
-
-/**
- * Utility mapping properties to their Zookeeper locations
- */
-public class PropertyPathConfig {
-  private static Logger logger = Logger.getLogger(PropertyPathConfig.class);
-
-  static final Map<PropertyType, Map<Integer, String>> templateMap =
-      new HashMap<PropertyType, Map<Integer, String>>();
-  static final Map<PropertyType, Class<? extends HelixProperty>> typeToClassMapping =
-      new HashMap<PropertyType, Class<? extends HelixProperty>>();
-  static {
-    typeToClassMapping.put(LIVEINSTANCES, LiveInstance.class);
-    typeToClassMapping.put(IDEALSTATES, IdealState.class);
-    typeToClassMapping.put(CONFIGS, InstanceConfig.class);
-    typeToClassMapping.put(EXTERNALVIEW, ExternalView.class);
-    typeToClassMapping.put(STATEMODELDEFS, StateModelDefinition.class);
-    typeToClassMapping.put(MESSAGES, Message.class);
-    typeToClassMapping.put(CURRENTSTATES, CurrentState.class);
-    typeToClassMapping.put(STATUSUPDATES, StatusUpdate.class);
-    typeToClassMapping.put(HISTORY, LeaderHistory.class);
-    typeToClassMapping.put(PAUSE, PauseSignal.class);
-
-    // @formatter:off
-    addEntry(PropertyType.CONFIGS, 1, "/{clusterName}/CONFIGS");
-    addEntry(PropertyType.CONFIGS, 2, "/{clusterName}/CONFIGS/{scope}");
-    addEntry(PropertyType.CONFIGS, 3, "/{clusterName}/CONFIGS/{scope}/{scopeKey}");
-    // addEntry(PropertyType.CONFIGS,2,"/{clusterName}/CONFIGS/{instanceName}");
-    addEntry(PropertyType.LIVEINSTANCES, 1, "/{clusterName}/LIVEINSTANCES");
-    addEntry(PropertyType.LIVEINSTANCES, 2, "/{clusterName}/LIVEINSTANCES/{instanceName}");
-    addEntry(PropertyType.INSTANCES, 1, "/{clusterName}/INSTANCES");
-    addEntry(PropertyType.INSTANCES, 2, "/{clusterName}/INSTANCES/{instanceName}");
-    addEntry(PropertyType.IDEALSTATES, 1, "/{clusterName}/IDEALSTATES");
-    addEntry(PropertyType.IDEALSTATES, 2, "/{clusterName}/IDEALSTATES/{resourceName}");
-    addEntry(PropertyType.EXTERNALVIEW, 1, "/{clusterName}/EXTERNALVIEW");
-    addEntry(PropertyType.EXTERNALVIEW, 2, "/{clusterName}/EXTERNALVIEW/{resourceName}");
-    addEntry(PropertyType.STATEMODELDEFS, 1, "/{clusterName}/STATEMODELDEFS");
-    addEntry(PropertyType.STATEMODELDEFS, 2, "/{clusterName}/STATEMODELDEFS/{stateModelName}");
-    addEntry(PropertyType.CONTROLLER, 1, "/{clusterName}/CONTROLLER");
-    addEntry(PropertyType.PROPERTYSTORE, 1, "/{clusterName}/PROPERTYSTORE");
-
-    // INSTANCE
-    addEntry(PropertyType.MESSAGES, 2, "/{clusterName}/INSTANCES/{instanceName}/MESSAGES");
-    addEntry(PropertyType.MESSAGES, 3, "/{clusterName}/INSTANCES/{instanceName}/MESSAGES/{msgId}");
-    addEntry(PropertyType.CURRENTSTATES, 2, "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES");
-    addEntry(PropertyType.CURRENTSTATES, 3,
-        "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES/{sessionId}");
-    addEntry(PropertyType.CURRENTSTATES, 4,
-        "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES/{sessionId}/{resourceName}");
-    addEntry(PropertyType.CURRENTSTATES, 5,
-        "/{clusterName}/INSTANCES/{instanceName}/CURRENTSTATES/{sessionId}/{resourceName}/{bucketName}");
-    addEntry(PropertyType.STATUSUPDATES, 2, "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES");
-    addEntry(PropertyType.STATUSUPDATES, 3,
-        "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES/{sessionId}");
-    addEntry(PropertyType.STATUSUPDATES, 4,
-        "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES/{sessionId}/{subPath}");
-    addEntry(PropertyType.STATUSUPDATES, 5,
-        "/{clusterName}/INSTANCES/{instanceName}/STATUSUPDATES/{sessionId}/{subPath}/{recordName}");
-    addEntry(PropertyType.ERRORS, 2, "/{clusterName}/INSTANCES/{instanceName}/ERRORS");
-    addEntry(PropertyType.ERRORS, 3, "/{clusterName}/INSTANCES/{instanceName}/ERRORS/{sessionId}");
-    addEntry(PropertyType.ERRORS, 4,
-        "/{clusterName}/INSTANCES/{instanceName}/ERRORS/{sessionId}/{subPath}");
-    addEntry(PropertyType.ERRORS, 5,
-        "/{clusterName}/INSTANCES/{instanceName}/ERRORS/{sessionId}/{subPath}/{recordName}");
-    addEntry(PropertyType.HEALTHREPORT, 2, "/{clusterName}/INSTANCES/{instanceName}/HEALTHREPORT");
-    addEntry(PropertyType.HEALTHREPORT, 3,
-        "/{clusterName}/INSTANCES/{instanceName}/HEALTHREPORT/{reportName}");
-    // CONTROLLER
-    addEntry(PropertyType.MESSAGES_CONTROLLER, 1, "/{clusterName}/CONTROLLER/MESSAGES");
-    addEntry(PropertyType.MESSAGES_CONTROLLER, 2, "/{clusterName}/CONTROLLER/MESSAGES/{msgId}");
-    addEntry(PropertyType.ERRORS_CONTROLLER, 1, "/{clusterName}/CONTROLLER/ERRORS");
-    addEntry(PropertyType.ERRORS_CONTROLLER, 2, "/{clusterName}/CONTROLLER/ERRORS/{errorId}");
-    addEntry(PropertyType.STATUSUPDATES_CONTROLLER, 1, "/{clusterName}/CONTROLLER/STATUSUPDATES");
-    addEntry(PropertyType.STATUSUPDATES_CONTROLLER, 2,
-        "/{clusterName}/CONTROLLER/STATUSUPDATES/{subPath}");
-    addEntry(PropertyType.STATUSUPDATES_CONTROLLER, 3,
-        "/{clusterName}/CONTROLLER/STATUSUPDATES/{subPath}/{recordName}");
-    addEntry(PropertyType.LEADER, 1, "/{clusterName}/CONTROLLER/LEADER");
-    addEntry(PropertyType.HISTORY, 1, "/{clusterName}/CONTROLLER/HISTORY");
-    addEntry(PropertyType.PAUSE, 1, "/{clusterName}/CONTROLLER/PAUSE");
-    // @formatter:on
-
-  }
-  static Pattern pattern = Pattern.compile("(\\{.+?\\})");
-
-  private static void addEntry(PropertyType type, int numKeys, String template) {
-    if (!templateMap.containsKey(type)) {
-      templateMap.put(type, new HashMap<Integer, String>());
-    }
-    logger.trace("Adding template for type:" + type.getType() + " arguments:" + numKeys
-        + " template:" + template);
-    templateMap.get(type).put(numKeys, template);
-  }
-
-  /**
-   * Get the Zookeeper path given the property type, cluster, and parameters
-   * @param type
-   * @param clusterName
-   * @param keys
-   * @return a valid path, or null if none exists
-   */
-  public static String getPath(PropertyType type, String clusterName, String... keys) {
-    if (clusterName == null) {
-      logger.warn("ClusterName can't be null for type:" + type);
-      return null;
-    }
-    if (keys == null) {
-      keys = new String[] {};
-    }
-    String template = null;
-    if (templateMap.containsKey(type)) {
-      // keys.length+1 since we add clusterName
-      template = templateMap.get(type).get(keys.length + 1);
-    }
-
-    String result = null;
-
-    if (template != null) {
-      result = template;
-      Matcher matcher = pattern.matcher(template);
-      int count = 0;
-      while (matcher.find()) {
-        count = count + 1;
-        String var = matcher.group();
-        if (count == 1) {
-          result = result.replace(var, clusterName);
-        } else {
-          result = result.replace(var, keys[count - 2]);
-        }
-      }
-    }
-    if (result == null || result.indexOf('{') > -1 || result.indexOf('}') > -1) {
-      logger.warn("Unable to instantiate template:" + template + " using clusterName:"
-          + clusterName + " and keys:" + Arrays.toString(keys));
-    }
-    return result;
-  }
-
-  /**
-   * Given a path, find the name of an instance at that path
-   * @param path
-   * @return a valid instance name, or null if none exists
-   */
-  public static String getInstanceNameFromPath(String path) {
-    // path structure
-    // /<cluster_name>/instances/<instance_name>/[currentStates/messages]
-    if (path.contains("/" + PropertyType.INSTANCES + "/")) {
-      String[] split = path.split("\\/");
-      if (split.length > 3) {
-        return split[3];
-      }
-    }
-    return null;
-  }
-}

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/manager/zk/CallbackHandler.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/CallbackHandler.java b/helix-core/src/main/java/org/apache/helix/manager/zk/CallbackHandler.java
index fd59ecc..c3e8206 100644
--- a/helix-core/src/main/java/org/apache/helix/manager/zk/CallbackHandler.java
+++ b/helix-core/src/main/java/org/apache/helix/manager/zk/CallbackHandler.java
@@ -53,7 +53,7 @@ import org.apache.helix.MessageListener;
 import org.apache.helix.NotificationContext;
 import org.apache.helix.NotificationContext.Type;
 import org.apache.helix.PropertyKey;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.ScopedConfigChangeListener;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.model.CurrentState;
@@ -176,7 +176,7 @@ public class CallbackHandler implements IZkChildListener, IZkDataListener
         CurrentStateChangeListener currentStateChangeListener =
             (CurrentStateChangeListener) _listener;
         subscribeForChanges(changeContext, _path, true, true);
-        String instanceName = PropertyPathConfig.getInstanceNameFromPath(_path);
+        String instanceName = PropertyPathBuilder.getInstanceNameFromPath(_path);
 
         List<CurrentState> currentStates = _accessor.getChildValues(_propertyKey);
 
@@ -185,7 +185,7 @@ public class CallbackHandler implements IZkChildListener, IZkDataListener
       } else if (_changeType == MESSAGE) {
         MessageListener messageListener = (MessageListener) _listener;
         subscribeForChanges(changeContext, _path, true, false);
-        String instanceName = PropertyPathConfig.getInstanceNameFromPath(_path);
+        String instanceName = PropertyPathBuilder.getInstanceNameFromPath(_path);
         List<Message> messages = _accessor.getChildValues(_propertyKey);
 
         messageListener.onMessage(instanceName, messages, changeContext);

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/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 b58b344..2e2f3dd 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
@@ -48,7 +48,7 @@ import org.apache.helix.HelixException;
 import org.apache.helix.InstanceType;
 import org.apache.helix.PropertyKey;
 import org.apache.helix.PropertyKey.Builder;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.controller.rebalancer.strategy.RebalanceStrategy;
@@ -100,7 +100,7 @@ public class ZKHelixAdmin implements HelixAdmin {
       throw new HelixException("cluster " + clusterName + " is not setup yet");
     }
     String instanceConfigsPath =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.PARTICIPANT.toString());
     String nodeId = instanceConfig.getId();
     String instanceConfigPath = instanceConfigsPath + "/" + nodeId;
@@ -120,7 +120,7 @@ public class ZKHelixAdmin implements HelixAdmin {
   @Override
   public void dropInstance(String clusterName, InstanceConfig instanceConfig) {
     String instanceConfigsPath =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.PARTICIPANT.toString());
     String nodeId = instanceConfig.getId();
     String instanceConfigPath = instanceConfigsPath + "/" + nodeId;
@@ -146,7 +146,7 @@ public class ZKHelixAdmin implements HelixAdmin {
   @Override
   public InstanceConfig getInstanceConfig(String clusterName, String instanceName) {
     String instanceConfigPath =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.PARTICIPANT.toString(), instanceName);
     if (!_zkClient.exists(instanceConfigPath)) {
       throw new HelixException("instance" + instanceName + " does not exist in cluster "
@@ -163,7 +163,7 @@ public class ZKHelixAdmin implements HelixAdmin {
   @Override
   public boolean setInstanceConfig(String clusterName, String instanceName,
       InstanceConfig newInstanceConfig) {
-    String instanceConfigPath = PropertyPathConfig
+    String instanceConfigPath = PropertyPathBuilder
         .getPath(PropertyType.CONFIGS, clusterName, ConfigScopeProperty.PARTICIPANT.toString(),
             instanceName);
     if (!_zkClient.exists(instanceConfigPath)) {
@@ -190,7 +190,7 @@ public class ZKHelixAdmin implements HelixAdmin {
   public void enableInstance(final String clusterName, final String instanceName,
       final boolean enabled) {
     String path =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.PARTICIPANT.toString(), instanceName);
 
     BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_zkClient);
@@ -217,7 +217,7 @@ public class ZKHelixAdmin implements HelixAdmin {
   @Override
   public void enableResource(final String clusterName, final String resourceName,
       final boolean enabled) {
-    String path = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, resourceName);
+    String path = PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, clusterName, resourceName);
     BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_zkClient);
     if (!baseAccessor.exists(path, 0)) {
       throw new HelixException("Cluster " + clusterName + ", resource: " + resourceName
@@ -241,7 +241,7 @@ public class ZKHelixAdmin implements HelixAdmin {
   public void enablePartition(final boolean enabled, final String clusterName,
       final String instanceName, final String resourceName, final List<String> partitionNames) {
     String path =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.PARTICIPANT.toString(), instanceName);
 
     BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_zkClient);
@@ -254,7 +254,7 @@ public class ZKHelixAdmin implements HelixAdmin {
 
     // check resource exists
     String idealStatePath =
-        PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, resourceName);
+        PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, clusterName, resourceName);
 
     ZNRecord idealStateRecord = null;
     try {
@@ -552,20 +552,20 @@ public class ZKHelixAdmin implements HelixAdmin {
     _zkClient.createPersistent(HelixUtil.getIdealStatePath(clusterName));
     // CONFIGURATIONS
     path =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.CLUSTER.toString(), clusterName);
     _zkClient.createPersistent(path, true);
     _zkClient.writeData(path, new ZNRecord(clusterName));
     path =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.PARTICIPANT.toString());
     _zkClient.createPersistent(path);
     path =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.RESOURCE.toString());
     _zkClient.createPersistent(path);
     // PROPERTY STORE
-    path = PropertyPathConfig.getPath(PropertyType.PROPERTYSTORE, clusterName);
+    path = PropertyPathBuilder.getPath(PropertyType.PROPERTYSTORE, clusterName);
     _zkClient.createPersistent(path);
     // LIVE INSTANCES
     _zkClient.createPersistent(HelixUtil.getLiveInstancesPath(clusterName));
@@ -578,19 +578,19 @@ public class ZKHelixAdmin implements HelixAdmin {
 
     // controller
     _zkClient.createPersistent(HelixUtil.getControllerPath(clusterName));
-    path = PropertyPathConfig.getPath(PropertyType.HISTORY, clusterName);
+    path = PropertyPathBuilder.getPath(PropertyType.HISTORY, clusterName);
     final ZNRecord emptyHistory = new ZNRecord(PropertyType.HISTORY.toString());
     final List<String> emptyList = new ArrayList<String>();
     emptyHistory.setListField(clusterName, emptyList);
     _zkClient.createPersistent(path, emptyHistory);
 
-    path = PropertyPathConfig.getPath(PropertyType.MESSAGES_CONTROLLER, clusterName);
+    path = PropertyPathBuilder.getPath(PropertyType.MESSAGES_CONTROLLER, clusterName);
     _zkClient.createPersistent(path);
 
-    path = PropertyPathConfig.getPath(PropertyType.STATUSUPDATES_CONTROLLER, clusterName);
+    path = PropertyPathBuilder.getPath(PropertyType.STATUSUPDATES_CONTROLLER, clusterName);
     _zkClient.createPersistent(path);
 
-    path = PropertyPathConfig.getPath(PropertyType.ERRORS_CONTROLLER, clusterName);
+    path = PropertyPathBuilder.getPath(PropertyType.ERRORS_CONTROLLER, clusterName);
     _zkClient.createPersistent(path);
   }
 
@@ -643,7 +643,7 @@ public class ZKHelixAdmin implements HelixAdmin {
   public void addResource(String clusterName, String resourceName, IdealState idealstate) {
     String stateModelRef = idealstate.getStateModelDefRef();
     String stateModelDefPath =
-        PropertyPathConfig.getPath(PropertyType.STATEMODELDEFS, clusterName, stateModelRef);
+        PropertyPathBuilder.getPath(PropertyType.STATEMODELDEFS, clusterName, stateModelRef);
     if (!_zkClient.exists(stateModelDefPath)) {
       throw new HelixException("State model " + stateModelRef
           + " not found in the cluster STATEMODELDEFS path");

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
index 6f4a874..25eb653 100644
--- a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
+++ b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
@@ -53,7 +53,7 @@ import org.apache.helix.MessageListener;
 import org.apache.helix.PreConnectCallback;
 import org.apache.helix.PropertyKey;
 import org.apache.helix.PropertyKey.Builder;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.ScopedConfigChangeListener;
 import org.apache.helix.ZNRecord;
@@ -661,7 +661,7 @@ public class ZKHelixManager implements HelixManager, IZkStateListener {
     checkConnected();
 
     if (_helixPropertyStore == null) {
-      String path = PropertyPathConfig.getPath(PropertyType.PROPERTYSTORE, _clusterName);
+      String path = PropertyPathBuilder.getPath(PropertyType.PROPERTYSTORE, _clusterName);
       String fallbackPath = String.format("/%s/%s", _clusterName, "HELIX_PROPERTYSTORE");
       _helixPropertyStore =
           new AutoFallbackPropertyStore<ZNRecord>(new ZkBaseDataAccessor<ZNRecord>(_zkclient),

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/manager/zk/ZKUtil.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKUtil.java b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKUtil.java
index d243a50..2e19484 100644
--- a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKUtil.java
+++ b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKUtil.java
@@ -26,7 +26,7 @@ import java.util.List;
 import org.I0Itec.zkclient.DataUpdater;
 import org.apache.helix.BaseDataAccessor;
 import org.apache.helix.InstanceType;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.model.HelixConfigScope.ConfigScopeProperty;
@@ -46,24 +46,24 @@ public final class ZKUtil {
       return false;
     }
     ArrayList<String> requiredPaths = new ArrayList<String>();
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
         ConfigScopeProperty.CLUSTER.toString(), clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
         ConfigScopeProperty.PARTICIPANT.toString()));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
         ConfigScopeProperty.RESOURCE.toString()));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.PROPERTYSTORE, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.LIVEINSTANCES, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.INSTANCES, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.CONTROLLER, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.STATEMODELDEFS, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.MESSAGES_CONTROLLER, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.ERRORS_CONTROLLER, clusterName));
-    requiredPaths.add(PropertyPathConfig
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.PROPERTYSTORE, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.LIVEINSTANCES, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.INSTANCES, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.CONTROLLER, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.STATEMODELDEFS, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.MESSAGES_CONTROLLER, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.ERRORS_CONTROLLER, clusterName));
+    requiredPaths.add(PropertyPathBuilder
         .getPath(PropertyType.STATUSUPDATES_CONTROLLER, clusterName));
-    requiredPaths.add(PropertyPathConfig.getPath(PropertyType.HISTORY, clusterName));
+    requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.HISTORY, clusterName));
     boolean isValid = true;
 
     BaseDataAccessor<Object> baseAccessor = new ZkBaseDataAccessor<Object>(zkClient);
@@ -83,15 +83,15 @@ public final class ZKUtil {
       InstanceType type) {
     if (type == InstanceType.PARTICIPANT || type == InstanceType.CONTROLLER_PARTICIPANT) {
       ArrayList<String> requiredPaths = new ArrayList<String>();
-      requiredPaths.add(PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+      requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
           ConfigScopeProperty.PARTICIPANT.toString(), instanceName));
-      requiredPaths.add(PropertyPathConfig
+      requiredPaths.add(PropertyPathBuilder
           .getPath(PropertyType.MESSAGES, clusterName, instanceName));
-      requiredPaths.add(PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName,
+      requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName,
           instanceName));
-      requiredPaths.add(PropertyPathConfig.getPath(PropertyType.STATUSUPDATES, clusterName,
+      requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.STATUSUPDATES, clusterName,
           instanceName));
-      requiredPaths.add(PropertyPathConfig.getPath(PropertyType.ERRORS, clusterName, instanceName));
+      requiredPaths.add(PropertyPathBuilder.getPath(PropertyType.ERRORS, clusterName, instanceName));
       boolean isValid = true;
 
       for (String path : requiredPaths) {

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/task/TaskDriver.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/task/TaskDriver.java b/helix-core/src/main/java/org/apache/helix/task/TaskDriver.java
index 1020cc3..96cbbb8 100644
--- a/helix-core/src/main/java/org/apache/helix/task/TaskDriver.java
+++ b/helix-core/src/main/java/org/apache/helix/task/TaskDriver.java
@@ -48,7 +48,7 @@ import org.apache.helix.HelixManager;
 import org.apache.helix.HelixManagerFactory;
 import org.apache.helix.InstanceType;
 import org.apache.helix.PropertyKey;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
@@ -118,7 +118,7 @@ public class TaskDriver {
   public TaskDriver(ZkClient client, ZkBaseDataAccessor<ZNRecord> baseAccessor, String clusterName) {
     this(new ZKHelixAdmin(client), new ZKHelixDataAccessor(clusterName, baseAccessor),
         new ConfigAccessor(client), new ZkHelixPropertyStore<ZNRecord>(baseAccessor,
-            PropertyPathConfig.getPath(PropertyType.PROPERTYSTORE, clusterName), null), clusterName);
+            PropertyPathBuilder.getPath(PropertyType.PROPERTYSTORE, clusterName), null), clusterName);
   }
 
   public TaskDriver(HelixAdmin admin, HelixDataAccessor accessor, ConfigAccessor cfgAccessor,

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/tools/ClusterStateVerifier.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/tools/ClusterStateVerifier.java b/helix-core/src/main/java/org/apache/helix/tools/ClusterStateVerifier.java
index a87740e..4d4aaf4 100644
--- a/helix-core/src/main/java/org/apache/helix/tools/ClusterStateVerifier.java
+++ b/helix-core/src/main/java/org/apache/helix/tools/ClusterStateVerifier.java
@@ -43,7 +43,7 @@ import org.apache.commons.cli.ParseException;
 import org.apache.helix.HelixDataAccessor;
 import org.apache.helix.HelixDefinedState;
 import org.apache.helix.PropertyKey.Builder;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.controller.pipeline.Stage;
@@ -579,7 +579,7 @@ public class ClusterStateVerifier {
 
     ExtViewVeriferZkListener listener = new ExtViewVeriferZkListener(countDown, zkClient, verifier);
 
-    String extViewPath = PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName);
+    String extViewPath = PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName);
     zkClient.subscribeChildChanges(extViewPath, listener);
     for (String child : zkClient.getChildren(extViewPath)) {
       String childPath = extViewPath.equals("/") ? extViewPath + child : extViewPath + "/" + child;

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/main/java/org/apache/helix/util/HelixUtil.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/util/HelixUtil.java b/helix-core/src/main/java/org/apache/helix/util/HelixUtil.java
index a4e0e08..6422875 100644
--- a/helix-core/src/main/java/org/apache/helix/util/HelixUtil.java
+++ b/helix-core/src/main/java/org/apache/helix/util/HelixUtil.java
@@ -22,7 +22,7 @@ package org.apache.helix.util;
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.log4j.Logger;
 
@@ -130,7 +130,7 @@ public final class HelixUtil {
   }
 
   public static String getControllerPropertyPath(String clusterName, PropertyType type) {
-    return PropertyPathConfig.getPath(type, clusterName);
+    return PropertyPathBuilder.getPath(type, clusterName);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/Mocks.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/Mocks.java b/helix-core/src/test/java/org/apache/helix/Mocks.java
index 6a27402..0fb7d9e 100644
--- a/helix-core/src/test/java/org/apache/helix/Mocks.java
+++ b/helix-core/src/test/java/org/apache/helix/Mocks.java
@@ -517,7 +517,7 @@ public class Mocks {
 
     @Override
     public boolean removeProperty(PropertyKey key) {
-      String path = key.getPath(); // PropertyPathConfig.getPath(type,
+      String path = key.getPath(); // PropertyPathBuilder.getPath(type,
       // _clusterName, keys);
       data.remove(path);
       return true;
@@ -543,7 +543,7 @@ public class Mocks {
     @Override
     public <T extends HelixProperty> List<T> getChildValues(PropertyKey propertyKey) {
       List<ZNRecord> childs = new ArrayList<ZNRecord>();
-      String path = propertyKey.getPath(); // PropertyPathConfig.getPath(type,
+      String path = propertyKey.getPath(); // PropertyPathBuilder.getPath(type,
       // _clusterName, keys);
       for (String key : data.keySet()) {
         if (key.startsWith(path)) {

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/TestPropertyPathBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/TestPropertyPathBuilder.java b/helix-core/src/test/java/org/apache/helix/TestPropertyPathBuilder.java
new file mode 100644
index 0000000..8794128
--- /dev/null
+++ b/helix-core/src/test/java/org/apache/helix/TestPropertyPathBuilder.java
@@ -0,0 +1,53 @@
+package org.apache.helix;
+
+/*
+ * 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 org.testng.AssertJUnit;
+import org.testng.annotations.Test;
+
+@Test
+public class TestPropertyPathBuilder {
+  @Test
+  public void testGetPath() {
+    String actual;
+    actual = PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, "test_cluster");
+    AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES");
+    actual = PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, "test_cluster", "resource");
+    AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES/resource");
+
+    actual = PropertyPathBuilder.getPath(PropertyType.INSTANCES, "test_cluster", "instanceName1");
+    AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1");
+
+    actual =
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, "test_cluster", "instanceName1");
+    AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES");
+    actual =
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, "test_cluster", "instanceName1",
+            "sessionId");
+    AssertJUnit.assertEquals(actual,
+        "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES/sessionId");
+
+    actual = PropertyPathBuilder.getPath(PropertyType.CONTROLLER, "test_cluster");
+    AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER");
+    actual = PropertyPathBuilder.getPath(PropertyType.MESSAGES_CONTROLLER, "test_cluster");
+    AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER/MESSAGES");
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/TestPropertyPathConfig.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/TestPropertyPathConfig.java b/helix-core/src/test/java/org/apache/helix/TestPropertyPathConfig.java
deleted file mode 100644
index c25bd32..0000000
--- a/helix-core/src/test/java/org/apache/helix/TestPropertyPathConfig.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.apache.helix;
-
-/*
- * 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 org.testng.AssertJUnit;
-import org.testng.annotations.Test;
-
-@Test
-public class TestPropertyPathConfig {
-  @Test
-  public void testGetPath() {
-    String actual;
-    actual = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, "test_cluster");
-    AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES");
-    actual = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, "test_cluster", "resource");
-    AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES/resource");
-
-    actual = PropertyPathConfig.getPath(PropertyType.INSTANCES, "test_cluster", "instanceName1");
-    AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1");
-
-    actual =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, "test_cluster", "instanceName1");
-    AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES");
-    actual =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, "test_cluster", "instanceName1",
-            "sessionId");
-    AssertJUnit.assertEquals(actual,
-        "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES/sessionId");
-
-    actual = PropertyPathConfig.getPath(PropertyType.CONTROLLER, "test_cluster");
-    AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER");
-    actual = PropertyPathConfig.getPath(PropertyType.MESSAGES_CONTROLLER, "test_cluster");
-    AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER/MESSAGES");
-
-  }
-}

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/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 83f3d30..2fd9796 100644
--- a/helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java
+++ b/helix-core/src/test/java/org/apache/helix/ZkUnitTestBase.java
@@ -152,7 +152,7 @@ public class ZkUnitTestBase {
       boolean wantExists) {
     // String instanceConfigsPath = HelixUtil.getConfigPath(clusterName);
     String instanceConfigsPath =
-        PropertyPathConfig.getPath(PropertyType.CONFIGS, clusterName,
+        PropertyPathBuilder.getPath(PropertyType.CONFIGS, clusterName,
             ConfigScopeProperty.PARTICIPANT.toString());
     String instanceConfigPath = instanceConfigsPath + "/" + instance;
     String instancePath = HelixUtil.getInstancePath(clusterName, instance);

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/TestAddNodeAfterControllerStart.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestAddNodeAfterControllerStart.java b/helix-core/src/test/java/org/apache/helix/integration/TestAddNodeAfterControllerStart.java
index 79d8b89..3b69441 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestAddNodeAfterControllerStart.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestAddNodeAfterControllerStart.java
@@ -22,7 +22,7 @@ package org.apache.helix.integration;
 import java.util.Date;
 import java.util.List;
 
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZkTestHelper;
@@ -66,7 +66,7 @@ public class TestAddNodeAfterControllerStart extends ZkIntegrationTestBase {
             ZK_ADDR, clusterName));
     Assert.assertTrue(result);
     String msgPath =
-        PropertyPathConfig.getPath(PropertyType.MESSAGES, clusterName, "localhost_12918");
+        PropertyPathBuilder.getPath(PropertyType.MESSAGES, clusterName, "localhost_12918");
     result = checkHandlers(controller.getHandlers(), msgPath);
     Assert.assertTrue(result);
 
@@ -79,7 +79,7 @@ public class TestAddNodeAfterControllerStart extends ZkIntegrationTestBase {
         ClusterStateVerifier.verifyByPolling(new ClusterStateVerifier.BestPossAndExtViewZkVerifier(
             ZK_ADDR, clusterName));
     Assert.assertTrue(result);
-    msgPath = PropertyPathConfig.getPath(PropertyType.MESSAGES, clusterName, "localhost_12922");
+    msgPath = PropertyPathBuilder.getPath(PropertyType.MESSAGES, clusterName, "localhost_12922");
     result = checkHandlers(controller.getHandlers(), msgPath);
     Assert.assertTrue(result);
 
@@ -140,7 +140,7 @@ public class TestAddNodeAfterControllerStart extends ZkIntegrationTestBase {
 
     // check if controller_0 has message listener for localhost_12918
     String msgPath =
-        PropertyPathConfig.getPath(PropertyType.MESSAGES, clusterName, "localhost_12918");
+        PropertyPathBuilder.getPath(PropertyType.MESSAGES, clusterName, "localhost_12918");
     int numberOfListeners = ZkTestHelper.numberOfListeners(ZK_ADDR, msgPath);
     // System.out.println("numberOfListeners(" + msgPath + "): " + numberOfListeners);
     Assert.assertEquals(numberOfListeners, 2); // 1 of participant, and 1 of controller
@@ -155,7 +155,7 @@ public class TestAddNodeAfterControllerStart extends ZkIntegrationTestBase {
             ZK_ADDR, clusterName));
     Assert.assertTrue(result);
     // check if controller_0 has message listener for localhost_12919
-    msgPath = PropertyPathConfig.getPath(PropertyType.MESSAGES, clusterName, "localhost_12919");
+    msgPath = PropertyPathBuilder.getPath(PropertyType.MESSAGES, clusterName, "localhost_12919");
     numberOfListeners = ZkTestHelper.numberOfListeners(ZK_ADDR, msgPath);
     // System.out.println("numberOfListeners(" + msgPath + "): " + numberOfListeners);
     Assert.assertEquals(numberOfListeners, 2); // 1 of participant, and 1 of controller

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/TestAutoIsWithEmptyMap.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestAutoIsWithEmptyMap.java b/helix-core/src/test/java/org/apache/helix/integration/TestAutoIsWithEmptyMap.java
index bc1c1b0..d316016 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestAutoIsWithEmptyMap.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestAutoIsWithEmptyMap.java
@@ -23,7 +23,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
@@ -54,7 +54,7 @@ public class TestAutoIsWithEmptyMap extends ZkIntegrationTestBase {
         "LeaderStandby", false); // do not rebalance
 
     // calculate and set custom ideal state
-    String idealPath = PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, "TestDB0");
+    String idealPath = PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, clusterName, "TestDB0");
     ZNRecord curIdealState = _gZkClient.readData(idealPath);
 
     List<String> instanceNames = new ArrayList<String>(5);

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/TestCarryOverBadCurState.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestCarryOverBadCurState.java b/helix-core/src/test/java/org/apache/helix/integration/TestCarryOverBadCurState.java
index 97b6ebb..c013122 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestCarryOverBadCurState.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestCarryOverBadCurState.java
@@ -21,7 +21,7 @@ package org.apache.helix.integration;
 
 import java.util.Date;
 
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
@@ -53,7 +53,7 @@ public class TestCarryOverBadCurState extends ZkIntegrationTestBase {
     // add a bad current state
     ZNRecord badCurState = new ZNRecord("TestDB0");
     String path =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_12918",
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_12918",
             "session_0", "TestDB0");
     _gZkClient.createPersistent(path, true);
     _gZkClient.writeData(path, badCurState);

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/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 82b181a..6520100 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
@@ -27,7 +27,7 @@ import java.util.Random;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.helix.HelixManager;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.integration.manager.ClusterControllerManager;
@@ -355,7 +355,7 @@ public class TestDriver {
       nextIS = nextIdealState(initIS, destIS, step);
       // testInfo._idealStateMap.put(dbName, nextIS);
       String idealStatePath =
-          PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, TEST_DB_PREFIX + i);
+          PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, clusterName, TEST_DB_PREFIX + i);
       ZnodeOpArg arg = new ZnodeOpArg(idealStatePath, ZnodePropertyType.ZNODE, "+", nextIS);
       TestCommand command = new TestCommand(CommandType.MODIFY, new TestTrigger(beginTime), arg);
       commandList.add(command);

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/TestEnableCompression.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestEnableCompression.java b/helix-core/src/test/java/org/apache/helix/integration/TestEnableCompression.java
index 643973a..c385c2f 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestEnableCompression.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestEnableCompression.java
@@ -6,10 +6,9 @@ import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import org.I0Itec.zkclient.serialize.BytesPushThroughSerializer;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
-import org.apache.helix.ZNRecord;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.manager.zk.ZkClient;
@@ -115,9 +114,9 @@ public class TestEnableCompression extends ZkIntegrationTestBase {
     // ONLY IDEALSTATE and EXTERNAL VIEW must be compressed
     Assert.assertEquals(compressedPaths.size(), 2);
     String idealstatePath =
-        PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, resourceName);
+        PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, clusterName, resourceName);
     String externalViewPath =
-        PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName, resourceName);
+        PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName, resourceName);
     Assert.assertTrue(compressedPaths.contains(idealstatePath));
     Assert.assertTrue(compressedPaths.contains(externalViewPath));
 

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/TestMessageThrottle.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestMessageThrottle.java b/helix-core/src/test/java/org/apache/helix/integration/TestMessageThrottle.java
index fc6d6bc..1ebfcb6 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestMessageThrottle.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestMessageThrottle.java
@@ -25,7 +25,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.I0Itec.zkclient.IZkChildListener;
 import org.apache.helix.HelixAdmin;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
@@ -85,7 +85,7 @@ public class TestMessageThrottle extends ZkIntegrationTestBase {
     final AtomicBoolean success = new AtomicBoolean(true);
     for (int i = 0; i < 5; i++) {
       String instanceName = "localhost_" + (12918 + i);
-      String msgPath = PropertyPathConfig.getPath(PropertyType.MESSAGES, clusterName, instanceName);
+      String msgPath = PropertyPathBuilder.getPath(PropertyType.MESSAGES, clusterName, instanceName);
 
       _gZkClient.subscribeChildChanges(msgPath, new IZkChildListener() {
 

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/TestNullReplica.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/TestNullReplica.java b/helix-core/src/test/java/org/apache/helix/integration/TestNullReplica.java
index 0f5cc72..e29945a 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/TestNullReplica.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/TestNullReplica.java
@@ -21,7 +21,7 @@ package org.apache.helix.integration;
 
 import java.util.Date;
 
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
@@ -56,7 +56,7 @@ public class TestNullReplica extends ZkIntegrationTestBase {
         "MasterSlave", true); // do rebalance
     // set replica in ideal state to null
     String idealStatePath =
-        PropertyPathConfig.getPath(PropertyType.IDEALSTATES, clusterName, "TestDB0");
+        PropertyPathBuilder.getPath(PropertyType.IDEALSTATES, clusterName, "TestDB0");
     ZNRecord idealState = _gZkClient.readData(idealStatePath);
     idealState.getSimpleFields().remove(IdealState.IdealStateProperty.REPLICAS.toString());
     _gZkClient.writeData(idealStatePath, idealState);

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/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 d191c18..0e6b86c 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
@@ -21,7 +21,7 @@ package org.apache.helix.integration;
 
 import java.util.Date;
 
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZkTestHelper;
@@ -61,7 +61,7 @@ public class TestStartMultipleControllersWithSameName extends ZkIntegrationTestB
     }
 
     Thread.sleep(500); // wait leader election finishes
-    String liPath = PropertyPathConfig.getPath(PropertyType.LIVEINSTANCES, clusterName);
+    String liPath = PropertyPathBuilder.getPath(PropertyType.LIVEINSTANCES, clusterName);
     int listenerNb = ZkTestHelper.numberOfListeners(ZK_ADDR, liPath);
     // System.out.println("listenerNb: " + listenerNb);
     Assert.assertEquals(listenerNb, 1, "Only one controller should succeed in becoming leader");

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java b/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
index b35bd13..ab3054a 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
@@ -28,7 +28,7 @@ import org.apache.helix.HelixManager;
 import org.apache.helix.InstanceType;
 import org.apache.helix.NotificationContext;
 import org.apache.helix.PropertyKey;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
@@ -237,7 +237,7 @@ public class TestParticipantManager extends ZkIntegrationTestBase {
 
     // assert interrupt exception error in old session
     String errPath =
-        PropertyPathConfig.getPath(PropertyType.ERRORS, clusterName, "localhost_12918",
+        PropertyPathBuilder.getPath(PropertyType.ERRORS, clusterName, "localhost_12918",
             oldSessionId, "TestDB0", "TestDB0_0");
     ZNRecord error = _gZkClient.readData(errPath);
     Assert

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancerStopResume.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancerStopResume.java b/helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancerStopResume.java
index 8e1f47d..22feda4 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancerStopResume.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/task/TestTaskRebalancerStopResume.java
@@ -28,7 +28,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.helix.HelixDataAccessor;
 import org.apache.helix.PropertyKey;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.task.JobConfig;
@@ -459,7 +459,7 @@ public class TestTaskRebalancerStopResume extends TaskTestBase {
             = Lists.newArrayList(keyBuilder.resourceConfigs().getPath(),
             keyBuilder.idealStates().getPath(),
             keyBuilder.externalViews().getPath(),
-            PropertyPathConfig.getPath(PropertyType.PROPERTYSTORE, CLUSTER_NAME)
+            PropertyPathBuilder.getPath(PropertyType.PROPERTYSTORE, CLUSTER_NAME)
                 + TaskConstants.REBALANCER_CONTEXT_ROOT);
 
         for (String path : paths) {

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpMultiThread.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpMultiThread.java b/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpMultiThread.java
index aa0bd2b..dde054c 100644
--- a/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpMultiThread.java
+++ b/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpMultiThread.java
@@ -27,14 +27,12 @@ import java.util.concurrent.Callable;
 
 import org.I0Itec.zkclient.DataUpdater;
 import org.apache.helix.AccessOption;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.ZNRecordUpdater;
 import org.apache.helix.ZkUnitTestBase;
-import org.apache.helix.manager.zk.ZkBaseDataAccessor;
-import org.apache.helix.manager.zk.ZkCacheBaseDataAccessor;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -73,7 +71,7 @@ public class TestWtCacheAsyncOpMultiThread extends ZkUnitTestBase {
         for (int i = 0; i < 5; i++) {
           int k = j * 5 + i;
           String path =
-              PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, _clusterName,
+              PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, _clusterName,
                   "localhost_8901", "session_0", "TestDB" + k);
           ZNRecord record = new ZNRecord("TestDB" + k);
 
@@ -117,7 +115,7 @@ public class TestWtCacheAsyncOpMultiThread extends ZkUnitTestBase {
 
         for (int i = 0; i < 10; i++) {
           String path =
-              PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, _clusterName,
+              PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, _clusterName,
                   "localhost_8901", "session_0", "TestDB" + i);
 
           ZNRecord newRecord = new ZNRecord("TestDB" + i);
@@ -173,7 +171,7 @@ public class TestWtCacheAsyncOpMultiThread extends ZkUnitTestBase {
         for (int i = 0; i < 5; i++) {
           int k = j * 5 + i;
           String path =
-              PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, _clusterName, "TestDB" + k);
+              PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, _clusterName, "TestDB" + k);
           ZNRecord record = new ZNRecord("TestDB" + k);
 
           paths.add(path);
@@ -200,8 +198,8 @@ public class TestWtCacheAsyncOpMultiThread extends ZkUnitTestBase {
 
     // init zkCacheDataAccessor
     String curStatePath =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
-    String extViewPath = PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName);
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
+    String extViewPath = PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName);
 
     ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient);
 

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpSingleThread.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpSingleThread.java b/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpSingleThread.java
index 4d684d3..7f0c256 100644
--- a/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpSingleThread.java
+++ b/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheAsyncOpSingleThread.java
@@ -26,14 +26,12 @@ import java.util.List;
 
 import org.I0Itec.zkclient.DataUpdater;
 import org.apache.helix.AccessOption;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.ZNRecordUpdater;
 import org.apache.helix.ZkUnitTestBase;
-import org.apache.helix.manager.zk.ZkBaseDataAccessor;
-import org.apache.helix.manager.zk.ZkCacheBaseDataAccessor;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -47,8 +45,8 @@ public class TestWtCacheAsyncOpSingleThread extends ZkUnitTestBase {
 
     // init zkCacheDataAccessor
     String curStatePath =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
-    String extViewPath = PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName);
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
+    String extViewPath = PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName);
 
     ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient);
 
@@ -66,7 +64,7 @@ public class TestWtCacheAsyncOpSingleThread extends ZkUnitTestBase {
     List<ZNRecord> records = new ArrayList<ZNRecord>();
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
+          PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
               "session_0", "TestDB" + i);
       ZNRecord record = new ZNRecord("TestDB" + i);
 
@@ -114,7 +112,7 @@ public class TestWtCacheAsyncOpSingleThread extends ZkUnitTestBase {
     records.clear();
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
+          PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
       ZNRecord record = new ZNRecord("TestDB" + i);
 
       paths.add(path);
@@ -135,7 +133,7 @@ public class TestWtCacheAsyncOpSingleThread extends ZkUnitTestBase {
     records.clear();
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
+          PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
       paths.add(path);
     }
 
@@ -155,7 +153,7 @@ public class TestWtCacheAsyncOpSingleThread extends ZkUnitTestBase {
     paths.clear();
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
+          PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
               "session_0", "TestDB" + i);
       paths.add(path);
     }
@@ -176,8 +174,8 @@ public class TestWtCacheAsyncOpSingleThread extends ZkUnitTestBase {
 
     // init zkCacheDataAccessor
     String curStatePath =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
-    String extViewPath = PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName);
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
+    String extViewPath = PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName);
 
     ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient);
 
@@ -196,7 +194,7 @@ public class TestWtCacheAsyncOpSingleThread extends ZkUnitTestBase {
     List<ZNRecord> records = new ArrayList<ZNRecord>();
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
+          PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
               "session_1", "TestDB" + i);
       ZNRecord record = new ZNRecord("TestDB" + i);
 

http://git-wip-us.apache.org/repos/asf/helix/blob/0b7a1a0f/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheSyncOpSingleThread.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheSyncOpSingleThread.java b/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheSyncOpSingleThread.java
index edbcedc..8e83713 100644
--- a/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheSyncOpSingleThread.java
+++ b/helix-core/src/test/java/org/apache/helix/manager/zk/TestWtCacheSyncOpSingleThread.java
@@ -24,14 +24,12 @@ import java.util.Date;
 import java.util.List;
 
 import org.apache.helix.AccessOption;
-import org.apache.helix.PropertyPathConfig;
+import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.PropertyType;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.ZNRecordUpdater;
 import org.apache.helix.ZkUnitTestBase;
-import org.apache.helix.manager.zk.ZkBaseDataAccessor;
-import org.apache.helix.manager.zk.ZkCacheBaseDataAccessor;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -47,8 +45,8 @@ public class TestWtCacheSyncOpSingleThread extends ZkUnitTestBase {
 
     // init zkCacheDataAccessor
     String curStatePath =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
-    String extViewPath = PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName);
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
+    String extViewPath = PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName);
 
     ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient);
 
@@ -94,7 +92,7 @@ public class TestWtCacheSyncOpSingleThread extends ZkUnitTestBase {
     // set 10 external views
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
+          PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
       boolean success = accessor.set(path, new ZNRecord("TestDB" + i), AccessOption.PERSISTENT);
       Assert.assertTrue(success, "Should succeed in set: " + path);
     }
@@ -107,7 +105,7 @@ public class TestWtCacheSyncOpSingleThread extends ZkUnitTestBase {
     // get 10 external views
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
+          PropertyPathBuilder.getPath(PropertyType.EXTERNALVIEW, clusterName, "TestDB" + i);
       ZNRecord record = accessor.get(path, null, 0);
       Assert.assertEquals(record.getId(), "TestDB" + i);
     }
@@ -123,7 +121,7 @@ public class TestWtCacheSyncOpSingleThread extends ZkUnitTestBase {
     // exists
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
+          PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
               "session_0", "TestDB" + i);
 
       Assert.assertTrue(accessor.exists(path, 0));
@@ -141,7 +139,7 @@ public class TestWtCacheSyncOpSingleThread extends ZkUnitTestBase {
 
     // init zkCacheDataAccessor
     String curStatePath =
-        PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
+        PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901");
 
     ZkBaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient);
 
@@ -151,7 +149,7 @@ public class TestWtCacheSyncOpSingleThread extends ZkUnitTestBase {
     // create 10 current states
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
+          PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
               "session_1", "TestDB" + i);
       boolean success = accessor.create(path, new ZNRecord("TestDB" + i), AccessOption.PERSISTENT);
       Assert.assertTrue(success, "Should succeed in create: " + path);
@@ -160,7 +158,7 @@ public class TestWtCacheSyncOpSingleThread extends ZkUnitTestBase {
     // create same 10 current states again, should fail
     for (int i = 0; i < 10; i++) {
       String path =
-          PropertyPathConfig.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
+          PropertyPathBuilder.getPath(PropertyType.CURRENTSTATES, clusterName, "localhost_8901",
               "session_1", "TestDB" + i);
       boolean success = accessor.create(path, new ZNRecord("TestDB" + i), AccessOption.PERSISTENT);
       Assert.assertFalse(success, "Should fail in create due to NodeExists: " + path);