diff --git a/source/extensions/clusters/static/static_cluster.cc b/source/extensions/clusters/static/static_cluster.cc index 4075d4a1a244..acf00a780477 100644 --- a/source/extensions/clusters/static/static_cluster.cc +++ b/source/extensions/clusters/static/static_cluster.cc @@ -27,10 +27,9 @@ StaticClusterImpl::StaticClusterImpl(const envoy::config::cluster::v3::Cluster& for (const auto& lb_endpoint : locality_lb_endpoint.lb_endpoints()) { std::vector address_list; if (!lb_endpoint.endpoint().additional_addresses().empty()) { - const auto address = + address_list.emplace_back( THROW_OR_RETURN_VALUE(resolveProtoAddress(lb_endpoint.endpoint().address()), - const Network::Address::InstanceConstSharedPtr); - address_list.push_back(address); + const Network::Address::InstanceConstSharedPtr)); for (const auto& additional_address : lb_endpoint.endpoint().additional_addresses()) { address_list.emplace_back( THROW_OR_RETURN_VALUE(resolveProtoAddress(additional_address.address()), diff --git a/source/server/admin/config_dump_handler.cc b/source/server/admin/config_dump_handler.cc index 6c758a3c416f..e807cdc8bbec 100644 --- a/source/server/admin/config_dump_handler.cc +++ b/source/server/admin/config_dump_handler.cc @@ -386,6 +386,7 @@ void ConfigDumpHandler::addLbEndpoint( if (host->addressListOrNull() != nullptr) { const auto& address_list = *host->addressListOrNull(); if (address_list.size() > 1) { + // skip first address of the list as the default address is not an additional one. for (auto it = std::next(address_list.begin()); it != address_list.end(); ++it) { auto& new_address = *endpoint.mutable_additional_addresses()->Add(); Network::Utility::addressToProtobufAddress(**it, *new_address.mutable_address()); diff --git a/test/common/upstream/cluster_manager_impl_test.cc b/test/common/upstream/cluster_manager_impl_test.cc index d022887c8cb0..4619be9aa929 100644 --- a/test/common/upstream/cluster_manager_impl_test.cc +++ b/test/common/upstream/cluster_manager_impl_test.cc @@ -6354,6 +6354,7 @@ TEST_F(ClusterManagerImplTest, CheckAddressesList) { port_value: 11001 )EOF"; create(parseBootstrapFromV3Yaml(bootstrap)); + // Verify address list for static cluster in bootstrap. auto cluster = cluster_manager_->getThreadLocalCluster("cluster_0"); auto hosts = cluster->prioritySet().hostSetsPerPriority()[0]->hosts(); ASSERT_NE(hosts[0]->addressListOrNull(), nullptr); @@ -6394,11 +6395,12 @@ TEST_F(ClusterManagerImplTest, CheckAddressesList) { address: 127.0.0.1 port_value: 11001 )EOF"; + // Add static cluster via api and check that addresses list is empty. EXPECT_TRUE(cluster_manager_->addOrUpdateCluster(parseClusterFromV3Yaml(cluster_api), "v1")); cluster = cluster_manager_->getThreadLocalCluster("added_via_api"); hosts = cluster->prioritySet().hostSetsPerPriority()[0]->hosts(); ASSERT_EQ(hosts[0]->addressListOrNull(), nullptr); - // Update cluster to have two address + // Update cluster to have additional addresses and check that address list is not empty anymore. EXPECT_TRUE( cluster_manager_->addOrUpdateCluster(parseClusterFromV3Yaml(cluster_api_update), "v2")); cluster = cluster_manager_->getThreadLocalCluster("added_via_api");