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