diff options
Diffstat (limited to 'src/core/ext/filters')
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_; } |