From be3500eac5d1735c185d9d90fc31eaa543168299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=95=E6=B5=B7=E6=B6=9B?= Date: Thu, 5 Nov 2020 19:07:04 +0800 Subject: [PATCH] redis: skip resolution for ip address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The resolution will fail under macos for ip address. Signed-off-by: 吕海涛 --- .../extensions/clusters/redis/redis_cluster.cc | 18 ++++++++++++++++++ .../extensions/clusters/redis/redis_cluster.h | 1 + 2 files changed, 19 insertions(+) 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();