diff --git a/source/common/upstream/upstream_impl.cc b/source/common/upstream/upstream_impl.cc index a50b650f4be87..988098842a0e6 100644 --- a/source/common/upstream/upstream_impl.cc +++ b/source/common/upstream/upstream_impl.cc @@ -203,8 +203,11 @@ HostVector filterHosts(const std::unordered_set& hosts, HostVector net_hosts; net_hosts.reserve(hosts.size()); - std::set_difference(hosts.begin(), hosts.end(), excluded_hosts.begin(), excluded_hosts.end(), - std::inserter(net_hosts, net_hosts.begin())); + for (const auto& host : hosts) { + if (excluded_hosts.find(host) == excluded_hosts.end()) { + net_hosts.emplace_back(host); + } + } return net_hosts; } @@ -1144,6 +1147,7 @@ bool BaseDynamicClusterImpl::updateDynamicHostList(const HostVector& new_hosts, // Did the priority change? if (host->priority() != existing_host->second->priority()) { existing_host->second->priority(host->priority()); + hosts_added_to_current_priority.emplace_back(existing_host->second); } existing_host->second->weight(host->weight()); diff --git a/test/common/upstream/eds_test.cc b/test/common/upstream/eds_test.cc index bb22655fda823..c3e640e637144 100644 --- a/test/common/upstream/eds_test.cc +++ b/test/common/upstream/eds_test.cc @@ -680,6 +680,12 @@ TEST_F(EdsTest, EndpointMoved) { add_endpoint(81, 0); add_endpoint(80, 1); + // Verify that no hosts gets added or removed to/from the PrioritySet. + cluster_->prioritySet().addMemberUpdateCb([&](const auto& added, const auto& removed) { + EXPECT_TRUE(added.empty()); + EXPECT_TRUE(removed.empty()); + }); + VERBOSE_EXPECT_NO_THROW(cluster_->onConfigUpdate(resources, "")); {