[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 +}
