You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2018/10/29 17:50:41 UTC

[3/5] helix git commit: [HELIX-764] TASK: Fix LiveInstanceCurrentState change flag

[HELIX-764] TASK: Fix LiveInstanceCurrentState change flag

Previously, existsLiveInstanceOrCurrentStateChange was getting reset in ClusterDataCache when its getter was called. This was problematic because if there were multiple jobs or multiple workflows, whoever calls this getter would get the correct flag value, and the ensuing callers would get a false because the flag would have been reset. This RB fixes that bug by reseting the flat right in the beginning of refresh() call in ClusterDataCache, which allows all callers during that pipeline would get the same, correct value.
Changelist:
1. Change the getter so that it does not reset the flag; instead, reset the flag in the beginning of refresh()


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

Branch: refs/heads/master
Commit: d33d9efea25fe9d2bbbb9e84a4ce7614b544ef2d
Parents: e492d9f
Author: Hunter Lee <hu...@linkedin.com>
Authored: Fri Oct 26 19:03:47 2018 -0700
Committer: Hunter Lee <hu...@linkedin.com>
Committed: Fri Oct 26 19:03:47 2018 -0700

----------------------------------------------------------------------
 .../controller/stages/ClusterDataCache.java     | 22 ++++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/helix/blob/d33d9efe/helix-core/src/main/java/org/apache/helix/controller/stages/ClusterDataCache.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/controller/stages/ClusterDataCache.java b/helix-core/src/main/java/org/apache/helix/controller/stages/ClusterDataCache.java
index f960603..67b59a8 100644
--- a/helix-core/src/main/java/org/apache/helix/controller/stages/ClusterDataCache.java
+++ b/helix-core/src/main/java/org/apache/helix/controller/stages/ClusterDataCache.java
@@ -151,6 +151,9 @@ public class ClusterDataCache extends AbstractDataCache {
     long startTime = System.currentTimeMillis();
     Builder keyBuilder = accessor.keyBuilder();
 
+    // Reset the LiveInstance/CurrentState change flag
+    _existsLiveInstanceOrCurrentStateChange = false;
+
     if (_propertyDataChangedMap.get(ChangeType.IDEAL_STATE)) {
       _propertyDataChangedMap.put(ChangeType.IDEAL_STATE, false);
       clearCachedResourceAssignments();
@@ -935,14 +938,12 @@ public class ClusterDataCache extends AbstractDataCache {
   }
 
   /**
-   * Returns whether there has been LiveInstance change. Once called, it will be set to false. To be
-   * used for task-assigning.
+   * Returns whether there has been LiveInstance or CurrentState change. To be used for
+   * task-assigning in AbstractTaskDispatcher.
    * @return
    */
   public boolean getExistsLiveInstanceOrCurrentStateChange() {
-    boolean change = _existsLiveInstanceOrCurrentStateChange;
-    _existsLiveInstanceOrCurrentStateChange = false;
-    return change;
+    return _existsLiveInstanceOrCurrentStateChange;
   }
 
   private Map<String, ResourceConfig> refreshResourceConfigs(HelixDataAccessor accessor) {
@@ -960,17 +961,16 @@ public class ClusterDataCache extends AbstractDataCache {
 
     for (String resourceConfig : _resourceConfigMap.keySet()) {
       cachedKeys.add(keyBuilder.resourceConfig(resourceConfig));
-      cachedResourceConfigMap
-          .put(keyBuilder.resourceConfig(resourceConfig), _resourceConfigMap.get(resourceConfig));
+      cachedResourceConfigMap.put(keyBuilder.resourceConfig(resourceConfig),
+          _resourceConfigMap.get(resourceConfig));
     }
     cachedKeys.retainAll(currentResourceConfigKeys);
 
     Set<PropertyKey> reloadKeys = new HashSet<>(currentResourceConfigKeys);
     reloadKeys.removeAll(cachedKeys);
 
-    Map<PropertyKey, ResourceConfig> updatedMap =
-        refreshProperties(accessor, new LinkedList<>(reloadKeys), new ArrayList<>(cachedKeys),
-            cachedResourceConfigMap);
+    Map<PropertyKey, ResourceConfig> updatedMap = refreshProperties(accessor,
+        new LinkedList<>(reloadKeys), new ArrayList<>(cachedKeys), cachedResourceConfigMap);
     for (ResourceConfig resourceConfig : updatedMap.values()) {
       refreshedResourceConfigs.put(resourceConfig.getResourceName(), resourceConfig);
     }
@@ -1000,4 +1000,4 @@ public class ClusterDataCache extends AbstractDataCache {
 
     return sb.toString();
   }
-}
\ No newline at end of file
+}