aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/filters
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ext/filters')
-rw-r--r--src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc24
-rw-r--r--src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc24
-rw-r--r--src/core/ext/filters/client_channel/lb_policy/subchannel_list.h13
3 files changed, 17 insertions, 44 deletions
diff --git a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
index 4a58523d0a..023281db97 100644
--- a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc
@@ -327,30 +327,10 @@ void PickFirst::FillChildRefsForChannelz(
void PickFirst::UpdateChildRefsLocked() {
ChildRefsList cs;
if (subchannel_list_ != nullptr) {
- for (size_t i = 0; i < subchannel_list_->num_subchannels(); ++i) {
- if (subchannel_list_->subchannel(i)->subchannel() != nullptr) {
- grpc_core::channelz::SubchannelNode* subchannel_node =
- grpc_subchannel_get_channelz_node(
- subchannel_list_->subchannel(i)->subchannel());
- if (subchannel_node != nullptr) {
- cs.push_back(subchannel_node->subchannel_uuid());
- }
- }
- }
+ subchannel_list_->PopulateChildRefsList(&cs);
}
if (latest_pending_subchannel_list_ != nullptr) {
- for (size_t i = 0; i < latest_pending_subchannel_list_->num_subchannels();
- ++i) {
- if (latest_pending_subchannel_list_->subchannel(i)->subchannel() !=
- nullptr) {
- grpc_core::channelz::SubchannelNode* subchannel_node =
- grpc_subchannel_get_channelz_node(
- latest_pending_subchannel_list_->subchannel(i)->subchannel());
- if (subchannel_node != nullptr) {
- cs.push_back(subchannel_node->subchannel_uuid());
- }
- }
- }
+ latest_pending_subchannel_list_->PopulateChildRefsList(&cs);
}
// atomically update the data that channelz will actually be looking at.
mu_guard guard(&child_refs_mu_);
diff --git a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
index 604c926e7d..a19ddd1c0b 100644
--- a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
+++ b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc
@@ -408,30 +408,10 @@ void RoundRobin::FillChildRefsForChannelz(
void RoundRobin::UpdateChildRefsLocked() {
ChildRefsList cs;
if (subchannel_list_ != nullptr) {
- for (size_t i = 0; i < subchannel_list_->num_subchannels(); ++i) {
- if (subchannel_list_->subchannel(i)->subchannel() != nullptr) {
- grpc_core::channelz::SubchannelNode* subchannel_node =
- grpc_subchannel_get_channelz_node(
- subchannel_list_->subchannel(i)->subchannel());
- if (subchannel_node != nullptr) {
- cs.push_back(subchannel_node->subchannel_uuid());
- }
- }
- }
+ subchannel_list_->PopulateChildRefsList(&cs);
}
if (latest_pending_subchannel_list_ != nullptr) {
- for (size_t i = 0; i < latest_pending_subchannel_list_->num_subchannels();
- ++i) {
- if (latest_pending_subchannel_list_->subchannel(i)->subchannel() !=
- nullptr) {
- grpc_core::channelz::SubchannelNode* subchannel_node =
- grpc_subchannel_get_channelz_node(
- latest_pending_subchannel_list_->subchannel(i)->subchannel());
- if (subchannel_node != nullptr) {
- cs.push_back(subchannel_node->subchannel_uuid());
- }
- }
- }
+ latest_pending_subchannel_list_->PopulateChildRefsList(&cs);
}
// atomically update the data that channelz will actually be looking at.
mu_guard guard(&child_refs_mu_);
diff --git a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
index 7e2046bcdc..018ac3bb86 100644
--- a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
+++ b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h
@@ -189,6 +189,19 @@ class SubchannelList
// Returns true if the subchannel list is shutting down.
bool shutting_down() const { return shutting_down_; }
+ // Populates refs_list with the uuids of this SubchannelLists's subchannels.
+ void PopulateChildRefsList(ChildRefsList* refs_list) {
+ for (size_t i = 0; i < subchannels_.size(); ++i) {
+ if (subchannels_[i].subchannel() != nullptr) {
+ grpc_core::channelz::SubchannelNode* subchannel_node =
+ grpc_subchannel_get_channelz_node(subchannels_[i].subchannel());
+ if (subchannel_node != nullptr) {
+ refs_list->push_back(subchannel_node->subchannel_uuid());
+ }
+ }
+ }
+ }
+
// Accessors.
LoadBalancingPolicy* policy() const { return policy_; }
TraceFlag* tracer() const { return tracer_; }