diff --git a/source/extensions/clusters/redis/redis_cluster.cc b/source/extensions/clusters/redis/redis_cluster.cc index b87c00a4982d1..3f0357597cc54 100644 --- a/source/extensions/clusters/redis/redis_cluster.cc +++ b/source/extensions/clusters/redis/redis_cluster.cc @@ -160,6 +160,19 @@ RedisCluster::DnsDiscoveryResolveTarget::~DnsDiscoveryResolveTarget() { void RedisCluster::DnsDiscoveryResolveTarget::startResolveDns() { ENVOY_LOG(trace, "starting async DNS resolution for {}", dns_address_); + Network::Address::InstanceConstSharedPtr(ip_address); + try { + ip_address = Network::Utility::parseInternetAddress(dns_address_, port_, false); + } catch (const EnvoyException& e) { + } + + if (ip_address != nullptr) { + ENVOY_LOG(trace, "start resolve redis without dns for {}", ip_address); + parent_.redis_discovery_session_.registerAddress(ip_address); + parent_.redis_discovery_session_.startResolveRedis(); + return; + } + active_query_ = parent_.dns_resolver_->resolve( dns_address_, parent_.dns_lookup_family_, [this](Network::DnsResolver::ResolutionStatus status, @@ -262,6 +275,11 @@ void RedisCluster::RedisDiscoverySession::registerDiscoveryAddress( } } +void RedisCluster::RedisDiscoverySession::registerAddress( + Network::Address::InstanceConstSharedPtr address) { + discovery_address_list_.push_back(address); +} + void RedisCluster::RedisDiscoverySession::startResolveRedis() { parent_.info_->stats().update_attempt_.inc(); // If a resolution is currently in progress, skip it. diff --git a/source/extensions/clusters/redis/redis_cluster.h b/source/extensions/clusters/redis/redis_cluster.h index b3d842aa19dee..7302cd1ca68f3 100644 --- a/source/extensions/clusters/redis/redis_cluster.h +++ b/source/extensions/clusters/redis/redis_cluster.h @@ -206,6 +206,7 @@ class RedisCluster : public Upstream::BaseDynamicClusterImpl { ~RedisDiscoverySession() override; void registerDiscoveryAddress(std::list&& response, const uint32_t port); + void registerAddress(Network::Address::InstanceConstSharedPtr address); // Start discovery against a random host from existing hosts void startResolveRedis();