private void handleRoutingTableChange(RoutingTableSnapshot routingTableSnapshot) {
      setRoutingTableSnapshot(routingTableSnapshot);
      if (routingTableInitLatch.getCount() == 1) {
        logger.info("Received initial notification for routing table change from helix cluster {} in dc {}",
            helixClusterName, dcName);
        routingTableInitLatch.countDown();
      } else {
        logger.info("Routing table change triggered from helix cluster {} in dc {}", helixClusterName, dcName);
      }

      // We should notify routing table change indication to different cluster map change listeners like replication
      // manager, etc.
      for (ClusterMapChangeListener listener : clusterMapChangeListeners) {
        listener.onRoutingTableChange();
      }

      helixClusterManagerMetrics.routingTableChangeTriggerCount.inc();
    }
Triggered whenever the state of replica in cluster has changed. The snapshot contains up-to-date state of all
resources(replicas) in this data center.
@param routingTableSnapshot a snapshot of routing table for this data center.
ambry-clustermap/src/main/java/com/github/ambry/clustermap/HelixClusterManager.java