std::shared_ptr FailoverService::get_reader_host_selector()

in src/failover/failover_service.cc [138:161]


std::shared_ptr<HostSelector> FailoverService::get_reader_host_selector() const {
    ReaderHostSelectorStrategy selector_strategy = RANDOM;
    if (this->conn_info_->contains(READER_HOST_SELECTOR_STRATEGY_KEY)) {
        std::string strategy = StringHelper::ToString(this->conn_info_->at(READER_HOST_SELECTOR_STRATEGY_KEY));

        for (auto reader_host_selector_strategies_mapping : READER_HOST_SELECTOR_STRATEGIES_MAPPING) {
            if (strcmp_case_insensitive(strategy.c_str(), reader_host_selector_strategies_mapping.mode_str) == 0) {
                selector_strategy = reader_host_selector_strategies_mapping.mode;
                break;
            }
        }
    }

    switch (selector_strategy) {
        case ROUND_ROBIN:
            return std::make_shared<RoundRobinHostSelector>();
        case HIGHEST_WEIGHT:
            return std::make_shared<HighestWeightHostSelector>();
        case RANDOM:
        case UNKNOWN_STRATEGY:
        default:
            return std::make_shared<RandomHostSelector>();
    }
}