From 598e0ead7ffbfc28a7b65f67028c32efda031830 Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Thu, 3 Mar 2022 15:47:23 -0800 Subject: [PATCH 1/8] add debug statements Signed-off-by: Sai Teja Duthuluri --- source/extensions/clusters/redis/redis_cluster.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/extensions/clusters/redis/redis_cluster.cc b/source/extensions/clusters/redis/redis_cluster.cc index fb482bd7666cd..94e6eddffdf5b 100644 --- a/source/extensions/clusters/redis/redis_cluster.cc +++ b/source/extensions/clusters/redis/redis_cluster.cc @@ -332,6 +332,8 @@ void RedisCluster::RedisDiscoverySession::resolveClusterHostnames( ClusterSlotsSharedPtr&& slots, std::shared_ptr hostname_resolution_required_cnt) { for (uint64_t slot_idx = 0; slot_idx < slots->size(); slot_idx++) { + ENVOY_LOG(debug, "resolveClusterHostnames: hostname_resolution_required_cnt at beginning: {}", + *hostname_resolution_required_cnt); auto& slot = (*slots)[slot_idx]; if (slot.primary() == nullptr) { ENVOY_LOG(debug, @@ -357,6 +359,10 @@ void RedisCluster::RedisDiscoverySession::resolveClusterHostnames( slot.setPrimary(Network::Utility::getAddressWithPort( *response.front().addrInfo().address_, slot.primary_port_)); (*hostname_resolution_required_cnt)--; + ENVOY_LOG(debug, + "resolveClusterHostnames: hostname_resolution_required_cnt at end after " + "resolving primary {}: {}", + slot.primary_hostname_, *hostname_resolution_required_cnt); // Continue on to resolve replicas resolveReplicas(slots, slot_idx, hostname_resolution_required_cnt); }); @@ -380,6 +386,8 @@ void RedisCluster::RedisDiscoverySession::resolveReplicas( ClusterSlotsSharedPtr slots, std::size_t index, std::shared_ptr hostname_resolution_required_cnt) { auto& slot = (*slots)[index]; + ENVOY_LOG(debug, "resolveReplicas: hostname_resolution_required_cnt at beginning: {}", + *hostname_resolution_required_cnt); if (slot.replicas_to_resolve_.empty()) { if (*hostname_resolution_required_cnt == 0) { finishClusterHostnameResolution(slots); @@ -409,6 +417,10 @@ void RedisCluster::RedisDiscoverySession::resolveReplicas( *response.front().addrInfo().address_, replica.second)); } (*hostname_resolution_required_cnt)--; + ENVOY_LOG(debug, + "resolveReplicas: hostname_resolution_required_cnt at end after " + "resolving replica {}: {}", + replica.first, *hostname_resolution_required_cnt); // finish resolution if all the addresses have been resolved. if (*hostname_resolution_required_cnt <= 0) { finishClusterHostnameResolution(slots); From dea11d936eefe0c1edeac1c456d1cf0d66dea092 Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Thu, 3 Mar 2022 16:37:35 -0800 Subject: [PATCH 2/8] change redis cluster Signed-off-by: Sai Teja Duthuluri --- source/extensions/clusters/redis/redis_cluster.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/extensions/clusters/redis/redis_cluster.cc b/source/extensions/clusters/redis/redis_cluster.cc index 94e6eddffdf5b..8b8441006f9d0 100644 --- a/source/extensions/clusters/redis/redis_cluster.cc +++ b/source/extensions/clusters/redis/redis_cluster.cc @@ -342,8 +342,8 @@ void RedisCluster::RedisDiscoverySession::resolveClusterHostnames( parent_.dns_resolver_->resolve( slot.primary_hostname_, parent_.dns_lookup_family_, [this, slot_idx, slots, - &hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, - std::list&& response) -> void { + hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, + std::list&& response) -> void { auto& slot = (*slots)[slot_idx]; ENVOY_LOG(debug, "async DNS resolution complete for {}", slot.primary_hostname_); updateDnsStats(status, response.empty()); @@ -401,8 +401,8 @@ void RedisCluster::RedisDiscoverySession::resolveReplicas( parent_.dns_resolver_->resolve( replica.first, parent_.dns_lookup_family_, [this, index, slots, replica_idx, - &hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, - std::list&& response) -> void { + hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, + std::list&& response) -> void { auto& slot = (*slots)[index]; auto& replica = slot.replicas_to_resolve_[replica_idx]; ENVOY_LOG(debug, "async DNS resolution complete for {}", replica.first); From ed81964320e50731f6c072546466f36cfd9c9d0d Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Thu, 3 Mar 2022 17:17:52 -0800 Subject: [PATCH 3/8] Revert "add debug statements" removes debug statements added This reverts commit 598e0ead7ffbfc28a7b65f67028c32efda031830. Signed-off-by: Sai Teja Duthuluri --- source/extensions/clusters/redis/redis_cluster.cc | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/source/extensions/clusters/redis/redis_cluster.cc b/source/extensions/clusters/redis/redis_cluster.cc index 8b8441006f9d0..4caa7cbba16ec 100644 --- a/source/extensions/clusters/redis/redis_cluster.cc +++ b/source/extensions/clusters/redis/redis_cluster.cc @@ -332,8 +332,6 @@ void RedisCluster::RedisDiscoverySession::resolveClusterHostnames( ClusterSlotsSharedPtr&& slots, std::shared_ptr hostname_resolution_required_cnt) { for (uint64_t slot_idx = 0; slot_idx < slots->size(); slot_idx++) { - ENVOY_LOG(debug, "resolveClusterHostnames: hostname_resolution_required_cnt at beginning: {}", - *hostname_resolution_required_cnt); auto& slot = (*slots)[slot_idx]; if (slot.primary() == nullptr) { ENVOY_LOG(debug, @@ -359,10 +357,6 @@ void RedisCluster::RedisDiscoverySession::resolveClusterHostnames( slot.setPrimary(Network::Utility::getAddressWithPort( *response.front().addrInfo().address_, slot.primary_port_)); (*hostname_resolution_required_cnt)--; - ENVOY_LOG(debug, - "resolveClusterHostnames: hostname_resolution_required_cnt at end after " - "resolving primary {}: {}", - slot.primary_hostname_, *hostname_resolution_required_cnt); // Continue on to resolve replicas resolveReplicas(slots, slot_idx, hostname_resolution_required_cnt); }); @@ -386,8 +380,6 @@ void RedisCluster::RedisDiscoverySession::resolveReplicas( ClusterSlotsSharedPtr slots, std::size_t index, std::shared_ptr hostname_resolution_required_cnt) { auto& slot = (*slots)[index]; - ENVOY_LOG(debug, "resolveReplicas: hostname_resolution_required_cnt at beginning: {}", - *hostname_resolution_required_cnt); if (slot.replicas_to_resolve_.empty()) { if (*hostname_resolution_required_cnt == 0) { finishClusterHostnameResolution(slots); @@ -417,10 +409,6 @@ void RedisCluster::RedisDiscoverySession::resolveReplicas( *response.front().addrInfo().address_, replica.second)); } (*hostname_resolution_required_cnt)--; - ENVOY_LOG(debug, - "resolveReplicas: hostname_resolution_required_cnt at end after " - "resolving replica {}: {}", - replica.first, *hostname_resolution_required_cnt); // finish resolution if all the addresses have been resolved. if (*hostname_resolution_required_cnt <= 0) { finishClusterHostnameResolution(slots); From 1338dff1d668e7ca50122f79fa72b5cdad846d5c Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Fri, 4 Mar 2022 11:00:24 -0800 Subject: [PATCH 4/8] add a test Signed-off-by: Sai Teja Duthuluri --- .../clusters/redis/redis_cluster_test.cc | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/test/extensions/clusters/redis/redis_cluster_test.cc b/test/extensions/clusters/redis/redis_cluster_test.cc index b9eda4278aa84..077d09d42aefc 100644 --- a/test/extensions/clusters/redis/redis_cluster_test.cc +++ b/test/extensions/clusters/redis/redis_cluster_test.cc @@ -400,6 +400,84 @@ class RedisClusterTest : public testing::Test, return response; } + NetworkFilters::Common::Redis::RespValuePtr + twoSlotsPrimariesWithTwoReplicas(const std::string& primary1, const std::string& primary2, + const std::string& replica11, const std::string& replica12, + const std::string& replica21, const std::string& replica22, + int64_t port) const { + std::vector primary_1(2); + primary_1[0].type(NetworkFilters::Common::Redis::RespType::BulkString); + primary_1[0].asString() = primary1; + primary_1[1].type(NetworkFilters::Common::Redis::RespType::Integer); + primary_1[1].asInteger() = port; + + std::vector primary_2(2); + primary_2[0].type(NetworkFilters::Common::Redis::RespType::BulkString); + primary_2[0].asString() = primary2; + primary_2[1].type(NetworkFilters::Common::Redis::RespType::Integer); + primary_2[1].asInteger() = port; + + std::vector replica_11(2); + replica_11[0].type(NetworkFilters::Common::Redis::RespType::BulkString); + replica_11[0].asString() = replica11; + replica_11[1].type(NetworkFilters::Common::Redis::RespType::Integer); + replica_11[1].asInteger() = port; + + std::vector replica_12(2); + replica_12[0].type(NetworkFilters::Common::Redis::RespType::BulkString); + replica_12[0].asString() = replica12; + replica_12[1].type(NetworkFilters::Common::Redis::RespType::Integer); + replica_12[1].asInteger() = port; + + std::vector replica_21(2); + replica_21[0].type(NetworkFilters::Common::Redis::RespType::BulkString); + replica_21[0].asString() = replica21; + replica_21[1].type(NetworkFilters::Common::Redis::RespType::Integer); + replica_21[1].asInteger() = port; + + std::vector replica_22(2); + replica_22[0].type(NetworkFilters::Common::Redis::RespType::BulkString); + replica_22[0].asString() = replica22; + replica_22[1].type(NetworkFilters::Common::Redis::RespType::Integer); + replica_22[1].asInteger() = port; + + std::vector slot_1(5); + slot_1[0].type(NetworkFilters::Common::Redis::RespType::Integer); + slot_1[0].asInteger() = 0; + slot_1[1].type(NetworkFilters::Common::Redis::RespType::Integer); + slot_1[1].asInteger() = 9999; + slot_1[2].type(NetworkFilters::Common::Redis::RespType::Array); + slot_1[2].asArray().swap(primary_1); + slot_1[3].type(NetworkFilters::Common::Redis::RespType::Array); + slot_1[3].asArray().swap(replica_11); + slot_1[4].type(NetworkFilters::Common::Redis::RespType::Array); + slot_1[4].asArray().swap(replica_12); + + std::vector slot_2(5); + slot_2[0].type(NetworkFilters::Common::Redis::RespType::Integer); + slot_2[0].asInteger() = 10000; + slot_2[1].type(NetworkFilters::Common::Redis::RespType::Integer); + slot_2[1].asInteger() = 16383; + slot_2[2].type(NetworkFilters::Common::Redis::RespType::Array); + slot_2[2].asArray().swap(primary_2); + slot_2[3].type(NetworkFilters::Common::Redis::RespType::Array); + slot_2[3].asArray().swap(replica_21); + slot_2[4].type(NetworkFilters::Common::Redis::RespType::Array); + slot_2[4].asArray().swap(replica_22); + + std::vector slots(2); + slots[0].type(NetworkFilters::Common::Redis::RespType::Array); + slots[0].asArray().swap(slot_1); + slots[1].type(NetworkFilters::Common::Redis::RespType::Array); + slots[1].asArray().swap(slot_2); + + NetworkFilters::Common::Redis::RespValuePtr response( + new NetworkFilters::Common::Redis::RespValue()); + response->type(NetworkFilters::Common::Redis::RespType::Array); + response->asArray().swap(slots); + return response; + } + NetworkFilters::Common::Redis::RespValue createStringField(bool is_correct_type, const std::string& correct_value) const { NetworkFilters::Common::Redis::RespValue respValue; @@ -778,6 +856,46 @@ TEST_F(RedisClusterTest, AddressAsHostname) { EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); } +TEST_F(RedisClusterTest, AddressAsHostnameMultiplePrimaries) { + setupFromV3Yaml(BasicConfig); + const std::list resolved_addresses{"127.0.0.1", "127.0.0.2"}; + const std::list primary_resolved_addresses{"127.0.1.1"}; + const std::list replica_resolved_addresses{"127.0.1.2"}; + expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "foo.bar.com", resolved_addresses); + expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "primary1.com", + std::list{"127.0.1.1"}); + expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica11.org", + std::list{"127.0.1.2"}); + expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica12.org", + std::list{"127.0.1.3"}); + expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "primary2.com", + std::list{"127.0.1.4"}); + expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica21.org", + std::list{"127.0.1.5"}); + expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica22.org", + std::list{"127.0.1.6"}); + expectRedisResolve(true); + + EXPECT_CALL(membership_updated_, ready()); + EXPECT_CALL(initialized_, ready()); + cluster_->initialize([&]() -> void { initialized_.ready(); }); + + // 1. Single slot with primary and replica + EXPECT_CALL(*cluster_callback_, onClusterSlotUpdate(_, _)); + expectClusterSlotResponse( + twoSlotsPrimariesWithTwoReplicas("primary1.com", "primary2.com", "replica11.org", + "replica12.org", "replica21.org", "replica22.org", 22120)); + expectHealthyHosts(std::list({ + "127.0.1.1:22120", + "127.0.1.2:22120", + "127.0.1.3:22120", + "127.0.1.4:22120", + "127.0.1.5:22120", + "127.0.1.6:22120", + })); + EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); +} + TEST_F(RedisClusterTest, AddressAsHostnameFailure) { setupFromV3Yaml(BasicConfig); const std::list resolved_addresses{"127.0.0.1", "127.0.0.2"}; From ceea432926148b1f47238a11314acaba9647e24b Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Fri, 4 Mar 2022 11:08:35 -0800 Subject: [PATCH 5/8] add a test Signed-off-by: Sai Teja Duthuluri --- source/extensions/clusters/redis/redis_cluster.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/extensions/clusters/redis/redis_cluster.cc b/source/extensions/clusters/redis/redis_cluster.cc index 4caa7cbba16ec..fb482bd7666cd 100644 --- a/source/extensions/clusters/redis/redis_cluster.cc +++ b/source/extensions/clusters/redis/redis_cluster.cc @@ -340,8 +340,8 @@ void RedisCluster::RedisDiscoverySession::resolveClusterHostnames( parent_.dns_resolver_->resolve( slot.primary_hostname_, parent_.dns_lookup_family_, [this, slot_idx, slots, - hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, - std::list&& response) -> void { + &hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, + std::list&& response) -> void { auto& slot = (*slots)[slot_idx]; ENVOY_LOG(debug, "async DNS resolution complete for {}", slot.primary_hostname_); updateDnsStats(status, response.empty()); @@ -393,8 +393,8 @@ void RedisCluster::RedisDiscoverySession::resolveReplicas( parent_.dns_resolver_->resolve( replica.first, parent_.dns_lookup_family_, [this, index, slots, replica_idx, - hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, - std::list&& response) -> void { + &hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, + std::list&& response) -> void { auto& slot = (*slots)[index]; auto& replica = slot.replicas_to_resolve_[replica_idx]; ENVOY_LOG(debug, "async DNS resolution complete for {}", replica.first); From dcc53af9ad052c232f456e6e6aa7a7be8d68ad86 Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Fri, 4 Mar 2022 11:11:09 -0800 Subject: [PATCH 6/8] Revert "add a test" This reverts commit ceea432926148b1f47238a11314acaba9647e24b. Signed-off-by: Sai Teja Duthuluri --- source/extensions/clusters/redis/redis_cluster.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/extensions/clusters/redis/redis_cluster.cc b/source/extensions/clusters/redis/redis_cluster.cc index fb482bd7666cd..4caa7cbba16ec 100644 --- a/source/extensions/clusters/redis/redis_cluster.cc +++ b/source/extensions/clusters/redis/redis_cluster.cc @@ -340,8 +340,8 @@ void RedisCluster::RedisDiscoverySession::resolveClusterHostnames( parent_.dns_resolver_->resolve( slot.primary_hostname_, parent_.dns_lookup_family_, [this, slot_idx, slots, - &hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, - std::list&& response) -> void { + hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, + std::list&& response) -> void { auto& slot = (*slots)[slot_idx]; ENVOY_LOG(debug, "async DNS resolution complete for {}", slot.primary_hostname_); updateDnsStats(status, response.empty()); @@ -393,8 +393,8 @@ void RedisCluster::RedisDiscoverySession::resolveReplicas( parent_.dns_resolver_->resolve( replica.first, parent_.dns_lookup_family_, [this, index, slots, replica_idx, - &hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, - std::list&& response) -> void { + hostname_resolution_required_cnt](Network::DnsResolver::ResolutionStatus status, + std::list&& response) -> void { auto& slot = (*slots)[index]; auto& replica = slot.replicas_to_resolve_[replica_idx]; ENVOY_LOG(debug, "async DNS resolution complete for {}", replica.first); From 0493c35879ac4ec2423b4d0336f428490c52fe6f Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Mon, 7 Mar 2022 19:09:59 -0800 Subject: [PATCH 7/8] modify test to check for parallel DNS resolution Signed-off-by: Sai Teja Duthuluri --- .../clusters/redis/redis_cluster_test.cc | 88 ++++++------------- 1 file changed, 25 insertions(+), 63 deletions(-) diff --git a/test/extensions/clusters/redis/redis_cluster_test.cc b/test/extensions/clusters/redis/redis_cluster_test.cc index 077d09d42aefc..752bdb4751d67 100644 --- a/test/extensions/clusters/redis/redis_cluster_test.cc +++ b/test/extensions/clusters/redis/redis_cluster_test.cc @@ -1,6 +1,7 @@ #include #include #include +#include #include #include "envoy/common/callback.h" @@ -36,6 +37,7 @@ using testing::Eq; using testing::NiceMock; using testing::Ref; using testing::Return; +using testing::SaveArg; namespace Envoy { namespace Extensions { @@ -401,10 +403,8 @@ class RedisClusterTest : public testing::Test, } NetworkFilters::Common::Redis::RespValuePtr - twoSlotsPrimariesWithTwoReplicas(const std::string& primary1, const std::string& primary2, - const std::string& replica11, const std::string& replica12, - const std::string& replica21, const std::string& replica22, - int64_t port) const { + twoSlotsPrimariesHostnames(const std::string& primary1, const std::string& primary2, + int64_t port) const { std::vector primary_1(2); primary_1[0].type(NetworkFilters::Common::Redis::RespType::BulkString); primary_1[0].asString() = primary1; @@ -417,53 +417,21 @@ class RedisClusterTest : public testing::Test, primary_2[1].type(NetworkFilters::Common::Redis::RespType::Integer); primary_2[1].asInteger() = port; - std::vector replica_11(2); - replica_11[0].type(NetworkFilters::Common::Redis::RespType::BulkString); - replica_11[0].asString() = replica11; - replica_11[1].type(NetworkFilters::Common::Redis::RespType::Integer); - replica_11[1].asInteger() = port; - - std::vector replica_12(2); - replica_12[0].type(NetworkFilters::Common::Redis::RespType::BulkString); - replica_12[0].asString() = replica12; - replica_12[1].type(NetworkFilters::Common::Redis::RespType::Integer); - replica_12[1].asInteger() = port; - - std::vector replica_21(2); - replica_21[0].type(NetworkFilters::Common::Redis::RespType::BulkString); - replica_21[0].asString() = replica21; - replica_21[1].type(NetworkFilters::Common::Redis::RespType::Integer); - replica_21[1].asInteger() = port; - - std::vector replica_22(2); - replica_22[0].type(NetworkFilters::Common::Redis::RespType::BulkString); - replica_22[0].asString() = replica22; - replica_22[1].type(NetworkFilters::Common::Redis::RespType::Integer); - replica_22[1].asInteger() = port; - - std::vector slot_1(5); + std::vector slot_1(3); slot_1[0].type(NetworkFilters::Common::Redis::RespType::Integer); slot_1[0].asInteger() = 0; slot_1[1].type(NetworkFilters::Common::Redis::RespType::Integer); slot_1[1].asInteger() = 9999; slot_1[2].type(NetworkFilters::Common::Redis::RespType::Array); slot_1[2].asArray().swap(primary_1); - slot_1[3].type(NetworkFilters::Common::Redis::RespType::Array); - slot_1[3].asArray().swap(replica_11); - slot_1[4].type(NetworkFilters::Common::Redis::RespType::Array); - slot_1[4].asArray().swap(replica_12); - std::vector slot_2(5); + std::vector slot_2(3); slot_2[0].type(NetworkFilters::Common::Redis::RespType::Integer); slot_2[0].asInteger() = 10000; slot_2[1].type(NetworkFilters::Common::Redis::RespType::Integer); slot_2[1].asInteger() = 16383; slot_2[2].type(NetworkFilters::Common::Redis::RespType::Array); slot_2[2].asArray().swap(primary_2); - slot_2[3].type(NetworkFilters::Common::Redis::RespType::Array); - slot_2[3].asArray().swap(replica_21); - slot_2[4].type(NetworkFilters::Common::Redis::RespType::Array); - slot_2[4].asArray().swap(replica_22); std::vector slots(2); slots[0].type(NetworkFilters::Common::Redis::RespType::Array); @@ -856,42 +824,36 @@ TEST_F(RedisClusterTest, AddressAsHostname) { EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); } -TEST_F(RedisClusterTest, AddressAsHostnameMultiplePrimaries) { +TEST_F(RedisClusterTest, AddressAsHostnameParallelResolution) { + // This test specifically ensures that DNS resolution of different hostnames running parallel + // works as expected. setupFromV3Yaml(BasicConfig); const std::list resolved_addresses{"127.0.0.1", "127.0.0.2"}; - const std::list primary_resolved_addresses{"127.0.1.1"}; - const std::list replica_resolved_addresses{"127.0.1.2"}; expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "foo.bar.com", resolved_addresses); - expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "primary1.com", - std::list{"127.0.1.1"}); - expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica11.org", - std::list{"127.0.1.2"}); - expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica12.org", - std::list{"127.0.1.3"}); - expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "primary2.com", - std::list{"127.0.1.4"}); - expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica21.org", - std::list{"127.0.1.5"}); - expectResolveDiscovery(Network::DnsLookupFamily::V4Only, "replica22.org", - std::list{"127.0.1.6"}); + + Network::DnsResolver::ResolveCb primary1_resolve_cb; + Network::DnsResolver::ResolveCb primary2_resolve_cb; + EXPECT_CALL(*dns_resolver_, resolve("primary1.com", Network::DnsLookupFamily::V4Only, _)) + .WillOnce(DoAll(SaveArg<2>(&primary1_resolve_cb), Return(&dns_resolver_->active_query_))); + EXPECT_CALL(*dns_resolver_, resolve("primary2.com", Network::DnsLookupFamily::V4Only, _)) + .WillOnce(DoAll(SaveArg<2>(&primary2_resolve_cb), Return(&dns_resolver_->active_query_))); + expectRedisResolve(true); EXPECT_CALL(membership_updated_, ready()); EXPECT_CALL(initialized_, ready()); - cluster_->initialize([&]() -> void { initialized_.ready(); }); - - // 1. Single slot with primary and replica EXPECT_CALL(*cluster_callback_, onClusterSlotUpdate(_, _)); - expectClusterSlotResponse( - twoSlotsPrimariesWithTwoReplicas("primary1.com", "primary2.com", "replica11.org", - "replica12.org", "replica21.org", "replica22.org", 22120)); + cluster_->initialize([&]() -> void { initialized_.ready(); }); + ENVOY_LOG_MISC(info, "STARTING CALL TO EXPECT CLUSTER RESPONSE"); + expectClusterSlotResponse(twoSlotsPrimariesHostnames("primary1.com", "primary2.com", 22120)); + ENVOY_LOG_MISC(info, "FINISHED CALL TO EXPECT CLUSTER RESPONSE"); + primary1_resolve_cb(Network::DnsResolver::ResolutionStatus::Success, + TestUtility::makeDnsResponse(std::list{"127.0.1.1"})); + primary2_resolve_cb(Network::DnsResolver::ResolutionStatus::Success, + TestUtility::makeDnsResponse(std::list{"127.0.1.2"})); expectHealthyHosts(std::list({ "127.0.1.1:22120", "127.0.1.2:22120", - "127.0.1.3:22120", - "127.0.1.4:22120", - "127.0.1.5:22120", - "127.0.1.6:22120", })); EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); } From 9ffbd4da8c56c510734ec37c968ae0468ebc3109 Mon Sep 17 00:00:00 2001 From: Sai Teja Duthuluri Date: Mon, 7 Mar 2022 19:14:20 -0800 Subject: [PATCH 8/8] remove log statements Signed-off-by: Sai Teja Duthuluri --- test/extensions/clusters/redis/redis_cluster_test.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/extensions/clusters/redis/redis_cluster_test.cc b/test/extensions/clusters/redis/redis_cluster_test.cc index 752bdb4751d67..4019a7611484e 100644 --- a/test/extensions/clusters/redis/redis_cluster_test.cc +++ b/test/extensions/clusters/redis/redis_cluster_test.cc @@ -844,9 +844,7 @@ TEST_F(RedisClusterTest, AddressAsHostnameParallelResolution) { EXPECT_CALL(initialized_, ready()); EXPECT_CALL(*cluster_callback_, onClusterSlotUpdate(_, _)); cluster_->initialize([&]() -> void { initialized_.ready(); }); - ENVOY_LOG_MISC(info, "STARTING CALL TO EXPECT CLUSTER RESPONSE"); expectClusterSlotResponse(twoSlotsPrimariesHostnames("primary1.com", "primary2.com", 22120)); - ENVOY_LOG_MISC(info, "FINISHED CALL TO EXPECT CLUSTER RESPONSE"); primary1_resolve_cb(Network::DnsResolver::ResolutionStatus::Success, TestUtility::makeDnsResponse(std::list{"127.0.1.1"})); primary2_resolve_cb(Network::DnsResolver::ResolutionStatus::Success,