You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by ki...@apache.org on 2012/10/25 00:26:40 UTC

[6/47] Refactoring from com.linkedin.helix to org.apache.helix

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-admin-webapp/src/test/java/com/linkedin/helix/webapp/TestClusterManagementWebapp.java
----------------------------------------------------------------------
diff --git a/helix-admin-webapp/src/test/java/com/linkedin/helix/webapp/TestClusterManagementWebapp.java b/helix-admin-webapp/src/test/java/com/linkedin/helix/webapp/TestClusterManagementWebapp.java
deleted file mode 100644
index 2863c2a..0000000
--- a/helix-admin-webapp/src/test/java/com/linkedin/helix/webapp/TestClusterManagementWebapp.java
+++ /dev/null
@@ -1,649 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix.webapp;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
-import org.restlet.Client;
-import org.restlet.data.MediaType;
-import org.restlet.data.Method;
-import org.restlet.data.Protocol;
-import org.restlet.data.Reference;
-import org.restlet.data.Request;
-import org.restlet.data.Response;
-import org.restlet.resource.Representation;
-import org.testng.Assert;
-import org.testng.AssertJUnit;
-import org.testng.annotations.Test;
-
-import com.linkedin.helix.PropertyPathConfig;
-import com.linkedin.helix.PropertyType;
-import com.linkedin.helix.ZNRecord;
-import com.linkedin.helix.model.InstanceConfig.InstanceConfigProperty;
-import com.linkedin.helix.model.StateModelDefinition;
-import com.linkedin.helix.tools.AdminTestBase;
-import com.linkedin.helix.tools.ClusterSetup;
-import com.linkedin.helix.webapp.resources.ClusterRepresentationUtil;
-import com.linkedin.helix.webapp.resources.JsonParameters;
-
-public class TestClusterManagementWebapp extends AdminTestBase
-{
-  @Test
-  public void testInvocation() throws Exception
-  {
-    verifyAddCluster();
-    verifyAddStateModel();
-    verifyAddHostedEntity();
-    verifyAddInstance();
-    verifyRebalance();
-    verifyEnableInstance();
-    verifyAlterIdealState();
-    verifyConfigAccessor();
-
-    verifyEnableCluster();
-
-    System.out.println("Test passed!!");
-  }
-
-  /*
-   * Test case as steps
-   */
-  String clusterName       = "cluster-12345";
-  String resourceGroupName = "new-entity-12345";
-  String instance1         = "test-1";
-  String statemodel        = "state_model";
-  int    instancePort      = 9999;
-  int    partitions        = 10;
-  int    replicas          = 3;
-
-  void verifyAddStateModel() throws JsonGenerationException,
-      JsonMappingException,
-      IOException
-  {
-    String httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName
-            + "/StateModelDefs/MasterSlave";
-    Reference resourceRef = new Reference(httpUrlBase);
-    Request request = new Request(Method.GET, resourceRef);
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-    ObjectMapper mapper = new ObjectMapper();
-    ZNRecord zn = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-
-    Map<String, String> paraMap = new HashMap<String, String>();
-
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND,
-                ClusterSetup.addStateModelDef);
-
-    ZNRecord r = new ZNRecord("Test");
-    r.merge(zn);
-    StateModelDefinition newStateModel = new StateModelDefinition(r);
-
-    httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/StateModelDefs";
-    resourceRef = new Reference(httpUrlBase);
-    request = new Request(Method.POST, resourceRef);
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-                          + ClusterRepresentationUtil.ObjectToJson(paraMap) + "&"
-                          + JsonParameters.NEW_STATE_MODEL_DEF + "="
-                          + ClusterRepresentationUtil.ZNRecordToJson(r),
-                      MediaType.APPLICATION_ALL);
-    client = new Client(Protocol.HTTP);
-    response = client.handle(request);
-
-    result = response.getEntity();
-    sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    AssertJUnit.assertTrue(sw.toString().contains("Test"));
-  }
-
-  void verifyAddCluster() throws IOException,
-      InterruptedException
-  {
-    String httpUrlBase = "http://localhost:" + ADMIN_PORT + "/clusters";
-    Map<String, String> paraMap = new HashMap<String, String>();
-
-    paraMap.put(JsonParameters.CLUSTER_NAME, clusterName);
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.addCluster);
-
-    Reference resourceRef = new Reference(httpUrlBase);
-
-    Request request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paraMap), MediaType.APPLICATION_ALL);
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    ObjectMapper mapper = new ObjectMapper();
-    ZNRecord zn = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-    AssertJUnit.assertTrue(zn.getListField("clusters").contains(clusterName));
-
-  }
-
-  void verifyAddHostedEntity() throws JsonGenerationException,
-      JsonMappingException,
-      IOException
-  {
-    String httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/resourceGroups";
-    Map<String, String> paraMap = new HashMap<String, String>();
-
-    paraMap.put(JsonParameters.RESOURCE_GROUP_NAME, resourceGroupName);
-    paraMap.put(JsonParameters.PARTITIONS, "" + partitions);
-    paraMap.put(JsonParameters.STATE_MODEL_DEF_REF, "MasterSlave");
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.addResource);
-
-    Reference resourceRef = new Reference(httpUrlBase);
-
-    Request request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paraMap), MediaType.APPLICATION_ALL);
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    ObjectMapper mapper = new ObjectMapper();
-    ZNRecord zn = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-    AssertJUnit.assertTrue(zn.getListField("ResourceGroups").contains(resourceGroupName));
-
-    httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/resourceGroups/"
-            + resourceGroupName;
-    resourceRef = new Reference(httpUrlBase);
-
-    request = new Request(Method.GET, resourceRef);
-
-    client = new Client(Protocol.HTTP);
-    response = client.handle(request);
-
-    result = response.getEntity();
-    sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-  }
-
-  void verifyAddInstance() throws JsonGenerationException,
-      JsonMappingException,
-      IOException
-  {
-    String httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/instances";
-    Map<String, String> paraMap = new HashMap<String, String>();
-    // Add 1 instance
-    paraMap.put(JsonParameters.INSTANCE_NAME, instance1 + ":" + instancePort);
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.addInstance);
-
-    Reference resourceRef = new Reference(httpUrlBase);
-
-    Request request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paraMap), MediaType.APPLICATION_ALL);
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    ObjectMapper mapper = new ObjectMapper();
-
-    TypeReference<ArrayList<ZNRecord>> typeRef = new TypeReference<ArrayList<ZNRecord>>()
-    {
-    };
-    List<ZNRecord> znList = mapper.readValue(new StringReader(sw.toString()), typeRef);
-    AssertJUnit.assertTrue(znList.get(0).getId().equals(instance1 + "_" + instancePort));
-
-    // the case to add more than 1 instances
-    paraMap.clear();
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.addInstance);
-
-    String[] instances = { "test2", "test3", "test4", "test5" };
-
-    String instanceNames = "";
-    boolean first = true;
-    for (String instance : instances)
-    {
-      if (first == true)
-      {
-        first = false;
-      }
-      else
-      {
-        instanceNames += ";";
-      }
-      instanceNames += (instance + ":" + instancePort);
-    }
-    paraMap.put(JsonParameters.INSTANCE_NAMES, instanceNames);
-
-    request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paraMap), MediaType.APPLICATION_ALL);
-    client = new Client(Protocol.HTTP);
-    response = client.handle(request);
-
-    result = response.getEntity();
-    sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    mapper = new ObjectMapper();
-
-    znList = mapper.readValue(new StringReader(sw.toString()), typeRef);
-
-    for (String instance : instances)
-    {
-      boolean found = false;
-      for (ZNRecord r : znList)
-      {
-        String instanceId = instance + "_" + instancePort;
-        if (r.getId().equals(instanceId))
-        {
-          found = true;
-          break;
-        }
-      }
-      AssertJUnit.assertTrue(found);
-    }
-  }
-
-  void verifyRebalance() throws JsonGenerationException,
-      JsonMappingException,
-      IOException
-  {
-    String httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/resourceGroups/"
-            + resourceGroupName + "/idealState";
-    Map<String, String> paraMap = new HashMap<String, String>();
-    // Add 1 instance
-    paraMap.put(JsonParameters.REPLICAS, "" + replicas);
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.rebalance);
-
-    Reference resourceRef = new Reference(httpUrlBase);
-
-    Request request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paraMap), MediaType.APPLICATION_ALL);
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    ObjectMapper mapper = new ObjectMapper();
-    ZNRecord r = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-
-    for (int i = 0; i < partitions; i++)
-    {
-      String partitionName = resourceGroupName + "_" + i;
-      assert (r.getMapField(partitionName).size() == replicas);
-    }
-
-    httpUrlBase = "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName;
-    resourceRef = new Reference(httpUrlBase);
-    request = new Request(Method.GET, resourceRef);
-
-    client = new Client(Protocol.HTTP);
-    response = client.handle(request);
-
-    result = response.getEntity();
-    sw = new StringWriter();
-    result.write(sw);
-
-  }
-
-  void verifyEnableInstance() throws JsonGenerationException,
-      JsonMappingException,
-      IOException
-  {
-    String httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/instances/"
-            + instance1 + "_" + instancePort;
-    Map<String, String> paraMap = new HashMap<String, String>();
-    // Add 1 instance
-    paraMap.put(JsonParameters.ENABLED, "" + false);
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.enableInstance);
-
-    Reference resourceRef = new Reference(httpUrlBase);
-
-    Request request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paraMap), MediaType.APPLICATION_ALL);
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    ObjectMapper mapper = new ObjectMapper();
-    ZNRecord r = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-    AssertJUnit.assertTrue(r.getSimpleField(InstanceConfigProperty.HELIX_ENABLED.toString())
-                            .equals("" + false));
-
-    // Then enable it
-    paraMap.put(JsonParameters.ENABLED, "" + true);
-    request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paraMap), MediaType.APPLICATION_ALL);
-    client = new Client(Protocol.HTTP);
-    response = client.handle(request);
-
-    result = response.getEntity();
-    sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    mapper = new ObjectMapper();
-    r = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-    AssertJUnit.assertTrue(r.getSimpleField(InstanceConfigProperty.HELIX_ENABLED.toString())
-                            .equals("" + true));
-  }
-
-  void verifyAlterIdealState() throws IOException
-  {
-    String httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/resourceGroups/"
-            + resourceGroupName + "/idealState";
-
-    Reference resourceRef = new Reference(httpUrlBase);
-    Request request = new Request(Method.GET, resourceRef);
-
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    ObjectMapper mapper = new ObjectMapper();
-    ZNRecord r = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-    String partitionName = "new-entity-12345_3";
-    r.getMapFields().remove(partitionName);
-
-    Map<String, String> paraMap = new HashMap<String, String>();
-    // Add 1 instance
-    paraMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.addIdealState);
-
-    resourceRef = new Reference(httpUrlBase);
-
-    request = new Request(Method.POST, resourceRef);
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-                          + ClusterRepresentationUtil.ObjectToJson(paraMap) + "&"
-                          + JsonParameters.NEW_IDEAL_STATE + "="
-                          + ClusterRepresentationUtil.ZNRecordToJson(r),
-                      MediaType.APPLICATION_ALL);
-    client = new Client(Protocol.HTTP);
-    response = client.handle(request);
-
-    result = response.getEntity();
-    sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    mapper = new ObjectMapper();
-    ZNRecord r2 = mapper.readValue(new StringReader(sw.toString()), ZNRecord.class);
-    AssertJUnit.assertTrue(!r2.getMapFields().containsKey(partitionName));
-
-    for (String key : r2.getMapFields().keySet())
-    {
-      AssertJUnit.assertTrue(r.getMapFields().containsKey(key));
-    }
-  }
-
-  // verify get/post configs in different scopes
-  void verifyConfigAccessor() throws Exception
-  {
-    ObjectMapper mapper = new ObjectMapper();
-    Client client = new Client(Protocol.HTTP);
-
-    // set/get cluster scope configs
-    String url =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/configs/cluster/"
-            + clusterName;
-
-    postConfig(client, url, mapper, ClusterSetup.setConfig, "key1=value1,key2=value2");
-
-    ZNRecord record = get(client, url, mapper);
-    Assert.assertEquals(record.getSimpleFields().size(), 2);
-    Assert.assertEquals(record.getSimpleField("key1"), "value1");
-    Assert.assertEquals(record.getSimpleField("key2"), "value2");
-
-    // set/get participant scope configs
-    url =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName
-            + "/configs/participant/localhost_12918";
-
-    postConfig(client, url, mapper, ClusterSetup.setConfig, "key3=value3,key4=value4");
-
-    record = get(client, url, mapper);
-    Assert.assertEquals(record.getSimpleFields().size(), 2);
-    Assert.assertEquals(record.getSimpleField("key3"), "value3");
-    Assert.assertEquals(record.getSimpleField("key4"), "value4");
-
-    // set/get resource scope configs
-    url =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName
-            + "/configs/resource/testResource";
-
-    postConfig(client, url, mapper, ClusterSetup.setConfig, "key5=value5,key6=value6");
-
-    record = get(client, url, mapper);
-    Assert.assertEquals(record.getSimpleFields().size(), 2);
-    Assert.assertEquals(record.getSimpleField("key5"), "value5");
-    Assert.assertEquals(record.getSimpleField("key6"), "value6");
-
-    // set/get partition scope configs
-    url =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName
-            + "/configs/partition/testResource/testPartition";
-
-    postConfig(client, url, mapper, ClusterSetup.setConfig, "key7=value7,key8=value8");
-
-    record = get(client, url, mapper);
-    Assert.assertEquals(record.getSimpleFields().size(), 2);
-    Assert.assertEquals(record.getSimpleField("key7"), "value7");
-    Assert.assertEquals(record.getSimpleField("key8"), "value8");
-
-    // list keys
-    url = "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/configs";
-    record = get(client, url, mapper);
-    Assert.assertEquals(record.getListFields().size(), 1);
-    Assert.assertTrue(record.getListFields().containsKey("scopes"));
-    Assert.assertTrue(contains(record.getListField("scopes"),
-                               "CLUSTER",
-                               "PARTICIPANT",
-                               "RESOURCE",
-                               "PARTITION"));
-
-    url = "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/configs/cluster";
-    record = get(client, url, mapper);
-    Assert.assertEquals(record.getListFields().size(), 1);
-    Assert.assertTrue(record.getListFields().containsKey("CLUSTER"));
-    Assert.assertTrue(contains(record.getListField("CLUSTER"), clusterName));
-
-    url =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/configs/participant";
-    record = get(client, url, mapper);
-    Assert.assertTrue(record.getListFields().containsKey("PARTICIPANT"));
-    Assert.assertTrue(contains(record.getListField("PARTICIPANT"), "localhost_12918"));
-
-    url = "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/configs/resource";
-    record = get(client, url, mapper);
-    Assert.assertEquals(record.getListFields().size(), 1);
-    Assert.assertTrue(record.getListFields().containsKey("RESOURCE"));
-    Assert.assertTrue(contains(record.getListField("RESOURCE"), "testResource"));
-
-    url =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName
-            + "/configs/partition/testResource";
-    record = get(client, url, mapper);
-    Assert.assertEquals(record.getListFields().size(), 1);
-    Assert.assertTrue(record.getListFields().containsKey("PARTITION"));
-    Assert.assertTrue(contains(record.getListField("PARTITION"), "testPartition"));
-
-  }
-
-  private ZNRecord get(Client client, String url, ObjectMapper mapper) throws Exception
-  {
-    Request request = new Request(Method.GET, new Reference(url));
-    Response response = client.handle(request);
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-    String responseStr = sw.toString();
-    Assert.assertTrue(responseStr.toLowerCase().indexOf("error") == -1);
-    Assert.assertTrue(responseStr.toLowerCase().indexOf("exception") == -1);
-
-    ZNRecord record = mapper.readValue(new StringReader(responseStr), ZNRecord.class);
-    return record;
-  }
-
-  private void postConfig(Client client,
-                          String url,
-                          ObjectMapper mapper,
-                          String command,
-                          String configs) throws Exception
-  {
-    Map<String, String> params = new HashMap<String, String>();
-
-    params.put(JsonParameters.MANAGEMENT_COMMAND, command);
-    params.put(JsonParameters.CONFIGS, configs);
-
-    Request request = new Request(Method.POST, new Reference(url));
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(params), MediaType.APPLICATION_ALL);
-
-    Response response = client.handle(request);
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-    String responseStr = sw.toString();
-    Assert.assertTrue(responseStr.toLowerCase().indexOf("error") == -1);
-    Assert.assertTrue(responseStr.toLowerCase().indexOf("exception") == -1);
-  }
-
-  void verifyEnableCluster() throws Exception
-  {
-    System.out.println("START: verifyEnableCluster()");
-    String httpUrlBase =
-        "http://localhost:" + ADMIN_PORT + "/clusters/" + clusterName + "/Controller";
-    Map<String, String> paramMap = new HashMap<String, String>();
-
-    paramMap.put(JsonParameters.MANAGEMENT_COMMAND, ClusterSetup.enableCluster);
-    paramMap.put(JsonParameters.ENABLED, "" + false);
-
-    Reference resourceRef = new Reference(httpUrlBase);
-
-    Request request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paramMap), MediaType.APPLICATION_ALL);
-    Client client = new Client(Protocol.HTTP);
-    Response response = client.handle(request);
-
-    Representation result = response.getEntity();
-    StringWriter sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    // verify pause znode exists
-    String pausePath = PropertyPathConfig.getPath(PropertyType.PAUSE, clusterName);
-    System.out.println("pausePath: " + pausePath);
-    boolean exists = _gZkClient.exists(pausePath);
-    Assert.assertTrue(exists, pausePath + " should exist");
-
-    // Then enable it
-    paramMap.put(JsonParameters.ENABLED, "" + true);
-    request = new Request(Method.POST, resourceRef);
-
-    request.setEntity(JsonParameters.JSON_PARAMETERS + "="
-        + ClusterRepresentationUtil.ObjectToJson(paramMap), MediaType.APPLICATION_ALL);
-    client = new Client(Protocol.HTTP);
-    response = client.handle(request);
-
-    result = response.getEntity();
-    sw = new StringWriter();
-    result.write(sw);
-
-    System.out.println(sw.toString());
-
-    // verify pause znode doesn't exist
-    exists = _gZkClient.exists(pausePath);
-    Assert.assertFalse(exists, pausePath + " should be removed");
-
-    System.out.println("END: verifyEnableCluster()");
-  }
-
-  private boolean contains(List<String> list, String... items)
-  {
-    for (String item : items)
-    {
-      if (!list.contains(item))
-      {
-        return false;
-      }
-    }
-    return true;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/helix-core-0.5.28.ivy
----------------------------------------------------------------------
diff --git a/helix-core/helix-core-0.5.28.ivy b/helix-core/helix-core-0.5.28.ivy
index a5e59b9..fa4bb3d 100644
--- a/helix-core/helix-core-0.5.28.ivy
+++ b/helix-core/helix-core-0.5.28.ivy
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ivy-module version="1.0" xmlns:m="http://ant.apache.org/ivy/maven">
-	<info organisation="com.linkedin.helix"
+	<info organisation="org.apache.helix"
 		module="helix-core"
 		revision="0.5.28"
 		status="release"

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/pom.xml
----------------------------------------------------------------------
diff --git a/helix-core/pom.xml b/helix-core/pom.xml
index 42eb03a..b60d37a 100644
--- a/helix-core/pom.xml
+++ b/helix-core/pom.xml
@@ -162,39 +162,39 @@ under the License.
         <configuration>
           <programs>
             <program>
-              <mainClass>com.linkedin.helix.controller.HelixControllerMain</mainClass>
+              <mainClass>org.apache.helix.controller.HelixControllerMain</mainClass>
               <name>run-helix-controller</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.tools.ClusterSetup</mainClass>
+              <mainClass>org.apache.helix.tools.ClusterSetup</mainClass>
               <name>helix-admin</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.tools.ZKDumper</mainClass>
+              <mainClass>org.apache.helix.tools.ZKDumper</mainClass>
               <name>zk-dumper</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.tools.ZKLogFormatter</mainClass>
+              <mainClass>org.apache.helix.tools.ZKLogFormatter</mainClass>
               <name>zk-log-parser</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.tools.ZkLogCSVFormatter</mainClass>
+              <mainClass>org.apache.helix.tools.ZkLogCSVFormatter</mainClass>
               <name>zk-log-csv-formatter</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.examples.ExampleProcess</mainClass>
+              <mainClass>org.apache.helix.examples.ExampleProcess</mainClass>
               <name>start-helix-participant</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.tools.LocalZKServer</mainClass>
+              <mainClass>org.apache.helix.tools.LocalZKServer</mainClass>
               <name>start-standalone-zookeeper</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.tools.ZkLogAnalyzer</mainClass>
+              <mainClass>org.apache.helix.tools.ZkLogAnalyzer</mainClass>
               <name>zk-log-analyzer</name>
             </program>
             <program>
-              <mainClass>com.linkedin.helix.tools.JmxDumper</mainClass>
+              <mainClass>org.apache.helix.tools.JmxDumper</mainClass>
               <name>JmxDumper</name>
             </program>
           </programs>

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/AccessOption.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/AccessOption.java b/helix-core/src/main/java/com/linkedin/helix/AccessOption.java
deleted file mode 100644
index 2002806..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/AccessOption.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.linkedin.helix;
-
-import org.apache.zookeeper.CreateMode;
-
-public class AccessOption
-{
-  public static int PERSISTENT = 0x1;
-  public static int EPHEMERAL = 0x2;
-  public static int PERSISTENT_SEQUENTIAL = 0x4;
-  public static int EPHEMERAL_SEQUENTIAL = 0x8;
-  public static int THROW_EXCEPTION_IFNOTEXIST = 0x10;
-
-  /**
-   * Helper method to get zookeeper create mode from options
-   * 
-   * @param options
-   * @return zookeeper create mode
-   */
-  public static CreateMode getMode(int options)
-  {
-    if ((options & PERSISTENT) > 0)
-    {
-      return CreateMode.PERSISTENT;
-    }
-    else if ((options & EPHEMERAL) > 0)
-    {
-      return CreateMode.EPHEMERAL;
-    }
-    else if ((options & PERSISTENT_SEQUENTIAL) > 0)
-    {
-      return CreateMode.PERSISTENT_SEQUENTIAL;
-    }
-    else if ((options & EPHEMERAL_SEQUENTIAL) > 0)
-    {
-      return CreateMode.EPHEMERAL_SEQUENTIAL;
-    }
-
-    return null;
-  }
-
-  /**
-   * Helper method to get is-throw-exception-on-node-not-exist from options
-   * 
-   * @param options
-   * @return
-   */
-  public static boolean isThrowExceptionIfNotExist(int options)
-  {
-    return (options & THROW_EXCEPTION_IFNOTEXIST) > 0;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/BaseDataAccessor.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/BaseDataAccessor.java b/helix-core/src/main/java/com/linkedin/helix/BaseDataAccessor.java
deleted file mode 100644
index c157951..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/BaseDataAccessor.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package com.linkedin.helix;
-
-import java.util.List;
-
-import org.I0Itec.zkclient.DataUpdater;
-import org.I0Itec.zkclient.IZkChildListener;
-import org.I0Itec.zkclient.IZkDataListener;
-import org.apache.zookeeper.CreateMode;
-import org.apache.zookeeper.data.Stat;
-
-public interface BaseDataAccessor<T>
-{
-  /**
-   * This will always attempt to create the znode, if it exists it will return false. Will
-   * create parents if they do not exist. For performance reasons, it may try to create
-   * child first and only if it fails it will try to create parent
-   * 
-   * @param path
-   * @param record
-   * @return
-   */
-  boolean create(String path, T record, int options);
-
-  /**
-   * This will always attempt to set the data on existing node. If the znode does not
-   * exist it will create it.
-   * 
-   * @param path
-   * @param record
-   * @return
-   */
-  boolean set(String path, T record, int options);
-
-  /**
-   * This will attempt to merge with existing data by calling znrecord.merge and if it
-   * does not exist it will create it znode
-   * 
-   * @param path
-   * @param record
-   * @return
-   */
-  boolean update(String path, DataUpdater<T> updater, int options);
-
-  /**
-   * This will remove znode and all it's child nodes if any
-   * 
-   * @param path
-   * @return
-   */
-  boolean remove(String path, int options);
-
-  /**
-   * Use it when creating children under a parent node. This will use async api for better
-   * performance. If the child already exists it will return false.
-   * 
-   * @param parentPath
-   * @param record
-   * @return
-   */
-  boolean[] createChildren(List<String> paths, List<T> records, int options);
-
-  /**
-   * can set multiple children under a parent node. This will use async api for better
-   * performance. If this child does not exist it will create it.
-   * 
-   * @param parentPath
-   * @param record
-   */
-  boolean[] setChildren(List<String> paths, List<T> records, int options);
-
-  /**
-   * Can update multiple nodes using async api for better performance. If a child does not
-   * exist it will create it.
-   * 
-   * @param parentPath
-   * @param record
-   * @return
-   */
-  boolean[] updateChildren(List<String> paths, List<DataUpdater<T>> updaters, int options);
-
-  /**
-   * remove multiple paths using async api. will remove any child nodes if any
-   * 
-   * @param paths
-   * @return
-   */
-  boolean[] remove(List<String> paths, int options);
-
-  /**
-   * Get the {@link T} corresponding to the path
-   * 
-   * @param path
-   * @return
-   */
-  T get(String path, Stat stat, int options);
-
-  /**
-   * Get List of {@link T} corresponding to the paths using async api
-   * 
-   * @param paths
-   * @return
-   */
-  List<T> get(List<String> paths, List<Stat> stats, int options);
-
-  /**
-   * Get the children under a parent path using async api
-   * 
-   * @param path
-   * @return
-   */
-  List<T> getChildren(String parentPath, List<Stat> stats, int options);
-
-  /**
-   * Returns the child names given a parent path
-   * 
-   * @param type
-   * @param keys
-   * @return
-   */
-  List<String> getChildNames(String parentPath, int options);
-
-  /**
-   * checks if the path exists in zk
-   * 
-   * @param path
-   * @return
-   */
-  boolean exists(String path, int options);
-
-  /**
-   * checks if the all the paths exists
-   * 
-   * @param paths
-   * @return
-   */
-  boolean[] exists(List<String> paths, int options);
-
-  /**
-   * Get the stats of all the paths
-   * 
-   * @param paths
-   * @return
-   */
-  Stat[] getStats(List<String> paths, int options);
-
-  /**
-   * Get the stats of all the paths
-   * 
-   * @param paths
-   * @return
-   */
-  Stat getStat(String path, int options);
-
-  /**
-   * Subscribe data listener to path
-   * 
-   * @param path
-   * @param listener
-   * @return
-   */
-  void subscribeDataChanges(String path, IZkDataListener listener);
-
-  /**
-   * Unsubscribe data listener to path
-   * 
-   * @param path
-   * @param listener
-   */
-  void unsubscribeDataChanges(String path, IZkDataListener listener);
-
-  /**
-   * Subscribe child listener to path
-   * 
-   * @param path
-   * @param listener
-   * @return
-   */
-  List<String> subscribeChildChanges(String path, IZkChildListener listener);
-
-  /**
-   * Unsubscribe child listener to path
-   * 
-   * @param path
-   * @param listener
-   */
-  void unsubscribeChildChanges(String path, IZkChildListener listener);
-
-  /**
-   * reset the cache if any, when session expiry happens
-   */
-  void reset();
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ClusterMessagingService.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ClusterMessagingService.java b/helix-core/src/main/java/com/linkedin/helix/ClusterMessagingService.java
deleted file mode 100644
index 001d9c2..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ClusterMessagingService.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import com.linkedin.helix.messaging.AsyncCallback;
-import com.linkedin.helix.messaging.handling.MessageHandlerFactory;
-import com.linkedin.helix.model.Message;
-
-/**
- * Provides the ability to <br>
- * <li>Send message to a specific component in the cluster[ participant,
- * controller, Router(probably not needed) ]</li> <li>Broadcast message to all
- * nodes</li> <li>Send message to instances that hold a specific resource</li>
- * <li>Asynchronous request response api. Send message with a co-relation id and
- * invoke a method when there is a response. Can support timeout.</li>
- * 
- * @author kgopalak
- * 
- */
-public interface ClusterMessagingService
-{
-  /**
-   * Send message matching the specifications mentioned in recipientCriteria.
-   * 
-   * @param receipientCriteria
-   * @See Criteria
-   * @param message
-   *          message to be sent. Some attributes of this message will be
-   *          changed as required
-   * @return returns how many messages were successfully sent.
-   */
-  int send(Criteria recipientCriteria, Message message);
-
-  /**
-   * This will send the message to all instances matching the criteria<br>
-   * When there is a reply to the message sent AsynCallback.onReply will be
-   * invoked. Application can specify a timeout on AsyncCallback. After every
-   * reply is processed AsyncCallback.isDone will be invoked.<br>
-   * This method will return after sending the messages. <br>
-   * This is useful when message need to be sent and current thread need not
-   * wait for response since processing will be done in another thread.
-   * 
-   * @param receipientCriteria
-   * @param message
-   * @param callbackOnReply
-   * @param timeOut
-   * @param retryCount
-   * @return
-   */
-  int send(Criteria receipientCriteria, Message message,
-      AsyncCallback callbackOnReply, int timeOut);
-
-  int send(Criteria receipientCriteria, Message message,
-      AsyncCallback callbackOnReply, int timeOut, int retryCount);
-
-  /**
-   * This will send the message to all instances matching the criteria<br>
-   * When there is a reply to the message sent AsynCallback.onReply will be
-   * invoked. Application can specify a timeout on AsyncCallback. After every
-   * reply is processed AsyncCallback.isDone will be invoked.<br>
-   * This method will return only after the AsyncCallback.isDone() returns true <br>
-   * This is useful when message need to be sent and current thread has to wait
-   * for response. <br>
-   * The current thread can use callbackOnReply instance to store application
-   * specific data.
-   * 
-   * @param receipientCriteria
-   * @param message
-   * @param callbackOnReply
-   * @param timeOut
-   * @param retryCount
-   * @return
-   */
-  int sendAndWait(Criteria receipientCriteria, Message message,
-      AsyncCallback callbackOnReply, int timeOut);
-
-  int sendAndWait(Criteria receipientCriteria, Message message,
-      AsyncCallback callbackOnReply, int timeOut, int retryCount);
-
-  /**
-   * This will register a message handler factory to create handlers for
-   * message. In case client code defines its own message type, it can define a
-   * message handler factory to create handlers to process those messages.
-   * Messages are processed in a threadpool which is hosted by cluster manager,
-   * and cluster manager will call the factory to create handler, and the
-   * handler is called in the threadpool.
-   * 
-   * Note that only one message handler factory can be registered with one
-   * message type.
-   * 
-   * @param type
-   *          The message type that the factory will create handler for
-   * @param factory
-   *          The per-type message factory
-   * @param threadpoolSize
-   *        size of the execution threadpool that handles the message 
-   * @return
-   */
-  public void registerMessageHandlerFactory(String type,
-      MessageHandlerFactory factory);
-  
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ClusterView.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ClusterView.java b/helix-core/src/main/java/com/linkedin/helix/ClusterView.java
deleted file mode 100644
index decc50d..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ClusterView.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.codehaus.jackson.annotate.JsonProperty;
-
-@Deprecated
-public class ClusterView
-{
-  private Map<PropertyType, List<ZNRecord>> clusterPropertyLists;
-
-  // getter/setter's are needed for private fields for
-  // serialization/de-serialization
-  // ref:
-  // http://jackson.codehaus.org/DataBindingDeepDive
-  // @JsonProperty
-  public void setClusterPropertyLists(Map<PropertyType, List<ZNRecord>> clusterPropertyLists)
-  {
-    this.clusterPropertyLists = clusterPropertyLists;
-  }
-
-  // @JsonProperty
-  public Map<PropertyType, List<ZNRecord>> getPropertyLists()
-  {
-    return clusterPropertyLists;
-  }
-
-  public void setClusterPropertyList(PropertyType type, List<ZNRecord> propertyList)
-  {
-    clusterPropertyLists.put(type, propertyList);
-  }
-
-  public List<ZNRecord> getPropertyList(PropertyType type)
-  {
-    return clusterPropertyLists.get(type);
-  }
-
-  public void setMemberInstanceMap(Map<String, MemberInstance> memberInstanceMap)
-  {
-    this._memberInstanceMap = memberInstanceMap;
-  }
-
-  @JsonProperty
-  public Map<String, MemberInstance> getMemberInstanceMap()
-  {
-    return _memberInstanceMap;
-  }
-
-  public void set_memberInstanceMap(Map<String, MemberInstance> _memberInstanceMap)
-  {
-    this._memberInstanceMap = _memberInstanceMap;
-  }
-
-  private Map<String, MemberInstance> _memberInstanceMap;
-  private List<MemberInstance> _instances;
-
-  public void setInstances(List<MemberInstance> instances)
-  {
-    this._instances = instances;
-  }
-
-  public List<MemberInstance> getInstances()
-  {
-    return _instances;
-  }
-
-  public static class MemberInstance
-  {
-    private Map<PropertyType, List<ZNRecord>> _instanceProperties = new TreeMap<PropertyType, List<ZNRecord>>();
-
-    public void setClusterProperties(Map<PropertyType, List<ZNRecord>> instanceProperties)
-    {
-      this._instanceProperties = instanceProperties;
-    }
-
-    // @JsonProperty
-    public Map<PropertyType, List<ZNRecord>> getInstanceProperties()
-    {
-      return _instanceProperties;
-    }
-
-    public void setInstanceProperty(PropertyType type, List<ZNRecord> values)
-    {
-      _instanceProperties.put(type, values);
-    }
-
-    public List<ZNRecord> getInstanceProperty(PropertyType type)
-    {
-      return _instanceProperties.get(type);
-    }
-
-    private String _instanceName;
-
-    // for JSON de-serialization
-    public MemberInstance()
-    {
-
-    }
-
-    public MemberInstance(String instanceName)
-    {
-      this._instanceName = instanceName;
-    }
-
-    public String getInstanceName()
-    {
-      return _instanceName;
-    }
-
-    public void setInstanceName(String instanceName)
-    {
-      this._instanceName = instanceName;
-    }
-
-  }
-
-  public MemberInstance getMemberInstance(String instanceName, boolean createNewIfAbsent)
-  {
-    if (!_memberInstanceMap.containsKey(instanceName))
-    {
-      _memberInstanceMap.put(instanceName, new MemberInstance(instanceName));
-    }
-    return _memberInstanceMap.get(instanceName);
-  }
-
-  private List<ZNRecord> _externalView;
-
-  public ClusterView()
-  {
-    clusterPropertyLists = new TreeMap<PropertyType, List<ZNRecord>>();
-    setClusterPropertyList(PropertyType.IDEALSTATES, new ArrayList<ZNRecord>());
-    setClusterPropertyList(PropertyType.CONFIGS, new ArrayList<ZNRecord>());
-    setClusterPropertyList(PropertyType.LIVEINSTANCES, new ArrayList<ZNRecord>());
-    setClusterPropertyList(PropertyType.INSTANCES, new ArrayList<ZNRecord>());
-
-    _memberInstanceMap = new HashMap<String, ClusterView.MemberInstance>();
-  }
-
-  public List<ZNRecord> getExternalView()
-  {
-    return _externalView;
-  }
-
-  public void setExternalView(List<ZNRecord> externalView)
-  {
-    this._externalView = externalView;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ConfigAccessor.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ConfigAccessor.java b/helix-core/src/main/java/com/linkedin/helix/ConfigAccessor.java
deleted file mode 100644
index 9e74246..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ConfigAccessor.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.TreeMap;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.ConfigScope.ConfigScopeProperty;
-import com.linkedin.helix.manager.zk.ZKUtil;
-import com.linkedin.helix.manager.zk.ZkClient;
-import com.linkedin.helix.util.StringTemplate;
-
-public class ConfigAccessor
-{
-  private static Logger               LOG      = Logger.getLogger(ConfigAccessor.class);
-
-  private static final StringTemplate template = new StringTemplate();
-  static
-  {
-    // @formatter:off
-    template.addEntry(ConfigScopeProperty.CLUSTER, 1, "/{clusterName}/CONFIGS/CLUSTER");
-    template.addEntry(ConfigScopeProperty.CLUSTER,
-                      2,
-                      "/{clusterName}/CONFIGS/CLUSTER/{clusterName}|SIMPLEKEYS");
-    template.addEntry(ConfigScopeProperty.PARTICIPANT,
-                      1,
-                      "/{clusterName}/CONFIGS/PARTICIPANT");
-    template.addEntry(ConfigScopeProperty.PARTICIPANT,
-                      2,
-                      "/{clusterName}/CONFIGS/PARTICIPANT/{participantName}|SIMPLEKEYS");
-    template.addEntry(ConfigScopeProperty.RESOURCE, 1, "/{clusterName}/CONFIGS/RESOURCE");
-    template.addEntry(ConfigScopeProperty.RESOURCE,
-                      2,
-                      "/{clusterName}/CONFIGS/RESOURCE/{resourceName}|SIMPLEKEYS");
-    template.addEntry(ConfigScopeProperty.PARTITION,
-                      2,
-                      "/{clusterName}/CONFIGS/RESOURCE/{resourceName}|MAPKEYS");
-    template.addEntry(ConfigScopeProperty.PARTITION,
-                      3,
-                      "/{clusterName}/CONFIGS/RESOURCE/{resourceName}|MAPMAPKEYS|{partitionName}");
-    // @formatter:on
-  }
-
-  private final ZkClient              zkClient;
-
-  public ConfigAccessor(ZkClient zkClient)
-  {
-    this.zkClient = zkClient;
-  }
-
-  /**
-   * Get config value
-   * 
-   * @param scope
-   * @param key
-   * @return value or null if doesn't exist
-   */
-  public String get(ConfigScope scope, String key)
-  {
-    if (scope == null || scope.getScope() == null)
-    {
-      LOG.error("Scope can't be null");
-      return null;
-    }
-
-    String value = null;
-    String clusterName = scope.getClusterName();
-    if (!ZKUtil.isClusterSetup(clusterName, zkClient))
-    {
-      throw new HelixException("cluster " + clusterName + " is not setup yet");
-    }
-
-    String scopeStr = scope.getScopeStr();
-    String[] splits = scopeStr.split("\\|");
-
-    ZNRecord record = zkClient.readData(splits[0], true);
-
-    if (record != null)
-    {
-      if (splits.length == 1)
-      {
-        value = record.getSimpleField(key);
-      }
-      else if (splits.length == 2)
-      {
-        if (record.getMapField(splits[1]) != null)
-        {
-          value = record.getMapField(splits[1]).get(key);
-        }
-      }
-    }
-    return value;
-
-  }
-
-  /**
-   * Set a config value
-   * 
-   * @param scope
-   * @param key
-   * @param value
-   */
-  public void set(ConfigScope scope, String key, String value)
-  {
-    if (scope == null || scope.getScope() == null)
-    {
-      LOG.error("Scope can't be null");
-      return;
-    }
-
-    String clusterName = scope.getClusterName();
-    if (!ZKUtil.isClusterSetup(clusterName, zkClient))
-    {
-      throw new HelixException("cluster " + clusterName + " is not setup yet");
-    }
-
-    String scopeStr = scope.getScopeStr();
-    String[] splits = scopeStr.split("\\|");
-
-    String id = splits[0].substring(splits[0].lastIndexOf('/') + 1);
-    ZNRecord update = new ZNRecord(id);
-    if (splits.length == 1)
-    {
-      update.setSimpleField(key, value);
-    }
-    else if (splits.length == 2)
-    {
-      if (update.getMapField(splits[1]) == null)
-      {
-        update.setMapField(splits[1], new TreeMap<String, String>());
-      }
-      update.getMapField(splits[1]).put(key, value);
-    }
-    ZKUtil.createOrUpdate(zkClient, splits[0], update, true, true);
-    return;
-  }
-
-  /**
-   * Remove config value
-   * 
-   * @param scope
-   * @param key
-   */
-  public void remove(ConfigScope scope, String key)
-  {
-    if (scope == null || scope.getScope() == null)
-    {
-      LOG.error("Scope can't be null");
-      return;
-    }
-
-    String clusterName = scope.getClusterName();
-    if (!ZKUtil.isClusterSetup(clusterName, zkClient))
-    {
-      throw new HelixException("cluster " + clusterName + " is not setup yet");
-    }
-
-    String scopeStr = scope.getScopeStr();
-    String[] splits = scopeStr.split("\\|");
-
-    String id = splits[0].substring(splits[0].lastIndexOf('/') + 1);
-    ZNRecord update = new ZNRecord(id);
-    if (splits.length == 1)
-    {
-      // subtract doesn't care about value, use empty string
-      update.setSimpleField(key, "");
-    }
-    else if (splits.length == 2)
-    {
-      if (update.getMapField(splits[1]) == null)
-      {
-        update.setMapField(splits[1], new TreeMap<String, String>());
-      }
-      // subtract doesn't care about value, use empty string
-      update.getMapField(splits[1]).put(key, "");
-    }
-
-    ZKUtil.subtract(zkClient, splits[0], update);
-    return;
-  }
-
-  /**
-   * Get a list of config keys
-   * 
-   * @param type
-   * @param clusterName
-   * @param keys
-   * @return
-   */
-  public List<String> getKeys(ConfigScopeProperty type,
-                              String clusterName,
-                              String... keys)
-  {
-    if (type == null || clusterName == null)
-    {
-      LOG.error("clusterName|scope can't be null");
-      return Collections.emptyList();
-    }
-
-    try
-    {
-      if (!ZKUtil.isClusterSetup(clusterName, zkClient))
-      {
-        LOG.error("cluster " + clusterName + " is not setup yet");
-        return Collections.emptyList();
-      }
-
-      String[] args = new String[1 + keys.length];
-      args[0] = clusterName;
-      System.arraycopy(keys, 0, args, 1, keys.length);
-      String scopeStr = template.instantiate(type, args);
-      String[] splits = scopeStr.split("\\|");
-      List<String> retKeys = null;
-      if (splits.length == 1)
-      {
-        retKeys = zkClient.getChildren(splits[0]);
-      }
-      else
-      {
-        ZNRecord record = zkClient.readData(splits[0]);
-
-        if (splits[1].startsWith("SIMPLEKEYS"))
-        {
-          retKeys = new ArrayList<String>(record.getSimpleFields().keySet());
-
-        }
-        else if (splits[1].startsWith("MAPKEYS"))
-        {
-          retKeys = new ArrayList<String>(record.getMapFields().keySet());
-        }
-        else if (splits[1].startsWith("MAPMAPKEYS"))
-        {
-          retKeys = new ArrayList<String>(record.getMapField(splits[2]).keySet());
-        }
-      }
-      if (retKeys == null)
-      {
-        LOG.error("Invalid scope: " + type + " or keys: " + Arrays.toString(args));
-        return Collections.emptyList();
-      }
-
-      Collections.sort(retKeys);
-      return retKeys;
-    }
-    catch (Exception e)
-    {
-      return Collections.emptyList();
-    }
-
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ConfigChangeListener.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ConfigChangeListener.java b/helix-core/src/main/java/com/linkedin/helix/ConfigChangeListener.java
deleted file mode 100644
index 0c03ebf..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ConfigChangeListener.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.List;
-
-import com.linkedin.helix.model.InstanceConfig;
-
-/**
- * @author kgopalak
- * 
- */
-public interface ConfigChangeListener
-{
-
-  /**
-   * Invoked when participant config changes
-   * 
-   * @param configs
-   * @param changeContext
-   */
-  public void onConfigChange(List<InstanceConfig> configs,
-                             NotificationContext changeContext);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ConfigScope.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ConfigScope.java b/helix-core/src/main/java/com/linkedin/helix/ConfigScope.java
deleted file mode 100644
index a8e1c07..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ConfigScope.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.util.StringTemplate;
-
-public class ConfigScope
-{
-  public enum ConfigScopeProperty
-  {
-    CLUSTER, PARTICIPANT, RESOURCE, PARTITION, CONSTRAINT;
-  }
-
-  private static Logger LOG = Logger.getLogger(ConfigScope.class);
-
-  private static final List<ConfigScopeProperty> scopePriority =
-      new ArrayList<ConfigScopeProperty>();
-  private static final Map<ConfigScopeProperty, Map<ConfigScopeProperty, ConfigScopeProperty>> scopeTransition =
-      new HashMap<ConfigScopeProperty, Map<ConfigScopeProperty, ConfigScopeProperty>>();
-  private static final StringTemplate template = new StringTemplate();
-  static
-  {
-    // scope priority: CLUSTER > PARTICIPANT > RESOURCE > PARTITION
-    scopePriority.add(ConfigScopeProperty.CLUSTER);
-    scopePriority.add(ConfigScopeProperty.PARTICIPANT);
-    scopePriority.add(ConfigScopeProperty.RESOURCE);
-    scopePriority.add(ConfigScopeProperty.PARTITION);
-
-    // scope transition table to check valid inputs
-    scopeTransition.put(ConfigScopeProperty.CLUSTER,
-                        new HashMap<ConfigScopeProperty, ConfigScopeProperty>());
-    scopeTransition.get(ConfigScopeProperty.CLUSTER).put(ConfigScopeProperty.PARTICIPANT,
-                                                         ConfigScopeProperty.PARTICIPANT);
-    scopeTransition.get(ConfigScopeProperty.CLUSTER).put(ConfigScopeProperty.RESOURCE,
-                                                         ConfigScopeProperty.RESOURCE);
-    scopeTransition.put(ConfigScopeProperty.RESOURCE,
-                        new HashMap<ConfigScopeProperty, ConfigScopeProperty>());
-    scopeTransition.get(ConfigScopeProperty.RESOURCE).put(ConfigScopeProperty.PARTITION,
-                                                          ConfigScopeProperty.PARTITION);
-
-    // string templates to generate znode path/index
-    // @formatter:off
-    template.addEntry(ConfigScopeProperty.CLUSTER,
-                      2,
-                      "/{clusterName}/CONFIGS/CLUSTER/{clusterName}");
-    template.addEntry(ConfigScopeProperty.PARTICIPANT,
-                      2,
-                      "/{clusterName}/CONFIGS/PARTICIPANT/{participantName}");
-    template.addEntry(ConfigScopeProperty.RESOURCE,
-                      2,
-                      "/{clusterName}/CONFIGS/RESOURCE/{resourceName}");
-    template.addEntry(ConfigScopeProperty.PARTITION,
-                      3,
-                      "/{clusterName}/CONFIGS/RESOURCE/{resourceName}|{partitionName}");
-    // @formatter:on
-  }
-
-  private final String _clusterName;
-  private final ConfigScopeProperty _scope;
-  private final String _scopeStr;
-
-  ConfigScope(ConfigScopeBuilder configScopeBuilder)
-  {
-    Map<ConfigScopeProperty, String> scopeMap = configScopeBuilder
-        .getScopeMap();
-    List<String> keys = new ArrayList<String>();
-
-    ConfigScopeProperty curScope = null;
-    for (ConfigScopeProperty scope : scopePriority)
-    {
-      if (scopeMap.containsKey(scope))
-      {
-        if (curScope == null && scope == ConfigScopeProperty.CLUSTER)
-        {
-          keys.add(scopeMap.get(scope));
-          curScope = ConfigScopeProperty.CLUSTER;
-        } else if (curScope == null)
-        {
-          throw new IllegalArgumentException("Missing CLUSTER scope. Can't build scope using " + configScopeBuilder);
-        } else
-        {
-          if (!scopeTransition.containsKey(curScope) || !scopeTransition.get(curScope).containsKey(scope))
-          {
-            throw new IllegalArgumentException("Can't build scope using " + configScopeBuilder);
-          }
-          keys.add(scopeMap.get(scope));
-          curScope = scopeTransition.get(curScope).get(scope);
-        }
-      }
-    }
-
-    if (curScope == ConfigScopeProperty.CLUSTER)
-    {
-      // append one more {clusterName}
-      keys.add(scopeMap.get(ConfigScopeProperty.CLUSTER));
-    }
-
-    String scopeStr = template.instantiate(curScope, keys.toArray(new String[0]));
-
-    _clusterName = keys.get(0);
-    _scopeStr = scopeStr;
-    _scope = curScope;
-  }
-
-  public ConfigScopeProperty getScope()
-  {
-    return _scope;
-  }
-
-  public String getClusterName()
-  {
-    return _clusterName;
-  }
-
-  public String getScopeStr()
-  {
-    return _scopeStr;
-  }
-
-  @Override
-  public String toString()
-  {
-    return super.toString() + ": " + _scopeStr;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ConfigScopeBuilder.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ConfigScopeBuilder.java b/helix-core/src/main/java/com/linkedin/helix/ConfigScopeBuilder.java
deleted file mode 100644
index 712a6bc..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ConfigScopeBuilder.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.ConfigScope.ConfigScopeProperty;
-import com.linkedin.helix.util.StringTemplate;
-
-public class ConfigScopeBuilder
-{
-  private static Logger LOG = Logger.getLogger(ConfigScopeBuilder.class);
-
-  private static StringTemplate template = new StringTemplate();
-  static
-  {
-    // @formatter:off
-    template.addEntry(ConfigScopeProperty.CLUSTER, 1, "CLUSTER={clusterName}");
-    template.addEntry(ConfigScopeProperty.RESOURCE, 2, "CLUSTER={clusterName},RESOURCE={resourceName}");
-    template.addEntry(ConfigScopeProperty.PARTITION, 3, "CLUSTER={clusterName},RESOURCE={resourceName},PARTITION={partitionName}");
-    template.addEntry(ConfigScopeProperty.PARTICIPANT, 2, "CLUSTER={clusterName},PARTICIPANT={participantName}");
-    // @formatter:on
-  }
-
-  private final Map<ConfigScopeProperty, String> _scopeMap;
-
-  public Map<ConfigScopeProperty, String> getScopeMap()
-  {
-    return _scopeMap;
-  }
-
-  public ConfigScopeBuilder()
-  {
-    _scopeMap = new HashMap<ConfigScopeProperty, String>();
-  }
-
-  public ConfigScopeBuilder forCluster(String clusterName)
-  {
-    _scopeMap.put(ConfigScopeProperty.CLUSTER, clusterName);
-    return this;
-  }
-
-  public ConfigScopeBuilder forParticipant(String participantName)
-  {
-    _scopeMap.put(ConfigScopeProperty.PARTICIPANT, participantName);
-    return this;
-  }
-
-  public ConfigScopeBuilder forResource(String resourceName)
-  {
-    _scopeMap.put(ConfigScopeProperty.RESOURCE, resourceName);
-    return this;
-
-  }
-
-  public ConfigScopeBuilder forPartition(String partitionName)
-  {
-    _scopeMap.put(ConfigScopeProperty.PARTITION, partitionName);
-    return this;
-
-  }
-
-  public ConfigScope build()
-  {
-    // TODO: validate the scopes map
-    return new ConfigScope(this);
-  }
-
-  public ConfigScope build(ConfigScopeProperty scope, String clusterName, String... scopeKeys)
-  {
-    if (scopeKeys == null)
-    {
-      scopeKeys = new String[]{};
-    }
-
-    String[] args = new String[1 + scopeKeys.length];
-    args[0] = clusterName;
-    System.arraycopy(scopeKeys, 0, args, 1, scopeKeys.length);
-    String scopePairs = template.instantiate(scope, args);
-
-    return build(scopePairs);
-  }
-
-  public ConfigScope build(String scopePairs)
-  {
-    String[] scopes = scopePairs.split("[\\s,]+");
-    for (String scope : scopes)
-    {
-      try
-      {
-        int idx = scope.indexOf('=');
-        if (idx == -1)
-        {
-          LOG.error("Invalid scope string: " + scope);
-          continue;
-        }
-
-        String scopeStr = scope.substring(0, idx);
-        String value = scope.substring(idx + 1);
-        ConfigScopeProperty scopeProperty = ConfigScopeProperty.valueOf(scopeStr);
-        _scopeMap.put(scopeProperty, value);
-      } catch (Exception e)
-      {
-        LOG.error("Invalid scope string: " + scope);
-        continue;
-      }
-    }
-
-    return build();
-  }
-
-  @Override
-  public String toString()
-  {
-    return _scopeMap.toString();
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ControllerChangeListener.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ControllerChangeListener.java b/helix-core/src/main/java/com/linkedin/helix/ControllerChangeListener.java
deleted file mode 100644
index 3b7b67b..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ControllerChangeListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-
-public interface ControllerChangeListener
-{
-  /**
-   * Invoked when controller changes
-   * 
-   * @param changeContext
-   */
-  public void onControllerChange(NotificationContext changeContext);
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/Criteria.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/Criteria.java b/helix-core/src/main/java/com/linkedin/helix/Criteria.java
deleted file mode 100644
index 9370215..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/Criteria.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-public class Criteria
-{
-  public enum DataSource
-  {
-    IDEALSTATES, EXTERNALVIEW
-  }
-  /**
-   * This can be CONTROLLER, PARTICIPANT, ROUTER Cannot be null
-   */
-  InstanceType recipientInstanceType;
-  /**
-   * If true this will only be process by the instance that was running when the
-   * message was sent. If the instance process dies and comes back up it will be
-   * ignored.
-   */
-  boolean sessionSpecific;
-  /**
-   * applicable only in case PARTICIPANT use * to broadcast to all instances
-   */
-  String instanceName = "";
-  /**
-   * Name of the resource. Use * to send message to all resources
-   * owned by an instance.
-   */
-  String resourceName = "";
-  /**
-   * Resource partition. Use * to send message to all partitions of a given
-   * resource
-   */
-  String partitionName = "";
-  /**
-   * State of the resource
-   */
-  String partitionState = "";
-  /**
-   * Exclude sending message to your self. True by default
-   */
-  boolean selfExcluded = true;
-  /**
-   * Determine if use external view or ideal state as source of truth
-   */
-  DataSource _dataSource = DataSource.EXTERNALVIEW;
-  
-  public DataSource getDataSource()
-  {
-    return _dataSource;
-  }
-  
-  public void setDataSource(DataSource source)
-  {
-    _dataSource = source;
-  }
-
-  public boolean isSelfExcluded()
-  {
-    return selfExcluded;
-  }
-
-  public void setSelfExcluded(boolean selfExcluded)
-  {
-    this.selfExcluded = selfExcluded;
-  }
-
-  public InstanceType getRecipientInstanceType()
-  {
-    return recipientInstanceType;
-  }
-
-  public void setRecipientInstanceType(InstanceType recipientInstanceType)
-  {
-    this.recipientInstanceType = recipientInstanceType;
-  }
-
-  public boolean isSessionSpecific()
-  {
-    return sessionSpecific;
-  }
-
-  public void setSessionSpecific(boolean sessionSpecific)
-  {
-    this.sessionSpecific = sessionSpecific;
-  }
-
-  public String getInstanceName()
-  {
-    return instanceName;
-  }
-
-  public void setInstanceName(String instanceName)
-  {
-    this.instanceName = instanceName;
-  }
-
-  public String getResource()
-  {
-    return resourceName;
-  }
-
-  public void setResource(String resourceName)
-  {
-    this.resourceName = resourceName;
-  }
-
-  public String getPartition()
-  {
-    return partitionName;
-  }
-
-  public void setPartition(String partitionName)
-  {
-    this.partitionName = partitionName;
-  }
-
-  public String getPartitionState()
-  {
-    return partitionState;
-  }
-
-  public void setPartitionState(String partitionState)
-  {
-    this.partitionState = partitionState;
-  }
-
-  public String toString()
-  {
-    StringBuilder sb = new StringBuilder();
-    sb.append("instanceName").append("=").append(instanceName);
-    sb.append("resourceName").append("=").append(resourceName);
-    sb.append("partitionName").append("=").append(partitionName);
-    sb.append("partitionState").append("=").append(partitionState);
-    return sb.toString();
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/CurrentStateChangeListener.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/CurrentStateChangeListener.java b/helix-core/src/main/java/com/linkedin/helix/CurrentStateChangeListener.java
deleted file mode 100644
index be98ec4..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/CurrentStateChangeListener.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.List;
-
-import com.linkedin.helix.model.CurrentState;
-
-public interface CurrentStateChangeListener
-{
-
-  /**
-   * Invoked when current state changes
-   * 
-   * @param instanceName
-   * @param statesInfo
-   * @param changeContext
-   */
-  public void onStateChange(String instanceName,
-                            List<CurrentState> statesInfo,
-                            NotificationContext changeContext);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/DataAccessor.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/DataAccessor.java b/helix-core/src/main/java/com/linkedin/helix/DataAccessor.java
deleted file mode 100644
index 8ed7432..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/DataAccessor.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.List;
-import java.util.Map;
-/**
- * use {@link HelixDataAccessor}.
- */
-@Deprecated
-public interface DataAccessor
-{
-
-  /**
-   * Set a property, overwrite if it exists and creates if not exists
-   * 
-   * @param type
-   * @param value
-   * @param keys
-   * @true if the operation was successful
-   */
-  boolean setProperty(PropertyType type, ZNRecord value, String... keys);
-
-  boolean setProperty(PropertyType type, HelixProperty value, String... keys);
-
-  /**
-   * Updates a property, either overwrite or merge based on the
-   * propertyType.mergeOnUpdate, fails to update if
-   * propertyType.updateOnlyOnExists and does not exist
-   * 
-   * @param type
-   * @param value
-   * @param keys
-   * @return true if the update was successful
-   */
-  boolean updateProperty(PropertyType type, ZNRecord value, String... keys);
-
-  boolean updateProperty(PropertyType type, HelixProperty value, String... keys);
-
-  /**
-   * Return the property value, it must be a leaf
-   * 
-   * @param type
-   * @param keys
-   *          one or more keys used to get the path of znode
-   * @return value, Null if absent or on error
-   */
-  ZNRecord getProperty(PropertyType type, String... keys);
-
-  <T extends HelixProperty> T getProperty(Class<T> clazz, PropertyType type, String... keys);
-
-  /**
-   * Removes the property
-   * 
-   * @param type
-   * @param keys
-   * @return
-   */
-  boolean removeProperty(PropertyType type, String... keys);
-
-  /**
-   * Return the child names of the property
-   * 
-   * @param type
-   * @param keys
-   * @return SubPropertyNames
-   */
-  List<String> getChildNames(PropertyType type, String... keys);
-
-  /**
-   * 
-   * @param type
-   * @param keys
-   *          must point to parent of leaf znodes
-   * @return subPropertyValues
-   */
-  List<ZNRecord> getChildValues(PropertyType type, String... keys);
-
-  <T extends HelixProperty> List<T> getChildValues(Class<T> clazz, PropertyType type,
-      String... keys);
-
-  <T extends HelixProperty> Map<String, T> getChildValuesMap(Class<T> clazz, PropertyType type,
-      String... keys);
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/ExternalViewChangeListener.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/ExternalViewChangeListener.java b/helix-core/src/main/java/com/linkedin/helix/ExternalViewChangeListener.java
deleted file mode 100644
index 8635c33..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/ExternalViewChangeListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.List;
-
-import com.linkedin.helix.model.ExternalView;
-
-public interface ExternalViewChangeListener
-{
-
-  /**
-   * Invoked when external view changes
-   * 
-   * @param externalViewList
-   * @param changeContext
-   */
-  public void onExternalViewChange(List<ExternalView> externalViewList,
-                                   NotificationContext changeContext);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/GroupCommit.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/GroupCommit.java b/helix-core/src/main/java/com/linkedin/helix/GroupCommit.java
deleted file mode 100644
index 5fc10cb..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/GroupCommit.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package com.linkedin.helix;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.I0Itec.zkclient.exception.ZkNoNodeException;
-import org.apache.log4j.Logger;
-
-// TODO: move to mananger.zk
-public class GroupCommit
-{ 
-  private static Logger  LOG = Logger.getLogger(GroupCommit.class);
-  private static class Queue
-  {
-    final AtomicReference<Thread>      _running = new AtomicReference<Thread>();
-    final ConcurrentLinkedQueue<Entry> _pending = new ConcurrentLinkedQueue<Entry>();
-  }
-
-  private static class Entry
-  {
-    final String   _key;
-    final ZNRecord _record;
-    AtomicBoolean  _sent = new AtomicBoolean(false);
-
-    Entry(String key, ZNRecord record)
-    {
-      _key = key;
-      _record = record;
-    }
-  }
-
-  private final Queue[]               _queues = new Queue[100];
-  
-  // potential memory leak if we add resource and remove resource
-  // TODO: move the cache logic to data accessor
-//  private final Map<String, ZNRecord> _cache  = new ConcurrentHashMap<String, ZNRecord>();
-
-  
-  public GroupCommit()
-  {
-    // Don't use Arrays.fill();
-    for (int i = 0; i < _queues.length; ++i)
-    {
-      _queues[i] = new Queue();
-    }
-  }
-
-  private Queue getQueue(String key)
-  {
-    return _queues[(key.hashCode() & Integer.MAX_VALUE) % _queues.length];
-  }
-
-  public boolean commit(BaseDataAccessor<ZNRecord> accessor, int options, String key, ZNRecord record)
-  {
-    Queue queue = getQueue(key);
-    Entry entry = new Entry(key, record);
-
-    queue._pending.add(entry);
-
-    while (!entry._sent.get())
-    {
-      if (queue._running.compareAndSet(null, Thread.currentThread()))
-      {
-        ArrayList<Entry> processed = new ArrayList<Entry>();
-        try
-        {
-          if (queue._pending.peek() == null)
-            return true;
-
-          // remove from queue
-          Entry first = queue._pending.poll();
-          processed.add(first);
-
-          String mergedKey = first._key;
-//          ZNRecord merged = _cache.get(mergedKey);
-          ZNRecord merged = null;
-          
-          try
-          {
-            // accessor will fallback to zk if not found in cache
-            merged = accessor.get(mergedKey, null, options);
-          }
-          catch (ZkNoNodeException e)
-          {
-            // OK.
-          }
-          
-          /**
-           * If the local cache does not contain a value, need to check if there is a 
-           * value in ZK; use it as initial value if exists
-           */
-          if (merged == null)
-          {
-//            ZNRecord valueOnZk = null;
-//            try
-//            {
-//              valueOnZk = accessor.get(mergedKey, null, 0);
-//            }
-//            catch(Exception e)
-//            {
-//              LOG.info(e);
-//            }
-//            if(valueOnZk != null)
-//            {
-//              merged = valueOnZk;
-//              merged.merge(first._record);
-//            }
-//            else // Zk path has null data. use the first record as initial record.
-            {
-              merged = new ZNRecord(first._record);
-            }
-          }
-          else
-          {
-            merged.merge(first._record);
-          }
-          Iterator<Entry> it = queue._pending.iterator();
-          while (it.hasNext())
-          {
-            Entry ent = it.next();
-            if (!ent._key.equals(mergedKey))
-              continue;
-            processed.add(ent);
-            merged.merge(ent._record);
-            // System.out.println("After merging:" + merged);
-            it.remove();
-          }
-          // System.out.println("size:"+ processed.size());
-          accessor.set(mergedKey, merged, options);
-          // accessor.set(mergedKey, merged, BaseDataAccessor.Option.PERSISTENT);
-          // _cache.put(mergedKey, merged);
-        }
-        finally
-        {
-          queue._running.set(null);
-          for (Entry e : processed)
-          {
-            synchronized (e)
-            {
-              e._sent.set(true);
-              e.notify();
-            }
-          }
-        }
-      }
-      else
-      {
-        synchronized (entry)
-        {
-          try
-          {
-            entry.wait(10);
-          }
-          catch (InterruptedException e)
-          {
-            e.printStackTrace();
-            return false;
-          }
-        }
-      }
-    }
-    return true;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/HealthStateChangeListener.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/HealthStateChangeListener.java b/helix-core/src/main/java/com/linkedin/helix/HealthStateChangeListener.java
deleted file mode 100644
index e1bfcb5..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/HealthStateChangeListener.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (C) 2012 LinkedIn Inc <op...@linkedin.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.linkedin.helix;
-
-import java.util.List;
-
-import com.linkedin.helix.model.HealthStat;
-import com.linkedin.helix.model.Message;
-
-public interface HealthStateChangeListener
-{
-
-  /**
-   * Invoked when health stats change
-   * 
-   * @param instanceName
-   * @param reports
-   * @param changeContext
-   */
-  public void onHealthChange(String instanceName,
-                             List<HealthStat> reports,
-                             NotificationContext changeContext);
-}