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:41 UTC

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

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModel.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModel.java b/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModel.java
deleted file mode 100644
index ed3cf8f..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModel.java
+++ /dev/null
@@ -1,149 +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.participant;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.HelixManager;
-import com.linkedin.helix.HelixManagerFactory;
-import com.linkedin.helix.InstanceType;
-import com.linkedin.helix.NotificationContext;
-import com.linkedin.helix.model.Message;
-import com.linkedin.helix.participant.statemachine.StateModel;
-import com.linkedin.helix.participant.statemachine.StateModelInfo;
-import com.linkedin.helix.participant.statemachine.StateModelParser;
-import com.linkedin.helix.participant.statemachine.StateTransitionError;
-import com.linkedin.helix.participant.statemachine.Transition;
-
-
-@StateModelInfo(initialState = "OFFLINE", states = { "LEADER", "STANDBY" })
-public class DistClusterControllerStateModel extends StateModel
-{
-  private static Logger logger = Logger.getLogger(DistClusterControllerStateModel.class);
-  private HelixManager _controller = null;
-  private final String _zkAddr;
-
-  public DistClusterControllerStateModel(String zkAddr)
-  {
-    StateModelParser parser = new StateModelParser();
-    _currentState = parser.getInitialState(DistClusterControllerStateModel.class);
-    _zkAddr = zkAddr;
-  }
-
-  @Transition(to="STANDBY",from="OFFLINE")
-  public void onBecomeStandbyFromOffline(Message message, NotificationContext context)
-  {
-    logger.info("Becoming standby from offline");
-  }
-
-  @Transition(to="LEADER",from="STANDBY")
-  public void onBecomeLeaderFromStandby(Message message, NotificationContext context)
-  throws Exception
-  {
-    String clusterName = message.getPartitionName();
-    String controllerName = message.getTgtName();
-
-    logger.info(controllerName + " becomes leader from standby for " + clusterName);
-    // System.out.println(controllerName + " becomes leader from standby for " + clusterName);
-
-    if (_controller == null)
-    {
-      _controller = HelixManagerFactory
-          .getZKHelixManager(clusterName, controllerName, InstanceType.CONTROLLER, _zkAddr);
-      _controller.connect();
-      _controller.startTimerTasks();
-    }
-    else
-    {
-      logger.error("controller already exists:" + _controller.getInstanceName()
-                   + " for " + clusterName);
-    }
-
-  }
-
-  @Transition(to="STANDBY",from="LEADER")
-  public void onBecomeStandbyFromLeader(Message message, NotificationContext context)
-  {
-    String clusterName = message.getPartitionName();
-    String controllerName = message.getTgtName();
-
-    logger.info(controllerName + " becoming standby from leader for " + clusterName);
-
-    if (_controller != null)
-    {
-      _controller.disconnect();
-      _controller = null;
-    }
-    else
-    {
-      logger.error("No controller exists for " + clusterName);
-    }
-  }
-
-  @Transition(to="OFFLINE",from="STANDBY")
-  public void onBecomeOfflineFromStandby(Message message, NotificationContext context)
-  {
-    String clusterName = message.getPartitionName();
-    String controllerName = message.getTgtName();
-
-    logger.info(controllerName + " becoming offline from standby for cluster:" + clusterName);
-
-  }
-
-  @Transition(to="DROPPED",from="OFFLINE")
-  public void onBecomeDroppedFromOffline(Message message, NotificationContext context)
-  {
-    logger.info("Becoming dropped from offline");
-  }
-
-  @Transition(to="OFFLINE",from="DROPPED")
-  public void onBecomeOfflineFromDropped(Message message, NotificationContext context)
-  {
-    logger.info("Becoming offline from dropped");
-  }
-
-
-  @Override
-  public void rollbackOnError(Message message, NotificationContext context,
-                              StateTransitionError error)
-  {
-    String clusterName = message.getPartitionName();
-    String controllerName = message.getTgtName();
-
-    logger.error(controllerName + " rollbacks on error for " + clusterName);
-
-    if (_controller != null)
-    {
-      _controller.disconnect();
-      _controller = null;
-    }
-
-  }
-
-  @Override
-  public void reset()
-  {
-    if (_controller != null)
-    {
-//      System.out.println("disconnect " + _controller.getInstanceName()
-//                         + "(" + _controller.getInstanceType()
-//                         + ") from " + _controller.getClusterName());
-      _controller.disconnect();
-      _controller = null;
-    }
-
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModelFactory.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModelFactory.java b/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModelFactory.java
deleted file mode 100644
index b7074d3..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/DistClusterControllerStateModelFactory.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.participant;
-
-import com.linkedin.helix.participant.statemachine.StateModelFactory;
-
-public class DistClusterControllerStateModelFactory extends
-    StateModelFactory<DistClusterControllerStateModel>
-{
-  private final String _zkAddr;
-
-  public DistClusterControllerStateModelFactory(String zkAddr)
-  {
-    _zkAddr = zkAddr;
-  }
-
-  @Override
-  public DistClusterControllerStateModel createNewStateModel(String stateUnitKey)
-  {
-    return new DistClusterControllerStateModel(_zkAddr);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyModel.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyModel.java b/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyModel.java
deleted file mode 100644
index 55ffcd5..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyModel.java
+++ /dev/null
@@ -1,96 +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.participant;
-
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.HelixConstants.ChangeType;
-import com.linkedin.helix.HelixManager;
-import com.linkedin.helix.NotificationContext;
-import com.linkedin.helix.model.Message;
-import com.linkedin.helix.participant.statemachine.StateModel;
-import com.linkedin.helix.participant.statemachine.StateModelInfo;
-import com.linkedin.helix.participant.statemachine.Transition;
-
-@StateModelInfo(initialState = "OFFLINE", states = { "LEADER", "STANDBY" })
-public class GenericLeaderStandbyModel extends StateModel
-{
-  private static Logger LOG = Logger.getLogger(GenericLeaderStandbyModel.class);
-
-  private final CustomCodeInvoker _particHolder;
-  private final List<ChangeType> _notificationTypes;
-
-  public GenericLeaderStandbyModel(CustomCodeCallbackHandler callback, 
-                                     List<ChangeType> notificationTypes,
-                                     String partitionKey)
-  {
-    _particHolder = new CustomCodeInvoker(callback, partitionKey);
-    _notificationTypes = notificationTypes;
-  }
-
-  @Transition(to="STANDBY",from="OFFLINE")
-  public void onBecomeStandbyFromOffline(Message message, NotificationContext context)
-  {
-    LOG.info("Become STANDBY from OFFLINE");
-  }
-
-  @Transition(to="LEADER",from="STANDBY")
-  public void onBecomeLeaderFromStandby(Message message, NotificationContext context)
-      throws Exception
-  {
-    LOG.info("Become LEADER from STANDBY");
-    HelixManager manager = context.getManager();
-    if (manager == null)
-    {
-      throw new IllegalArgumentException("Require HelixManager in notification conext");
-    }
-    for (ChangeType notificationType : _notificationTypes)
-    {
-      if (notificationType == ChangeType.LIVE_INSTANCE)
-      {
-        manager.addLiveInstanceChangeListener(_particHolder);
-      }
-      else if (notificationType == ChangeType.CONFIG)
-      {
-        manager.addConfigChangeListener(_particHolder);
-      }
-      else if (notificationType == ChangeType.EXTERNAL_VIEW)
-      {
-        manager.addExternalViewChangeListener(_particHolder);
-      }
-      else
-      {
-        LOG.error("Unsupport notificationType:" + notificationType.toString());
-      }
-    }
-  }
-
-  @Transition(to="STANDBY",from="LEADER")
-  public void onBecomeStandbyFromLeader(Message message, NotificationContext context)
-  {
-    LOG.info("Become STANDBY from LEADER");
-    HelixManager manager = context.getManager();
-    manager.removeListener(_particHolder);    
-  }
-
-  @Transition(to="OFFLINE",from="STANDBY")
-  public void onBecomeOfflineFromStandby(Message message, NotificationContext context)
-  {
-    LOG.info("Become OFFLINE from STANDBY");
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyStateModelFactory.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyStateModelFactory.java b/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyStateModelFactory.java
deleted file mode 100644
index 23f6508..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/GenericLeaderStandbyStateModelFactory.java
+++ /dev/null
@@ -1,44 +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.participant;
-
-import java.util.List;
-
-import com.linkedin.helix.HelixConstants.ChangeType;
-import com.linkedin.helix.participant.statemachine.StateModelFactory;
-
-public class GenericLeaderStandbyStateModelFactory 
-  extends StateModelFactory<GenericLeaderStandbyModel>
-{
-  private final CustomCodeCallbackHandler _callback;
-  private final List<ChangeType> _notificationTypes;
-  public GenericLeaderStandbyStateModelFactory(CustomCodeCallbackHandler callback,
-                                            List<ChangeType> notificationTypes)
-  {
-    if (callback == null || notificationTypes == null || notificationTypes.size() == 0)
-    {
-      throw new IllegalArgumentException("Require: callback | notificationTypes");
-    }
-    _callback = callback;
-    _notificationTypes = notificationTypes;
-  }
-
-  @Override
-  public GenericLeaderStandbyModel createNewStateModel(String partitionKey)
-  {
-    return new GenericLeaderStandbyModel(_callback, _notificationTypes, partitionKey);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/HelixCustomCodeRunner.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/HelixCustomCodeRunner.java b/helix-core/src/main/java/com/linkedin/helix/participant/HelixCustomCodeRunner.java
deleted file mode 100644
index 506781e..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/HelixCustomCodeRunner.java
+++ /dev/null
@@ -1,183 +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.participant;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.HelixConstants.ChangeType;
-import com.linkedin.helix.HelixConstants.StateModelToken;
-import com.linkedin.helix.HelixDataAccessor;
-import com.linkedin.helix.HelixManager;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.manager.zk.ZKHelixDataAccessor;
-import com.linkedin.helix.manager.zk.ZNRecordSerializer;
-import com.linkedin.helix.manager.zk.ZkBaseDataAccessor;
-import com.linkedin.helix.manager.zk.ZkClient;
-import com.linkedin.helix.model.IdealState;
-import com.linkedin.helix.model.IdealState.IdealStateModeProperty;
-
-/**
- * This provides the ability for users to run a custom code in exactly one
- * process using a LeaderStandBy state model. <br/>
- * A typical use case is when one uses CUSTOMIZED ideal state mode where the
- * assignment of partition to nodes needs to change dynamically as the nodes go
- * online/offline.<br/>
- * <code>
- * HelixCustomCodeRunner runner = new HelixCustomCodeRunner(manager,ZK_ADDR);
- * runner
- *  .invoke(_callback)
- *  .on(ChangeType.LIVE_INSTANCE, ChangeType.IdealState)
- *  .usingLeaderStandbyModel("someUniqueId")
- *  .run()
- * </code>
- *
- * @author kgopalak
- *
- */
-public class HelixCustomCodeRunner
-{
-  private static final String LEADER_STANDBY = "LeaderStandby";
-  private static Logger LOG = Logger.getLogger(HelixCustomCodeRunner.class);
-  private static String PARTICIPANT_LEADER = "PARTICIPANT_LEADER";
-
-  private CustomCodeCallbackHandler _callback;
-  private List<ChangeType> _notificationTypes;
-  private String _resourceName;
-  private final HelixManager _manager;
-  private final String _zkAddr;
-  private GenericLeaderStandbyStateModelFactory _stateModelFty;
-
-  /**
-   * Constructs a HelixCustomCodeRunner that will run exactly in one place
-   *
-   * @param manager
-   * @param zkAddr
-   */
-  public HelixCustomCodeRunner(HelixManager manager, String zkAddr)
-  {
-    _manager = manager;
-    _zkAddr = zkAddr;
-  }
-
-  /**
-   * callback to invoke when there is a change in cluster state specified by on(
-   * notificationTypes) This callback must be idempotent which means they should
-   * not depend on what changed instead simply read the cluster data and act on
-   * it.
-   *
-   * @param callback
-   * @return
-   */
-  public HelixCustomCodeRunner invoke(CustomCodeCallbackHandler callback)
-  {
-    _callback = callback;
-    return this;
-  }
-
-  /**
-   * ChangeTypes interested in, ParticipantLeaderCallback.callback method will
-   * be invoked on the
-   *
-   * @param notificationTypes
-   * @return
-   */
-  public HelixCustomCodeRunner on(ChangeType... notificationTypes)
-  {
-    _notificationTypes = Arrays.asList(notificationTypes);
-    return this;
-  }
-
-  public HelixCustomCodeRunner usingLeaderStandbyModel(String id)
-  {
-    _resourceName = PARTICIPANT_LEADER + "_" + id;
-    return this;
-  }
-
-  /**
-   * This method will be invoked when there is a change in any subscribed
-   * notificationTypes
-   *
-   * @throws Exception
-   */
-  public void start() throws Exception
-  {
-    if (_callback == null || _notificationTypes == null || _notificationTypes.size() == 0
-        || _resourceName == null)
-    {
-      throw new IllegalArgumentException("Require callback | notificationTypes | resourceName");
-    }
-
-    LOG.info("Register participantLeader on " + _notificationTypes + " using " + _resourceName);
-
-    _stateModelFty = new GenericLeaderStandbyStateModelFactory(_callback, _notificationTypes);
-
-    StateMachineEngine stateMach = _manager.getStateMachineEngine();
-    stateMach.registerStateModelFactory(LEADER_STANDBY, _stateModelFty, _resourceName);
-    ZkClient zkClient = null;
-    try
-    {
-      // manually add ideal state for participant leader using LeaderStandby
-      // model
-
-      zkClient = new ZkClient(_zkAddr, ZkClient.DEFAULT_CONNECTION_TIMEOUT);
-      zkClient.setZkSerializer(new ZNRecordSerializer());
-      HelixDataAccessor accessor = new ZKHelixDataAccessor(_manager.getClusterName(), new ZkBaseDataAccessor(zkClient));
-      Builder keyBuilder = accessor.keyBuilder();
-
-      IdealState idealState = new IdealState(_resourceName);
-      idealState.setIdealStateMode(IdealStateModeProperty.AUTO.toString());
-      idealState.setReplicas(StateModelToken.ANY_LIVEINSTANCE.toString());
-      idealState.setNumPartitions(1);
-      idealState.setStateModelDefRef(LEADER_STANDBY);
-      idealState.setStateModelFactoryName(_resourceName);
-      List<String> prefList = new ArrayList<String>(Arrays.asList(StateModelToken.ANY_LIVEINSTANCE
-          .toString()));
-      idealState.getRecord().setListField(_resourceName + "_0", prefList);
-
-      List<String> idealStates = accessor.getChildNames(keyBuilder.idealStates());
-      while (idealStates == null || !idealStates.contains(_resourceName))
-      {
-        accessor.setProperty(keyBuilder.idealStates(_resourceName), idealState);
-        idealStates = accessor.getChildNames(keyBuilder.idealStates());
-      }
-
-      LOG.info("Set idealState for participantLeader:" + _resourceName + ", idealState:"
-          + idealState);
-    } finally
-    {
-      if (zkClient != null && zkClient.getConnection() != null)
-
-      {
-        zkClient.close();
-      }
-    }
-
-  }
-
-  /**
-   * Stop customer code runner
-   */
-  public void stop()
-  {
-    LOG.info("Removing stateModelFactory for " + _resourceName);
-    _manager.getStateMachineEngine().removeStateModelFactory(LEADER_STANDBY, _stateModelFty,
-        _resourceName);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/HelixStateMachineEngine.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/HelixStateMachineEngine.java b/helix-core/src/main/java/com/linkedin/helix/participant/HelixStateMachineEngine.java
deleted file mode 100644
index 521580c..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/HelixStateMachineEngine.java
+++ /dev/null
@@ -1,284 +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.participant;
-
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.HelixConstants;
-import com.linkedin.helix.HelixDataAccessor;
-import com.linkedin.helix.HelixException;
-import com.linkedin.helix.HelixManager;
-import com.linkedin.helix.InstanceType;
-import com.linkedin.helix.NotificationContext;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.messaging.handling.HelixStateTransitionHandler;
-import com.linkedin.helix.messaging.handling.HelixTaskExecutor;
-import com.linkedin.helix.messaging.handling.MessageHandler;
-import com.linkedin.helix.model.CurrentState;
-import com.linkedin.helix.model.Message;
-import com.linkedin.helix.model.Message.MessageType;
-import com.linkedin.helix.model.StateModelDefinition;
-import com.linkedin.helix.participant.statemachine.StateModel;
-import com.linkedin.helix.participant.statemachine.StateModelFactory;
-import com.linkedin.helix.participant.statemachine.StateModelParser;
-
-public class HelixStateMachineEngine implements StateMachineEngine
-{
-  private static Logger logger = Logger.getLogger(HelixStateMachineEngine.class);
-
-  // StateModelName->FactoryName->StateModelFactory
-  private final Map<String, Map<String, StateModelFactory<? extends StateModel>>> _stateModelFactoryMap;
-  StateModelParser _stateModelParser;
-
-  private final HelixManager _manager;
-
-  private final ConcurrentHashMap<String, StateModelDefinition> _stateModelDefs;
-
-  public StateModelFactory<? extends StateModel> getStateModelFactory(String stateModelName)
-  {
-    return getStateModelFactory(stateModelName,
-                                HelixConstants.DEFAULT_STATE_MODEL_FACTORY);
-  }
-
-  public StateModelFactory<? extends StateModel> getStateModelFactory(String stateModelName,
-                                                                      String factoryName)
-  {
-    if (!_stateModelFactoryMap.containsKey(stateModelName))
-    {
-      return null;
-    }
-    return _stateModelFactoryMap.get(stateModelName).get(factoryName);
-  }
-
-  public HelixStateMachineEngine(HelixManager manager)
-  {
-    _stateModelParser = new StateModelParser();
-    _manager = manager;
-
-    _stateModelFactoryMap =
-        new ConcurrentHashMap<String, Map<String, StateModelFactory<? extends StateModel>>>();
-    _stateModelDefs = new ConcurrentHashMap<String, StateModelDefinition>();
-  }
-
-  @Override
-  public boolean registerStateModelFactory(String stateModelDef,
-                                           StateModelFactory<? extends StateModel> factory)
-  {
-    return registerStateModelFactory(stateModelDef,
-                                     factory,
-                                     HelixConstants.DEFAULT_STATE_MODEL_FACTORY);
-  }
-
-  @Override
-  public boolean registerStateModelFactory(String stateModelName,
-                                           StateModelFactory<? extends StateModel> factory,
-                                           String factoryName)
-  {
-    if (stateModelName == null || factory == null || factoryName == null)
-    {
-      throw new HelixException("stateModelDef|stateModelFactory|factoryName cannot be null");
-    }
-
-    logger.info("Register state model factory for state model " + stateModelName
-        + " using factory name " + factoryName + " with " + factory);
-
-    if (!_stateModelFactoryMap.containsKey(stateModelName))
-    {
-      _stateModelFactoryMap.put(stateModelName,
-                                new ConcurrentHashMap<String, StateModelFactory<? extends StateModel>>());
-    }
-
-    if (_stateModelFactoryMap.get(stateModelName).containsKey(factoryName))
-    {
-      logger.warn("stateModelFactory for " + stateModelName + " using factoryName "
-          + factoryName + " has already been registered.");
-      return false;
-    }
-
-    _stateModelFactoryMap.get(stateModelName).put(factoryName, factory);
-    sendNopMessage();
-    return true;
-  }
-
-  // TODO: duplicated code in DefaultMessagingService
-  private void sendNopMessage()
-  {
-    if (_manager.isConnected())
-    {
-      try
-      {
-        Message nopMsg = new Message(MessageType.NO_OP, UUID.randomUUID().toString());
-        nopMsg.setSrcName(_manager.getInstanceName());
-
-        HelixDataAccessor accessor = _manager.getHelixDataAccessor();
-        Builder keyBuilder = accessor.keyBuilder();
-
-        if (_manager.getInstanceType() == InstanceType.CONTROLLER
-            || _manager.getInstanceType() == InstanceType.CONTROLLER_PARTICIPANT)
-        {
-          nopMsg.setTgtName("Controller");
-          accessor.setProperty(keyBuilder.controllerMessage(nopMsg.getId()), nopMsg);
-        }
-
-        if (_manager.getInstanceType() == InstanceType.PARTICIPANT
-            || _manager.getInstanceType() == InstanceType.CONTROLLER_PARTICIPANT)
-        {
-          nopMsg.setTgtName(_manager.getInstanceName());
-          accessor.setProperty(keyBuilder.message(nopMsg.getTgtName(), nopMsg.getId()),
-                               nopMsg);
-        }
-        logger.info("Send NO_OP message to " + nopMsg.getTgtName() + ", msgId: "
-            + nopMsg.getId());
-      }
-      catch (Exception e)
-      {
-        logger.error(e);
-      }
-    }
-  }
-
-  @Override
-  public void reset()
-  {
-    for (Map<String, StateModelFactory<? extends StateModel>> ftyMap : _stateModelFactoryMap.values())
-    {
-      for (StateModelFactory<? extends StateModel> stateModelFactory : ftyMap.values())
-      {
-        Map<String, ? extends StateModel> modelMap = stateModelFactory.getStateModelMap();
-        if (modelMap == null || modelMap.isEmpty())
-        {
-          continue;
-        }
-
-        for (String resourceKey : modelMap.keySet())
-        {
-          StateModel stateModel = modelMap.get(resourceKey);
-          stateModel.reset();
-          String initialState = _stateModelParser.getInitialState(stateModel.getClass());
-          stateModel.updateState(initialState);
-          // TODO probably should update the state on ZK. Shi confirm what needs
-          // to be done here.
-        }
-      }
-    }
-  }
-
-  @Override
-  public MessageHandler createHandler(Message message, NotificationContext context)
-  {
-    String type = message.getMsgType();
-
-    if (!type.equals(MessageType.STATE_TRANSITION.toString()))
-    {
-      throw new HelixException("Unexpected msg type for message " + message.getMsgId()
-          + " type:" + message.getMsgType());
-    }
-
-    String partitionKey = message.getPartitionName();
-    String stateModelName = message.getStateModelDef();
-    String resourceName = message.getResourceName();
-    String sessionId = message.getTgtSessionId();
-    int bucketSize = message.getBucketSize();
-
-    if (stateModelName == null)
-    {
-      logger.error("message does not contain stateModelDef");
-      return null;
-    }
-
-    String factoryName = message.getStateModelFactoryName();
-    if (factoryName == null)
-    {
-      factoryName = HelixConstants.DEFAULT_STATE_MODEL_FACTORY;
-    }
-
-    StateModelFactory stateModelFactory =
-        getStateModelFactory(stateModelName, factoryName);
-    if (stateModelFactory == null)
-    {
-      logger.warn("Cannot find stateModelFactory for model:" + stateModelName
-          + " using factoryName:" + factoryName + " for resourceGroup:" + resourceName);
-      return null;
-    }
-
-    // check if the state model definition exists and cache it
-    if (!_stateModelDefs.containsKey(stateModelName))
-    {
-      HelixDataAccessor accessor = _manager.getHelixDataAccessor();
-      Builder keyBuilder = accessor.keyBuilder();
-      StateModelDefinition stateModelDef =
-          accessor.getProperty(keyBuilder.stateModelDef(stateModelName));
-      if (stateModelDef == null)
-      {
-        throw new HelixException("stateModelDef for " + stateModelName
-            + " does NOT exists");
-      }
-      _stateModelDefs.put(stateModelName, stateModelDef);
-    }
-
-    // create currentStateDelta for this partition
-    String initState = _stateModelDefs.get(message.getStateModelDef()).getInitialState();
-    StateModel stateModel = stateModelFactory.getStateModel(partitionKey);
-    if (stateModel == null)
-    {
-      stateModelFactory.createAndAddStateModel(partitionKey);
-      stateModel = stateModelFactory.getStateModel(partitionKey);
-      stateModel.updateState(initState);
-    }
-
-    CurrentState currentStateDelta = new CurrentState(resourceName);
-    currentStateDelta.setSessionId(sessionId);
-    currentStateDelta.setStateModelDefRef(stateModelName);
-    currentStateDelta.setStateModelFactoryName(factoryName);
-    currentStateDelta.setBucketSize(bucketSize);
-
-    currentStateDelta.setState(partitionKey, (stateModel.getCurrentState() == null)
-        ? initState : stateModel.getCurrentState());
-
-    HelixTaskExecutor executor = (HelixTaskExecutor) context.get(NotificationContext.TASK_EXECUTOR_KEY);
-    
-    return new HelixStateTransitionHandler(stateModel,
-                                           message,
-                                           context,
-                                           currentStateDelta,
-                                           executor);
-  }
-
-  @Override
-  public String getMessageType()
-  {
-    return MessageType.STATE_TRANSITION.toString();
-  }
-
-  @Override
-  public boolean removeStateModelFactory(String stateModelDef,
-                                         StateModelFactory<? extends StateModel> factory)
-  {
-    throw new UnsupportedOperationException("Remove not yet supported");
-  }
-
-  @Override
-  public boolean removeStateModelFactory(String stateModelDef,
-                                         StateModelFactory<? extends StateModel> factory,
-                                         String factoryName)
-  {
-    throw new UnsupportedOperationException("Remove not yet supported");
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/StateMachineEngine.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/StateMachineEngine.java b/helix-core/src/main/java/com/linkedin/helix/participant/StateMachineEngine.java
deleted file mode 100644
index c17a41b..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/StateMachineEngine.java
+++ /dev/null
@@ -1,67 +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.participant;
-
-import com.linkedin.helix.messaging.handling.MessageHandlerFactory;
-import com.linkedin.helix.participant.statemachine.StateModel;
-import com.linkedin.helix.participant.statemachine.StateModelFactory;
-
-/**
- * Helix participant manager uses this class to register/remove state model factory
- * State model factory creates state model that handles state transition messages
- */
-public interface StateMachineEngine extends MessageHandlerFactory
-{
-  /**
-   * Register a default state model factory for a state model definition
-   * A state model definition could be, for example: 
-   * "MasterSlave", "OnlineOffline", "LeaderStandby", etc.
-   * @param stateModelDef
-   * @param factory
-   * @return
-   */
-  public boolean registerStateModelFactory(String stateModelDef,
-      StateModelFactory<? extends StateModel> factory);
-
-  /**
-   * Register a state model factory with a name for a state model definition
-   * @param stateModelDef
-   * @param factory
-   * @param factoryName
-   * @return
-   */
-  public boolean registerStateModelFactory(String stateModelDef,
-      StateModelFactory<? extends StateModel> factory, String factoryName);
-
-  /**
-   * Remove the default state model factory for a state model definition
-   * @param stateModelDef
-   * @param factory
-   * @return
-   */
-  public boolean removeStateModelFactory(String stateModelDef,
-      StateModelFactory<? extends StateModel> factory);
-
-  /**
-   * Remove the state model factory with a name for a state model definition
-   * @param stateModelDef
-   * @param factory
-   * @param factoryName
-   * @return
-   */
-  public boolean removeStateModelFactory(String stateModelDef,
-      StateModelFactory<? extends StateModel> factory, String factoryName);
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/package-info.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/package-info.java b/helix-core/src/main/java/com/linkedin/helix/participant/package-info.java
deleted file mode 100644
index 7412816..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Helix implementation of participant classes 
- * 
- */
-package com.linkedin.helix.participant;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModel.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModel.java b/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModel.java
deleted file mode 100644
index 44fd13b..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModel.java
+++ /dev/null
@@ -1,75 +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.participant.statemachine;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.NotificationContext;
-import com.linkedin.helix.model.Message;
-
-public abstract class StateModel
-{
-	static final String DEFAULT_INITIAL_STATE = "OFFLINE";
-	Logger logger = Logger.getLogger(StateModel.class);
-	
-	// TODO Get default state from implementation or from state model annotation
-	// StateModel with initial state other than OFFLINE should override this field
-	protected String _currentState = DEFAULT_INITIAL_STATE;
-
-	public String getCurrentState()
-	{
-		return _currentState;
-	}
-
-	// @transition(from='from', to='to')
-	public void defaultTransitionHandler()
-	{
-		logger
-		    .error("Default default handler. The idea is to invoke this if no transition method is found. Yet to be implemented");
-	}
-
-	public boolean updateState(String newState)
-	{
-		_currentState = newState;
-		return true;
-	}
-
-	/**
-	 * Called when error occurs in state transition
-	 * 
-	 * TODO:enforce subclass to write this
-	 * @param message
-	 * @param context
-	 * @param error
-	 */
-	public void rollbackOnError(Message message, NotificationContext context,
-	    StateTransitionError error)
-	{
-
-		logger.error("Default rollback method invoked on error. Error Code:"
-		    + error.getCode());
-
-	}
-
-	/**
-	 * Called when the state model is reset
-	 */
-	public void reset()
-	{
-    logger.warn("Default reset method invoked. Either because the process longer own this resource or session timedout");
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelFactory.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelFactory.java b/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelFactory.java
deleted file mode 100644
index c640eec..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelFactory.java
+++ /dev/null
@@ -1,75 +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.participant.statemachine;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-public abstract class StateModelFactory<T extends StateModel>
-{
-  private ConcurrentMap<String, T> _stateModelMap = new ConcurrentHashMap<String, T>();
-
-  /**
-   * This method will be invoked only once per partitionName per session
-   * 
-   * @param partitionName
-   * @return
-   */
-  public abstract T createNewStateModel(String partitionName);
-
-  /**
-   * Add a state model for a partition
-   * 
-   * @param partitionName
-   * @return
-   */
-  public void addStateModel(String partitionName, T stateModel)
-  {
-    _stateModelMap.put(partitionName, stateModel);
-  }
-  
-  /**
-   * Create a state model for a partition
-   * 
-   * @param partitionName
-   */
-  public void createAndAddStateModel(String partitionName)
-  {
-    _stateModelMap.put(partitionName, createNewStateModel(partitionName));
-  }
-
-  /**
-   * Get the state model for a partition
-   * 
-   * @param partitionName
-   * @return
-   */
-  public T getStateModel(String partitionName)
-  {
-    return _stateModelMap.get(partitionName);
-  }
-
-  /**
-   * Get the state model map
-   * 
-   * @return
-   */
-  public Map<String, T> getStateModelMap()
-  {
-    return _stateModelMap;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelInfo.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelInfo.java b/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelInfo.java
deleted file mode 100644
index 05038c7..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelInfo.java
+++ /dev/null
@@ -1,28 +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.participant.statemachine;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Retention(RetentionPolicy.RUNTIME)
-public @interface StateModelInfo
-{
-  String[] states();
-
-  String initialState();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelParser.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelParser.java b/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelParser.java
deleted file mode 100644
index f4f2a32..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateModelParser.java
+++ /dev/null
@@ -1,148 +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.participant.statemachine;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-
-import com.linkedin.helix.NotificationContext;
-import com.linkedin.helix.model.Message;
-
-/**
- * Finds the method in stateModel to generate
- * 
- * @author kgopalak
- * 
- */
-public class StateModelParser
-{
-
-	public Method getMethodForTransition(Class<? extends StateModel> clazz,
-	    String fromState, String toState, Class<?>[] paramTypes)
-	{
-		Method method = getMethodForTransitionUsingAnnotation(clazz, fromState,
-		    toState, paramTypes);
-		if (method == null)
-		{
-			method = getMethodForTransitionByConvention(clazz, fromState, toState,
-			    paramTypes);
-		}
-		return method;
-	}
-
-	/**
-	 * This class uses the method naming convention "onBecome" + toState + "From"
-	 * + fromState;
-	 * 
-	 * @param clazz
-	 * @param fromState
-	 * @param toState
-	 * @param paramTypes
-	 * @return Method if found else null
-	 */
-	public Method getMethodForTransitionByConvention(
-	    Class<? extends StateModel> clazz, String fromState, String toState,
-	    Class<?>[] paramTypes)
-	{
-		Method methodToInvoke = null;
-		String methodName = "onBecome" + toState + "From" + fromState;
-		if (fromState.equals("*"))
-		{
-			methodName = "onBecome" + toState;
-		}
-
-		Method[] methods = clazz.getMethods();
-		for (Method method : methods)
-		{
-			if (method.getName().equalsIgnoreCase(methodName))
-			{
-				Class<?>[] parameterTypes = method.getParameterTypes();
-				if (parameterTypes.length == 2
-				    && parameterTypes[0].equals(Message.class)
-				    && parameterTypes[1].equals(NotificationContext.class))
-				{
-					methodToInvoke = method;
-					break;
-				}
-			}
-		}
-		return methodToInvoke;
-
-	}
-
-	/**
-	 * This method uses annotations on the StateModel class. Use StateModelInfo
-	 * annotation to specify valid states and initial value use Transition to
-	 * specify "to" and "from" state
-	 * 
-	 * @param clazz
-	 *          , class which extends StateModel
-	 * @param fromState
-	 * @param toState
-	 * @param paramTypes
-	 * @return
-	 */
-	public Method getMethodForTransitionUsingAnnotation(
-	    Class<? extends StateModel> clazz, String fromState, String toState,
-	    Class<?>[] paramTypes)
-	{
-		StateModelInfo stateModelInfo = clazz.getAnnotation(StateModelInfo.class);
-		Method methodToInvoke = null;
-		if (stateModelInfo != null)
-		{
-			Method[] methods = clazz.getMethods();
-			if (methods != null)
-			{
-				for (Method method : methods)
-				{
-					Transition annotation = method.getAnnotation(Transition.class);
-					if (annotation != null)
-					{
-						boolean matchesFrom = annotation.from().equalsIgnoreCase(fromState);
-						boolean matchesTo = annotation.to().equalsIgnoreCase(toState);
-						boolean matchesParamTypes = Arrays.equals(paramTypes,
-						    method.getParameterTypes());
-						if (matchesFrom && matchesTo && matchesParamTypes)
-						{
-							methodToInvoke = method;
-							break;
-						}
-					}
-				}
-			}
-		}
-
-		return methodToInvoke;
-	}
-
-	/**
-	 * Get the intial state for the state model
-	 * 
-	 * @param clazz
-	 * @return
-	 */
-	public String getInitialState(Class<? extends StateModel> clazz)
-	{
-		StateModelInfo stateModelInfo = clazz.getAnnotation(StateModelInfo.class);
-		if (stateModelInfo != null)
-		{
-			return stateModelInfo.initialState();
-		}else{
-			return StateModel.DEFAULT_INITIAL_STATE;
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateTransitionError.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateTransitionError.java b/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateTransitionError.java
deleted file mode 100644
index 60bd8cd..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/StateTransitionError.java
+++ /dev/null
@@ -1,43 +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.participant.statemachine;
-
-import com.linkedin.helix.messaging.handling.MessageHandler.ErrorCode;
-import com.linkedin.helix.messaging.handling.MessageHandler.ErrorType;
-
-public class StateTransitionError
-{
-  private final Exception _exception;
-  private final ErrorCode _code;
-  private final ErrorType _type;
-
-  public StateTransitionError(ErrorType type, ErrorCode code, Exception e)
-  {
-    _type = type;
-    _code = code;
-    _exception = e;
-  }
-
-  public Exception getException()
-  {
-    return _exception;
-  }
-
-  public ErrorCode getCode()
-  {
-    return _code;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/Transition.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/Transition.java b/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/Transition.java
deleted file mode 100644
index 949c5ea..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/Transition.java
+++ /dev/null
@@ -1,28 +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.participant.statemachine;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Transition
-{
-  String from();
-
-  String to();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/package-info.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/package-info.java b/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/package-info.java
deleted file mode 100644
index 3cfb9be..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/participant/statemachine/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Helix state model definitions for participant
- * 
- */
-package com.linkedin.helix.participant.statemachine;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/spectator/RoutingTableProvider.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/spectator/RoutingTableProvider.java b/helix-core/src/main/java/com/linkedin/helix/spectator/RoutingTableProvider.java
deleted file mode 100644
index 021bbf5..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/spectator/RoutingTableProvider.java
+++ /dev/null
@@ -1,301 +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.spectator;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.ConfigChangeListener;
-import com.linkedin.helix.ExternalViewChangeListener;
-import com.linkedin.helix.HelixDataAccessor;
-import com.linkedin.helix.NotificationContext;
-import com.linkedin.helix.PropertyKey.Builder;
-import com.linkedin.helix.model.ExternalView;
-import com.linkedin.helix.model.InstanceConfig;
-
-public class RoutingTableProvider implements ExternalViewChangeListener, ConfigChangeListener
-{
-  private static final Logger logger = Logger.getLogger(RoutingTableProvider.class);
-  private final AtomicReference<RoutingTable> _routingTableRef;
-
-  public RoutingTableProvider()
-  {
-    _routingTableRef = new AtomicReference<RoutingTableProvider.RoutingTable>(new RoutingTable());
-
-  }
-
-  /**
-   * returns the instances for {resource,partition} pair that are in a specific
-   * {state}
-   * 
-   * @param resourceName
-   *          -
-   * @param partitionName
-   * @param state
-   * @return empty list if there is no instance in a given state
-   */
-  public List<InstanceConfig> getInstances(String resourceName, String partitionName, String state)
-  {
-    List<InstanceConfig> instanceList = null;
-    RoutingTable _routingTable = _routingTableRef.get();
-    ResourceInfo resourceInfo = _routingTable.get(resourceName);
-    if (resourceInfo != null)
-    {
-      PartitionInfo keyInfo = resourceInfo.get(partitionName);
-      if (keyInfo != null)
-      {
-        instanceList = keyInfo.get(state);
-      }
-    }
-    if (instanceList == null)
-    {
-      instanceList = Collections.emptyList();
-    }
-    return instanceList;
-  }
-
-  /**
-   * returns all instances for {resource} that are in a specific {state}
-   * 
-   * @param resource
-   * @param state
-   * @return empty list if there is no instance in a given state
-   */
-  public Set<InstanceConfig> getInstances(String resource, String state)
-  {
-    Set<InstanceConfig> instanceSet = null;
-    RoutingTable routingTable = _routingTableRef.get();
-    ResourceInfo resourceInfo = routingTable.get(resource);
-    if (resourceInfo != null)
-    {
-      instanceSet = resourceInfo.getInstances(state);
-    }
-    if (instanceSet == null)
-    {
-      instanceSet = Collections.emptySet();
-    }
-    return instanceSet;
-  }
-
-  @Override
-  public void onExternalViewChange(List<ExternalView> externalViewList,
-      NotificationContext changeContext)
-  {
-    // session has expired clean up the routing table
-    if (changeContext.getType() == NotificationContext.Type.FINALIZE)
-    {
-      logger.info("Resetting the routing table. ");
-      RoutingTable newRoutingTable = new RoutingTable();
-      _routingTableRef.set(newRoutingTable);
-      return;
-    }
-    refresh(externalViewList, changeContext);
-  }
-
-  @Override
-  public void onConfigChange(List<InstanceConfig> configs,
-                             NotificationContext changeContext)
-  {
-    // session has expired clean up the routing table
-    if (changeContext.getType() == NotificationContext.Type.FINALIZE)
-    {
-      logger.info("Resetting the routing table. ");
-      RoutingTable newRoutingTable = new RoutingTable();
-      _routingTableRef.set(newRoutingTable);
-      return;
-    }
-    
-    HelixDataAccessor accessor = changeContext.getManager().getHelixDataAccessor();
-    Builder keyBuilder = accessor.keyBuilder();
-    List<ExternalView> externalViewList = accessor.getChildValues(keyBuilder.externalViews());
-    refresh(externalViewList, changeContext);    
-  }
-  
-  private void refresh(List<ExternalView> externalViewList, NotificationContext changeContext)
-  {
-    HelixDataAccessor accessor = changeContext.getManager().getHelixDataAccessor();
-    Builder keyBuilder = accessor.keyBuilder();
-    
-    List<InstanceConfig> configList = accessor.getChildValues(keyBuilder.instanceConfigs());
-    Map<String, InstanceConfig> instanceConfigMap = new HashMap<String, InstanceConfig>();
-    for (InstanceConfig config : configList)
-    {
-      instanceConfigMap.put(config.getId(), config);
-    }
-    RoutingTable newRoutingTable = new RoutingTable();
-    if (externalViewList != null)
-    {
-      for (ExternalView extView : externalViewList)
-      {
-        String resourceName = extView.getId();
-        for (String partitionName : extView.getPartitionSet())
-        {
-          Map<String, String> stateMap = extView.getStateMap(partitionName);
-          for (String instanceName : stateMap.keySet())
-          {
-            String currentState = stateMap.get(instanceName);
-            if (instanceConfigMap.containsKey(instanceName))
-            {
-              InstanceConfig instanceConfig = instanceConfigMap.get(instanceName);
-              newRoutingTable.addEntry(resourceName, partitionName, currentState, instanceConfig);
-            } else
-            {
-              logger.error("Invalid instance name." + instanceName
-                  + " .Not found in /cluster/configs/. instanceName: ");
-            }
-
-          }
-        }
-      }
-    }
-    _routingTableRef.set(newRoutingTable);
-  }
-
-  class RoutingTable
-  {
-    private final HashMap<String, ResourceInfo> resourceInfoMap;
-
-    public RoutingTable()
-    {
-      resourceInfoMap = new HashMap<String, RoutingTableProvider.ResourceInfo>();
-    }
-
-    public void addEntry(String resourceName, String partitionName, String state,
-        InstanceConfig config)
-    {
-      if (!resourceInfoMap.containsKey(resourceName))
-      {
-        resourceInfoMap.put(resourceName, new ResourceInfo());
-      }
-      ResourceInfo resourceInfo = resourceInfoMap.get(resourceName);
-      resourceInfo.addEntry(partitionName, state, config);
-
-    }
-
-    ResourceInfo get(String resourceName)
-    {
-      return resourceInfoMap.get(resourceName);
-    }
-
-  }
-
-  class ResourceInfo
-  {
-    // store PartitionInfo for each partition
-    HashMap<String, PartitionInfo> partitionInfoMap;
-    // stores the Set of Instances in a given state
-    HashMap<String, Set<InstanceConfig>> stateInfoMap;
-
-    public ResourceInfo()
-    {
-      partitionInfoMap = new HashMap<String, RoutingTableProvider.PartitionInfo>();
-      stateInfoMap = new HashMap<String, Set<InstanceConfig>>();
-    }
-
-    public void addEntry(String stateUnitKey, String state, InstanceConfig config)
-    {
-      // add
-      if (!stateInfoMap.containsKey(state))
-      {
-        Comparator<InstanceConfig> comparator = new Comparator<InstanceConfig>() {
-
-          @Override
-          public int compare(InstanceConfig o1, InstanceConfig o2)
-          {
-            if (o1 == o2)
-            {
-              return 0;
-            }
-            if (o1 == null)
-            {
-              return -1;
-            }
-            if (o2 == null)
-            {
-              return 1;
-            }
-
-            int compareTo = o1.getHostName().compareTo(o2.getHostName());
-            if (compareTo == 0)
-            {
-              return o1.getPort().compareTo(o2.getPort());
-            } else
-            {
-              return compareTo;
-            }
-
-          }
-        };
-        stateInfoMap.put(state, new TreeSet<InstanceConfig>(comparator));
-      }
-      Set<InstanceConfig> set = stateInfoMap.get(state);
-      set.add(config);
-
-      if (!partitionInfoMap.containsKey(stateUnitKey))
-      {
-        partitionInfoMap.put(stateUnitKey, new PartitionInfo());
-      }
-      PartitionInfo stateUnitKeyInfo = partitionInfoMap.get(stateUnitKey);
-      stateUnitKeyInfo.addEntry(state, config);
-
-    }
-
-    public Set<InstanceConfig> getInstances(String state)
-    {
-      Set<InstanceConfig> instanceSet = stateInfoMap.get(state);
-      return instanceSet;
-    }
-
-    PartitionInfo get(String stateUnitKey)
-    {
-      return partitionInfoMap.get(stateUnitKey);
-    }
-  }
-
-  class PartitionInfo
-  {
-    HashMap<String, List<InstanceConfig>> stateInfoMap;
-
-    public PartitionInfo()
-    {
-      stateInfoMap = new HashMap<String, List<InstanceConfig>>();
-    }
-
-    public void addEntry(String state, InstanceConfig config)
-    {
-      if (!stateInfoMap.containsKey(state))
-      {
-        stateInfoMap.put(state, new ArrayList<InstanceConfig>());
-      }
-      List<InstanceConfig> list = stateInfoMap.get(state);
-      list.add(config);
-    }
-
-    List<InstanceConfig> get(String state)
-    {
-      return stateInfoMap.get(state);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/spectator/package-info.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/spectator/package-info.java b/helix-core/src/main/java/com/linkedin/helix/spectator/package-info.java
deleted file mode 100644
index 005a0cc..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/spectator/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Helix default implementation of a cluster spectator
- * 
- */
-package com.linkedin.helix.spectator;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyListener.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyListener.java b/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyListener.java
deleted file mode 100644
index cb3e93d..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyListener.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.linkedin.helix.store;
-
-public interface HelixPropertyListener
-{
-  /**
-   * Invoked on data change
-   * 
-   * @param path
-   */
-  void onDataChange(String path);
-
-  /**
-   * Invoked on data creation
-   * 
-   * @param path
-   */
-  void onDataCreate(String path);
-
-  /**
-   * Invoked on data deletion
-   * 
-   * @param path
-   */
-  void onDataDelete(String path);
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyStore.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyStore.java b/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyStore.java
deleted file mode 100644
index 07bbdb7..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/HelixPropertyStore.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.linkedin.helix.store;
-
-import com.linkedin.helix.BaseDataAccessor;
-
-public interface HelixPropertyStore<T> extends BaseDataAccessor<T>
-{
-  /**
-   * Perform resource allocation when property store starts
-   * 
-   * Resource allocation includes: - start an internal thread for fire callbacks
-   * 
-   */
-  public void start();
-
-  /**
-   * Perform clean up when property store stops
-   * 
-   * Cleanup includes: - stop the internal thread for fire callbacks
-   * 
-   */
-  public void stop();
-
-  /**
-   * Register a listener to a parent path.
-   * 
-   * Subscribing to a parent path means any changes happening under the parent path will
-   * notify the listener
-   * 
-   * @param parentPath
-   * @param listener
-   */
-  public void subscribe(String parentPath, HelixPropertyListener listener);
-
-  /**
-   * Remove a listener from a parent path.
-   * 
-   * This will remove the listener from receiving any notifications happening under the
-   * parent path
-   * 
-   * @param parentPath
-   * @param listener
-   */
-  public void unsubscribe(String parentPath, HelixPropertyListener listener);
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertyChangeListener.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertyChangeListener.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertyChangeListener.java
deleted file mode 100644
index 172fd81..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertyChangeListener.java
+++ /dev/null
@@ -1,39 +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.store;
-
-/**
- * Callback interface on property changes
- * @param <T>
- */
-public interface PropertyChangeListener<T>
-{
-  /**
-   * Callback function when there is a change in any property that starts with key
-   * It's upto the implementation to handle the following different cases 1) key
-   * is a simple key and does not have any children. PropertyStore.getProperty(key) must
-   * be used to retrieve the value; 2) key is a prefix and has children.
-   * PropertyStore.getPropertyNames(key) must be used to retrieve all the children keys.
-   * Its important to know that PropertyStore will not be able to provide the
-   * delta[old value,new value] or which child was added/deleted. The
-   * implementation must take care of the fact that there might be callback for
-   * every child thats added/deleted. General way applications handle this is
-   * keep a local cache of keys and compare against the latest keys.
-   * 
-   * @param key
-   */
-  void onPropertyChange(String key);
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonComparator.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonComparator.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonComparator.java
deleted file mode 100644
index fd8513b..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonComparator.java
+++ /dev/null
@@ -1,65 +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.store;
-
-import java.util.Comparator;
-
-import org.apache.log4j.Logger;
-
-public class PropertyJsonComparator<T> implements Comparator<T>
-{
-  static private Logger LOG = Logger.getLogger(PropertyJsonComparator.class);
-  private final PropertyJsonSerializer<T> _serializer;
-  
-  public PropertyJsonComparator(Class<T> clazz)
-  {
-    _serializer = new PropertyJsonSerializer<T>(clazz);
-  }
-
-  @Override
-  public int compare(T arg0, T arg1)
-  {
-    if (arg0 == null && arg1 == null)
-    {
-      return 0;
-    }
-    else if (arg0 == null && arg1 != null)
-    {
-      return -1;
-    }
-    else if (arg0 != null && arg1 == null)
-    {
-      return 1;
-    }
-    else
-    {
-      try
-      {
-        String s0 = new String(_serializer.serialize(arg0));
-        String s1 = new String(_serializer.serialize(arg1));
-
-        return s0.compareTo(s1);
-      }
-      catch (PropertyStoreException e)
-      {
-        // e.printStackTrace();
-        LOG.warn(e.getMessage());
-        return -1;
-      }
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonSerializer.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonSerializer.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonSerializer.java
deleted file mode 100644
index f4385b3..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertyJsonSerializer.java
+++ /dev/null
@@ -1,95 +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.store;
-
-import java.io.ByteArrayInputStream;
-import java.io.StringWriter;
-
-import org.apache.log4j.Logger;
-import org.codehaus.jackson.map.DeserializationConfig;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-
-import com.linkedin.helix.HelixException;
-import com.linkedin.helix.ZNRecord;
-
-public class PropertyJsonSerializer<T> implements PropertySerializer<T>
-{
-  static private Logger LOG = Logger.getLogger(PropertyJsonSerializer.class);
-  private final Class<T> _clazz;
-
-  public PropertyJsonSerializer(Class<T> clazz)
-  {
-    _clazz = clazz;
-  }
-
-  @Override
-  public byte[] serialize(T data) throws PropertyStoreException
-  {
-    ObjectMapper mapper = new ObjectMapper();
-
-    SerializationConfig serializationConfig = mapper.getSerializationConfig();
-    serializationConfig.set(SerializationConfig.Feature.INDENT_OUTPUT, true);
-    serializationConfig.set(SerializationConfig.Feature.AUTO_DETECT_FIELDS, true);
-    serializationConfig.set(SerializationConfig.Feature.CAN_OVERRIDE_ACCESS_MODIFIERS,
-                            true);
-    StringWriter sw = new StringWriter();
-
-    try
-    {
-      mapper.writeValue(sw, data);
-
-      if (sw.toString().getBytes().length > ZNRecord.SIZE_LIMIT)
-      {
-        throw new HelixException("Data size larger than 1M. Write empty string to zk.");
-      }
-      return sw.toString().getBytes();
-
-    }
-    catch (Exception e)
-    {
-      LOG.error("Error during serialization of data (first 1k): "
-          + sw.toString().substring(0, 1024), e);
-    }
-
-    return new byte[] {};
-  }
-
-  @Override
-  public T deserialize(byte[] bytes) throws PropertyStoreException
-  {
-    ObjectMapper mapper = new ObjectMapper();
-    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
-
-    DeserializationConfig deserializationConfig = mapper.getDeserializationConfig();
-    deserializationConfig.set(DeserializationConfig.Feature.AUTO_DETECT_FIELDS, true);
-    deserializationConfig.set(DeserializationConfig.Feature.AUTO_DETECT_SETTERS, true);
-    deserializationConfig.set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
-                              true);
-    try
-    {
-      T value = mapper.readValue(bais, _clazz);
-      return value;
-    }
-    catch (Exception e)
-    {
-      LOG.error("Error during deserialization of bytes: " + new String(bytes), e);
-    }
-
-    return null;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertySerializer.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertySerializer.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertySerializer.java
deleted file mode 100644
index cf8b057..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertySerializer.java
+++ /dev/null
@@ -1,40 +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.store;
-
-/**
- * Serializer interface for property store 
- * @param <T>
- */
-    
-public interface PropertySerializer<T>
-{
-  /**
-   * Serialize data object of type T to byte array
-   * @param data
-   * @return
-   * @throws PropertyStoreException
-   */
-  public byte[] serialize(T data) throws PropertyStoreException;
-
-  /**
-   * Deserialize byte array to data object of type T
-   * @param bytes
-   * @return
-   * @throws PropertyStoreException
-   */
-  public T deserialize(byte[] bytes) throws PropertyStoreException;
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertyStat.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStat.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertyStat.java
deleted file mode 100644
index 2193def..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStat.java
+++ /dev/null
@@ -1,55 +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.store;
-
-public class PropertyStat
-{
-  private long _lastModifiedTime; // time in milliseconds from epoch when this property
-                                  // was last modified
-  private int _version; // latest version number
-
-  public PropertyStat()
-  {
-    this(0, 0);
-  }
-
-  public PropertyStat(long lastModifiedTime, int version)
-  {
-    _lastModifiedTime = lastModifiedTime;
-    _version = version;
-  }
-
-  public long getLastModifiedTime()
-  {
-    return _lastModifiedTime;
-  }
-
-  public int getVersion()
-  {
-    return _version;
-  }
-
-  public void setLastModifiedTime(long lastModifiedTime)
-  {
-
-    _lastModifiedTime = lastModifiedTime;
-  }
-
-  public void setVersion(int version)
-  {
-    _version = version;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertyStore.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStore.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertyStore.java
deleted file mode 100644
index 0797818..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStore.java
+++ /dev/null
@@ -1,212 +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.store;
-
-import java.util.Comparator;
-import java.util.List;
-
-import org.I0Itec.zkclient.DataUpdater;
-
-/**
- * This property store is similar to a key value store but supports hierarchical
- * structure. It also provides notifications when there is a change in child or
- * parent. Data can be stored child only. Property name cannot end with a "/". 
- * Only the root "/" is an exception. 
- * Property key name is split based on delimiter "/".
- * Suppose we do setProperty("/foo/bar1",val1) and setProperty("/foo/bar2",val2)
- * getProperty("/foo) will return null since no data is stored at /foo
- * getPropertyNames("/foo") will return "bar1" and "bar2" 
- * removeProperty("/foo/bar1") will simply remove the property stored at /foo/bar1
- * 
- * @author kgopalak
- * @param <T>
- */
-public interface PropertyStore<T>
-{
-  /**
-   * Set property on key. Override if the property already exists
-   * @param key
-   * @param value
-   * @throws PropertyStoreException
-   */
-  void setProperty(String key, T value) throws PropertyStoreException;
-
-  /**
-   * Get the property on key
-   * @param key
-   * @return value of the property
-   * @throws PropertyStoreException
-   */
-  T getProperty(String key) throws PropertyStoreException;
-  
-  /**
-   * Get the property and its statistics information
-   * @param key
-   * @param stat
-   * @return value of the property
-   * @throws PropertyStoreException
-   */
-  T getProperty(String key, PropertyStat propertyStat) throws PropertyStoreException;
-
-  /**
-   * Removes the property on key
-   * @param key
-   * @throws PropertyStoreException
-   */
-  void removeProperty(String key) throws PropertyStoreException;
-
-  /**
-   * Get all the child property keys under prefix
-   * @param prefix
-   * @return
-   * @throws PropertyStoreException
-   */
-  List<String> getPropertyNames(String prefix) throws PropertyStoreException;
-
-  /**
-   * Delimiter to split the propertyName
-   * @param delimiter
-   * @throws PropertyStoreException
-   */
-  void setPropertyDelimiter(String delimiter) throws PropertyStoreException;
-
-  /**
-   * Subscribe for changes in the property property. Key can be a prefix,
-   * Multiple callbacks can be invoked. One callback per change is not guaranteed.
-   * Some changes might be missed. That's why one has to read the data on every
-   * callback.
-   * @param prefix
-   * @param listener
-   * @throws PropertyStoreException
-   */
-  void subscribeForPropertyChange(String prefix,
-      PropertyChangeListener<T> listener) throws PropertyStoreException;
-
-  /**
-   * Removes the subscription for the prefix
-   * @param prefix
-   * @param listener
-   * @throws PropertyStoreException
-   */
-  void unsubscribeForPropertyChange(String prefix,
-      PropertyChangeListener<T> listener) throws PropertyStoreException;
-
-  /**
-   * Indicates if the implementation supports the feature of storing data in
-   * parent
-   * @return
-   */
-  boolean canParentStoreData();
-
-  /**
-   * Set property serializer
-   * @param serializer
-   */
-  void setPropertySerializer(PropertySerializer<T> serializer);
-
-  /**
-   * create a sub namespace in the property store
-   * @return root property path
-   */ 
-  public void createPropertyNamespace(String prefix) throws PropertyStoreException;
-    
-  /**
-   * Get the root namespace of the property store
-   * @return root property path
-   */ 
-  public String getPropertyRootNamespace();
-  
-  /**
-   * Atomically update property until succeed, updater updates old value to new value
-   * Will create key if doesn't exist
-   * @param key
-   * @param updater
-   */
-  public void updatePropertyUntilSucceed(String key, DataUpdater<T> updater) 
-    throws PropertyStoreException;
-  
-  /**
-   * Atomically update property until succeed, updater updates old value to new value
-   * If createIfAbsent is true, will create key if doesn't exist
-   * If createIfAbsent is false, will not create key and throw exception
-   * @param key
-   * @param updater
-   * @param createIfAbsent
-   * @throws PropertyStoreException
-   */
-  public void updatePropertyUntilSucceed(String key, DataUpdater<T> updater, boolean createIfAbsent) 
-    throws PropertyStoreException;
-  
-  /**
-   * Check if a property exists
-   * @param key
-   * @return
-   */
-  public boolean exists(String key);
-  
-  /**
-   * Remove a parent and all its descendants
-   * @param prefix
-   * @throws PropertyStoreException
-   */
-  public void removeNamespace(String prefix) throws PropertyStoreException;
-  
-  /**
-   * Update property return true if succeed, false otherwise
-   * @param key
-   * @param updater
-   */
-  // public boolean updateProperty(String key, DataUpdater<T> updater);
-  
-  /**
-   * Atomically compare and set property
-   * Return true if succeed, false otherwise
-   * Create if doesn't exist
-   * @param key
-   * @param expected value
-   * @param updated value
-   * @param comparator
-   * @param create if absent
-   */
-  public boolean compareAndSet(String key, T expected, T update, Comparator<T> comparator);
-  
-  /**
-   * Atomically compare and set property
-   * Return true if succeed, false otherwise
-   * If createIfAbsent is true, create key if doesn't exist
-   * If createIfAbsent is false, will not create key and throw exception
-   * @param key
-   * @param expected
-   * @param update
-   * @param comparator
-   * @param createIfAbsent
-   * @return
-   */
-  public boolean compareAndSet(String key, T expected, T update, Comparator<T> comparator, boolean createIfAbsent);
-
-  /**
-   * Start property store
-   * @return
-   */
-  public boolean start();
-
-  /**
-   * Stop property store and do clean up
-   * @return true
-   */
-  public boolean stop();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreException.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreException.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreException.java
deleted file mode 100644
index 1fccb8e..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreException.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.store;
-
-/**
- * This exception class can be used to indicate any exception during operation
- * on the propertystore
- * 
- * @author kgopalak
- * 
- */
-public class PropertyStoreException extends Exception
-{
-  public PropertyStoreException(String msg)
-  {
-    super(msg);
-  }
-
-  public PropertyStoreException()
-  {
-    super();
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-helix/blob/3cb7a1c9/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreFactory.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreFactory.java b/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreFactory.java
deleted file mode 100644
index 73e75d6..0000000
--- a/helix-core/src/main/java/com/linkedin/helix/store/PropertyStoreFactory.java
+++ /dev/null
@@ -1,63 +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.store;
-
-import org.apache.log4j.Logger;
-
-import com.linkedin.helix.manager.zk.ByteArraySerializer;
-import com.linkedin.helix.manager.zk.ZkClient;
-import com.linkedin.helix.store.file.FilePropertyStore;
-import com.linkedin.helix.store.zk.ZKPropertyStore;
-
-public class PropertyStoreFactory
-{
-  private static Logger LOG = Logger.getLogger(PropertyStoreFactory.class);
-
-  public static <T extends Object> PropertyStore<T> getZKPropertyStore(String zkAddress,
-                                                                       PropertySerializer<T> serializer,
-                                                                       String rootNamespace)
-  {
-    if (zkAddress == null || serializer == null || rootNamespace == null)
-    {
-      throw new IllegalArgumentException("zkAddress|serializer|rootNamespace can't be null");
-    }
-
-    LOG.info("Get a zk property store. zkAddr: " + zkAddress + ", root: " + rootNamespace);
-    ZkClient zkClient =
-        new ZkClient(zkAddress,
-                     ZkClient.DEFAULT_SESSION_TIMEOUT,
-                     ZkClient.DEFAULT_CONNECTION_TIMEOUT,
-                     new ByteArraySerializer());
-    return new ZKPropertyStore<T>(zkClient, serializer, rootNamespace);
-  }
-
-  public static <T extends Object> PropertyStore<T> getFilePropertyStore(PropertySerializer<T> serializer,
-                                                                         String rootNamespace,
-                                                                         PropertyJsonComparator<T> comparator)
-  {
-    if (comparator == null || serializer == null || rootNamespace == null)
-    {
-      throw new IllegalArgumentException("arguments can't be null");
-    }
-
-    LOG.info("Get a file property store. root: " + rootNamespace);
-    FilePropertyStore<T> store =
-        new FilePropertyStore<T>(serializer, rootNamespace, comparator);
-    return store;
-
-  }
-
-}