You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@helix.apache.org by GitBox <gi...@apache.org> on 2019/07/29 20:55:08 UTC
[GitHub] [helix] i3wangyi commented on a change in pull request #365: Fix
RoutingTableProvider statePropagationLatency metric reporting bug
i3wangyi commented on a change in pull request #365: Fix RoutingTableProvider statePropagationLatency metric reporting bug
URL: https://github.com/apache/helix/pull/365#discussion_r308433322
##########
File path: helix-core/src/main/java/org/apache/helix/spectator/RoutingTableProvider.java
##########
@@ -558,23 +558,28 @@ protected void refresh(Map<String, Map<String, Map<String, CurrentState>>> curre
private void resetRoutingTableAndNotify(long startTime, RoutingTable newRoutingTable) {
_routingTableRef.set(newRoutingTable);
- logger.info("Refresh the RoutingTable for cluster {}, takes {} ms.",
- (_helixManager != null ? _helixManager.getClusterName() : null),
+ String clusterName = _helixManager != null ? _helixManager.getClusterName() : null;
+ logger.info("Refresh the RoutingTable for cluster {}, takes {} ms.", clusterName,
(System.currentTimeMillis() - startTime));
- notifyRoutingTableChange();
+
+ notifyRoutingTableChange(_helixManager != null ? _helixManager.getClusterName() : null);
// Update timestamp for last refresh
if (_isPeriodicRefreshEnabled) {
_lastRefreshTimestamp = System.currentTimeMillis();
}
}
- private void notifyRoutingTableChange() {
- for (Map.Entry<RoutingTableChangeListener, ListenerContext> entry : _routingTableChangeListenerMap
- .entrySet()) {
- entry.getKey().onRoutingTableChange(new RoutingTableSnapshot(_routingTableRef.get()),
- entry.getValue().getContext());
+ private void notifyRoutingTableChange(String clusterName) {
+ // This call back is called in the main event queue of RoutingTableProvider. We add log to record time spent
+ // here. Potentially, we should call this callback in a separate thread if this is a bottleneck.
+ long startTime = System.currentTimeMillis();
+ for (Map.Entry<RoutingTableChangeListener, ListenerContext> entry : _routingTableChangeListenerMap.entrySet()) {
Review comment:
Would it be clearer using
`_routingTableChangeListenerMap.entrySet().forEach((k, v) -> k.onRoutingTableChange(...));`
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services