HostInfo RandomHostSelector::GetHost()

in src/host_selector/random_host_selector.cc [21:41]


HostInfo RandomHostSelector::GetHost(std::vector<HostInfo> hosts, bool is_writer,
    std::unordered_map<std::string, std::string>) {

    std::vector<HostInfo> selection;
    selection.reserve(hosts.size());

    std::copy_if(hosts.begin(), hosts.end(), std::back_inserter(selection), [&is_writer](const HostInfo& host) {
        return host.IsHostUp() && (is_writer ? host.IsHostWriter() : true);
    });

    if (selection.empty()) {
        throw std::runtime_error("No available hosts found in list");
    }

    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(0, selection.size() - 1);

    int rand_idx = dis(gen);
    return selection[rand_idx];
}