[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 <[email protected]>
Authored: Fri Oct 26 19:03:47 2018 -0700
Committer: Hunter Lee <[email protected]>
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
+}

Reply via email to