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: us...@infra.apache.org With regards, Apache Git Services