SharedRefPtr<Host> LatencyAwarePolicy::LatencyAwareQueryPlan::compute_next() { int64_t min = policy_->min_average_.load(); const Settings& settings = policy_->settings_; uint64_t now = uv_hrtime(); SharedRefPtr<Host> host; while ((host = child_plan_->compute_next())) { TimestampedAverage latency = host->get_current_average(); if (min < 0 || latency.average < 0 || latency.num_measured < settings.min_measured || (now - latency.timestamp) > settings.retry_period_ns) { return host; } if (latency.average <= static_cast<int64_t>(settings.exclusion_threshold * min)) { return host; } skipped_.push_back(host); } if (skipped_index_ < skipped_.size()) { return skipped_[skipped_index_++]; } return SharedRefPtr<Host>(); }