You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by lx...@apache.org on 2016/11/05 00:16:56 UTC
helix git commit: [HELIX-637] Populate the StateModelDefinition once
it is updated
Repository: helix
Updated Branches:
refs/heads/helix-0.6.x 08bc1efac -> f08d867cb
[HELIX-637] Populate the StateModelDefinition once it is updated
Did a check for StateModeDefinition. Will be rewrite once it is updated.
Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/f08d867c
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/f08d867c
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/f08d867c
Branch: refs/heads/helix-0.6.x
Commit: f08d867cb47650a5f9cf5e1f9bebb70745294555
Parents: 08bc1ef
Author: Junkai Xue <jx...@linkedin.com>
Authored: Mon Oct 31 11:48:17 2016 -0700
Committer: Junkai Xue <jx...@linkedin.com>
Committed: Fri Nov 4 17:16:03 2016 -0700
----------------------------------------------------------------------
.../apache/helix/manager/zk/ZKHelixManager.java | 25 ++++++++++++++++----
.../helix/model/StateModelDefinition.java | 18 ++++++++++++++
2 files changed, 39 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/helix/blob/f08d867c/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
index 8bf8a54..16b0882 100644
--- a/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
+++ b/helix-core/src/main/java/org/apache/helix/manager/zk/ZKHelixManager.java
@@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit;
import org.I0Itec.zkclient.IZkStateListener;
import org.I0Itec.zkclient.ZkConnection;
+import org.apache.helix.AccessOption;
import org.apache.helix.BaseDataAccessor;
import org.apache.helix.ClusterMessagingService;
import org.apache.helix.ConfigAccessor;
@@ -41,6 +42,7 @@ import org.apache.helix.HelixDataAccessor;
import org.apache.helix.HelixException;
import org.apache.helix.HelixManager;
import org.apache.helix.HelixManagerProperties;
+import org.apache.helix.HelixProperty;
import org.apache.helix.HelixTimerTask;
import org.apache.helix.IdealStateChangeListener;
import org.apache.helix.InstanceConfigChangeListener;
@@ -63,6 +65,7 @@ import org.apache.helix.messaging.DefaultMessagingService;
import org.apache.helix.model.BuiltInStateModelDefinitions;
import org.apache.helix.model.HelixConfigScope.ConfigScopeProperty;
import org.apache.helix.model.LiveInstance;
+import org.apache.helix.model.StateModelDefinition;
import org.apache.helix.monitoring.ZKPathDataDumpTask;
import org.apache.helix.participant.HelixStateMachineEngine;
import org.apache.helix.participant.StateMachineEngine;
@@ -458,11 +461,25 @@ public class ZKHelixManager implements HelixManager, IZkStateListener {
* Add Helix built-in state model definitions if not exist
*/
private void addBuiltInStateModelDefinitions() {
- PropertyKey.Builder keyBuilder = _dataAccessor.keyBuilder();
for (BuiltInStateModelDefinitions def : BuiltInStateModelDefinitions.values()) {
- PropertyKey key = keyBuilder.stateModelDef(def.getStateModelDefinition().getId());
- // creation succeeds only if not exist
- _dataAccessor.createProperty(key, def.getStateModelDefinition());
+ String path = String
+ .format("/%s/STATEMODELDEFS/%s", _clusterName, def.getStateModelDefinition().getId());
+
+ HelixProperty property = _dataAccessor.getProperty(new PropertyKey.Builder(_clusterName)
+ .stateModelDef(def.getStateModelDefinition().getId()));
+
+ // Set new StateModelDefinition if it is different from old one.
+ if (property != null) {
+ // StateModelDefinition need to be updated
+ if (!new StateModelDefinition(property.getRecord()).equals(def.getStateModelDefinition())) {
+ _baseDataAccessor
+ .set(path, def.getStateModelDefinition().getRecord(), AccessOption.PERSISTENT);
+ }
+ } else {
+ // StateModeDefinition does not exist
+ _baseDataAccessor
+ .create(path, def.getStateModelDefinition().getRecord(), AccessOption.PERSISTENT);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/helix/blob/f08d867c/helix-core/src/main/java/org/apache/helix/model/StateModelDefinition.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/model/StateModelDefinition.java b/helix-core/src/main/java/org/apache/helix/model/StateModelDefinition.java
index b5eb58b..fc1d021 100644
--- a/helix-core/src/main/java/org/apache/helix/model/StateModelDefinition.java
+++ b/helix-core/src/main/java/org/apache/helix/model/StateModelDefinition.java
@@ -364,4 +364,22 @@ public class StateModelDefinition extends HelixProperty {
}
+ @Override
+ public boolean equals(Object o) {
+ if (o == null) {
+ return false;
+ }
+
+ if (!(o instanceof StateModelDefinition)) {
+ return false;
+ }
+
+ StateModelDefinition stateModelDefinition = (StateModelDefinition) o;
+ return _initialState.equals(stateModelDefinition._initialState) && _statesCountMap
+ .equals(stateModelDefinition._statesCountMap) && _statesPriorityList
+ .equals(stateModelDefinition._statesPriorityList) && _stateTransitionPriorityList
+ .equals(stateModelDefinition._stateTransitionPriorityList) &&
+ _stateTransitionTable.equals(stateModelDefinition._stateTransitionTable);
+ }
+
}