Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion source/common/upstream/strict_dns_cluster.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,10 @@ void StrictDnsClusterImpl::ResolveTarget::startResolve() {

std::chrono::milliseconds final_refresh_rate = parent_.dns_refresh_rate_ms_;

if (parent_.respect_dns_ttl_ && ttl_refresh_rate != std::chrono::seconds(0)) {
if (parent_.respect_dns_ttl_ && ttl_refresh_rate != std::chrono::seconds(0) &&
Comment thread
yxue marked this conversation as resolved.
!response.empty()) {
final_refresh_rate = ttl_refresh_rate;
ASSERT(ttl_refresh_rate != std::chrono::seconds::max() && final_refresh_rate.count() > 0);
ENVOY_LOG(debug, "DNS refresh rate reset for {}, refresh rate {} ms", dns_address_,
final_refresh_rate.count());
}
Expand Down
28 changes: 28 additions & 0 deletions test/common/upstream/upstream_impl_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,34 @@ TEST_F(StrictDnsClusterImplTest, RecordTtlAsDnsRefreshRate) {
TestUtility::makeDnsResponse({"192.168.1.1", "192.168.1.2"}, std::chrono::seconds(5)));
}

TEST_F(StrictDnsClusterImplTest, DefaultTtlAsDnsRefreshRateWhenResponseEmpty) {
ResolverData resolver(*dns_resolver_, dispatcher_);

const std::string yaml = R"EOF(
name: name
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
dns_refresh_rate: 4s
respect_dns_ttl: true
hosts: [{ socket_address: { address: localhost1, port_value: 11001 }}]
)EOF";

envoy::api::v2::Cluster cluster_config = parseClusterFromV2Yaml(yaml);
Envoy::Stats::ScopePtr scope = stats_.createScope(fmt::format(
"cluster.{}.", cluster_config.alt_stat_name().empty() ? cluster_config.name()
: cluster_config.alt_stat_name()));
Envoy::Server::Configuration::TransportSocketFactoryContextImpl factory_context(
admin_, ssl_context_manager_, *scope, cm_, local_info_, dispatcher_, random_, stats_,
singleton_manager_, tls_, validation_visitor_, *api_);
StrictDnsClusterImpl cluster(cluster_config, runtime_, dns_resolver_, factory_context,
std::move(scope), false);
cluster.initialize([] {});

EXPECT_CALL(*resolver.timer_, enableTimer(std::chrono::milliseconds(4000)));
resolver.dns_callback_(TestUtility::makeDnsResponse({}, std::chrono::seconds(5)));
}

TEST(HostImplTest, HostCluster) {
MockClusterMockPrioritySet cluster;
HostSharedPtr host = makeTestHost(cluster.info_, "tcp://10.0.0.1:1234", 1);
Expand Down