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>();
}
}