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:42 UTC
[4/5] helix git commit: [HELIX-765] TASK: Build quota profile from
scratch every rebalance
[HELIX-765] TASK: Build quota profile from scratch every rebalance
It has been reported that instances have a full quota despite no tasks existing in their CURRENTSTATES. The cause of this is not clear, so making ClusterDataCache trigger a refresh of all AssignableInstances will ensure that there aren't situations where it looks like there has been a thread leak. Optimizations will be implemented if necessary.
Changelist:
1. Make AssignableInstanceManager build all AssignableInstances from scratch every rebalance
Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/930a4b7a
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/930a4b7a
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/930a4b7a
Branch: refs/heads/master
Commit: 930a4b7ae7eb63be0a751a593ba630ae55fb2cfb
Parents: d33d9ef
Author: Hunter Lee <hu...@linkedin.com>
Authored: Fri Oct 26 19:06:42 2018 -0700
Committer: Hunter Lee <hu...@linkedin.com>
Committed: Fri Oct 26 19:06:42 2018 -0700
----------------------------------------------------------------------
.../controller/stages/ClusterDataCache.java | 29 ++++++++++++--------
1 file changed, 17 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/helix/blob/930a4b7a/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 67b59a8..93aea4f 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
@@ -209,7 +209,6 @@ public class ClusterDataCache extends AbstractDataCache {
}
_liveInstanceMap = new HashMap<>(_liveInstanceCacheMap);
- _liveInstanceMap = new HashMap<>(_liveInstanceCacheMap);
_instanceConfigMap = new ConcurrentHashMap<>(_instanceConfigCacheMap);
_resourceConfigMap = new HashMap<>(_resourceConfigCacheMap);
@@ -230,17 +229,23 @@ public class ClusterDataCache extends AbstractDataCache {
// Refresh AssignableInstanceManager
AssignableInstanceManager assignableInstanceManager =
_taskDataCache.getAssignableInstanceManager();
- if (_existsClusterConfigChange) {
- // Update both flags since buildAssignableInstances includes updateAssignableInstances
- _existsClusterConfigChange = false;
- _existsInstanceChange = false;
- assignableInstanceManager.buildAssignableInstances(_clusterConfig, _taskDataCache,
- _liveInstanceMap, _instanceConfigMap);
- } else if (_existsInstanceChange) {
- _existsInstanceChange = false;
- assignableInstanceManager.updateAssignableInstances(_clusterConfig, _liveInstanceMap,
- _instanceConfigMap);
- }
+ // Build from scratch every time
+ assignableInstanceManager.buildAssignableInstances(_clusterConfig, _taskDataCache,
+ _liveInstanceMap, _instanceConfigMap);
+ /**
+ * TODO: Consider this for optimization after sufficient testing
+ * if (_existsClusterConfigChange) {
+ * // Update both flags since buildAssignableInstances includes updateAssignableInstances
+ * _existsClusterConfigChange = false;
+ * _existsInstanceChange = false;
+ * assignableInstanceManager.buildAssignableInstances(_clusterConfig, _taskDataCache,
+ * _liveInstanceMap, _instanceConfigMap);
+ * } else if (_existsInstanceChange) {
+ * _existsInstanceChange = false;
+ * assignableInstanceManager.updateAssignableInstances(_clusterConfig, _liveInstanceMap,
+ * _instanceConfigMap);
+ * }
+ **/
}
_instanceMessagesCache.refresh(accessor, _liveInstanceMap);