@@ -178,6 +178,9 @@ private static ThreadFactory threadFactory(String nameFormat) {
178178 @ Override
179179 public void init (Cluster cluster , Collection <Host > hosts ) {
180180 childPolicy .init (cluster , hosts );
181+ for (Host host : hosts ) {
182+ latencyTracker .addHost (host );
183+ }
181184 cluster .register (latencyTracker );
182185 metrics = cluster .getMetrics ();
183186 if (metrics != null ) {
@@ -303,6 +306,7 @@ public Snapshot getScoresSnapshot() {
303306 @ Override
304307 public void onUp (Host host ) {
305308 childPolicy .onUp (host );
309+ latencyTracker .addHost (host );
306310 }
307311
308312 @ Override
@@ -314,6 +318,7 @@ public void onDown(Host host) {
314318 @ Override
315319 public void onAdd (Host host ) {
316320 childPolicy .onAdd (host );
321+ latencyTracker .addHost (host );
317322 }
318323
319324 @ Override
@@ -423,34 +428,15 @@ private class Tracker implements LatencyTracker {
423428
424429 @ Override
425430 public void update (final Host host , Statement statement , Exception exception , long newLatencyNanos ) {
426- if (shouldConsiderNewLatency (statement , exception )) {
427- HostLatencyTracker hostTracker = latencies .get (host );
428- if (hostTracker == null ) {
429- hostTracker = new HostLatencyTracker (scale , (30L * minMeasure ) / 100L );
430- HostLatencyTracker old = latencies .putIfAbsent (host , hostTracker );
431- if (old != null ) {
432- hostTracker = old ;
433- } else if (hostMetricsEnabled ()) {
434- String metricName = MetricsUtil .hostMetricName ("LatencyAwarePolicy.latencies." , host );
435- if (!metrics .getRegistry ().getNames ().contains (metricName )) {
436- logger .info ("Adding gauge " + metricName );
437- metrics .getRegistry ().register (
438- metricName ,
439- new Gauge <Long >() {
440- @ Override
441- public Long getValue () {
442- TimestampedAverage latency = latencyTracker .latencyOf (host );
443- return (latency == null ) ? -1 : latency .average ;
444- }
445- });
446- }
447- }
431+ HostLatencyTracker hostTracker = latencies .get (host );
432+ if (hostTracker != null ) {
433+ if (shouldConsiderNewLatency (statement , exception )) {
434+ hostTracker .add (newLatencyNanos );
435+ } else if (hostMetricsEnabled ()) {
436+ metrics .getRegistry ()
437+ .counter (MetricsUtil .hostMetricName ("LatencyAwarePolicy.ignored-latencies." , host ))
438+ .inc ();
448439 }
449- hostTracker .add (newLatencyNanos );
450- } else if (hostMetricsEnabled ()) {
451- metrics .getRegistry ()
452- .counter (MetricsUtil .hostMetricName ("LatencyAwarePolicy.ignored-latencies." , host ))
453- .inc ();
454440 }
455441 }
456442
@@ -490,7 +476,29 @@ public Map<Host, TimestampedAverage> currentLatencies() {
490476 return map ;
491477 }
492478
479+ public void addHost (final Host host ) {
480+ logger .debug ("Adding tracker for {}" , host );
481+ HostLatencyTracker old = latencies .putIfAbsent (host ,
482+ new HostLatencyTracker (scale , (30L * minMeasure ) / 100L ));
483+ if (old == null && hostMetricsEnabled ()) {
484+ String metricName = MetricsUtil .hostMetricName ("LatencyAwarePolicy.latencies." , host );
485+ if (!metrics .getRegistry ().getNames ().contains (metricName )) {
486+ logger .debug ("Adding gauge " + metricName );
487+ metrics .getRegistry ().register (
488+ metricName ,
489+ new Gauge <Long >() {
490+ @ Override
491+ public Long getValue () {
492+ TimestampedAverage latency = latencyTracker .latencyOf (host );
493+ return (latency == null ) ? -1 : latency .average ;
494+ }
495+ });
496+ }
497+ }
498+ }
499+
493500 public void resetHost (Host host ) {
501+ logger .debug ("Removing tracker for {}" , host );
494502 latencies .remove (host );
495503 }
496504
0 commit comments