2828#include " src/core/ext/filters/client_channel/subchannel.h"
2929#include " src/core/lib/channel/channel_args.h"
3030#include " src/core/lib/gprpp/sync.h"
31- #include " src/core/lib/iomgr/combiner.h"
3231#include " src/core/lib/iomgr/sockaddr_utils.h"
3332#include " src/core/lib/transport/connectivity_state.h"
3433
@@ -85,9 +84,8 @@ class PickFirst : public LoadBalancingPolicy {
8584 public:
8685 PickFirstSubchannelList (PickFirst* policy, TraceFlag* tracer,
8786 const ServerAddressList& addresses,
88- grpc_combiner* combiner,
8987 const grpc_channel_args& args)
90- : SubchannelList(policy, tracer, addresses, combiner,
88+ : SubchannelList(policy, tracer, addresses,
9189 policy->channel_control_helper (), args) {
9290 // Need to maintain a ref to the LB policy as long as we maintain
9391 // any references to subchannels, since the subchannels'
@@ -111,19 +109,18 @@ class PickFirst : public LoadBalancingPolicy {
111109
112110 class Picker : public SubchannelPicker {
113111 public:
114- explicit Picker (
115- RefCountedPtr<ConnectedSubchannelInterface> connected_subchannel)
116- : connected_subchannel_(std::move(connected_subchannel)) {}
112+ explicit Picker (RefCountedPtr<SubchannelInterface> subchannel)
113+ : subchannel_(std::move(subchannel)) {}
117114
118115 PickResult Pick (PickArgs args) override {
119116 PickResult result;
120117 result.type = PickResult::PICK_COMPLETE;
121- result.connected_subchannel = connected_subchannel_ ;
118+ result.subchannel = subchannel_ ;
122119 return result;
123120 }
124121
125122 private:
126- RefCountedPtr<ConnectedSubchannelInterface> connected_subchannel_ ;
123+ RefCountedPtr<SubchannelInterface> subchannel_ ;
127124 };
128125
129126 void ShutdownLocked () override ;
@@ -166,6 +163,9 @@ void PickFirst::ShutdownLocked() {
166163void PickFirst::ExitIdleLocked () {
167164 if (shutdown_) return ;
168165 if (idle_) {
166+ if (GRPC_TRACE_FLAG_ENABLED (grpc_lb_pick_first_trace)) {
167+ gpr_log (GPR_INFO, " Pick First %p exiting idle" , this );
168+ }
169169 idle_ = false ;
170170 if (subchannel_list_ == nullptr ||
171171 subchannel_list_->num_subchannels () == 0 ) {
@@ -200,7 +200,7 @@ void PickFirst::UpdateLocked(UpdateArgs args) {
200200 grpc_channel_args* new_args =
201201 grpc_channel_args_copy_and_add (args.args , &new_arg, 1 );
202202 auto subchannel_list = MakeOrphanable<PickFirstSubchannelList>(
203- this , &grpc_lb_pick_first_trace, args.addresses , combiner (), *new_args);
203+ this , &grpc_lb_pick_first_trace, args.addresses , *new_args);
204204 grpc_channel_args_destroy (new_args);
205205 if (subchannel_list->num_subchannels () == 0 ) {
206206 // Empty update or no valid subchannels. Unsubscribe from all current
@@ -350,8 +350,8 @@ void PickFirst::PickFirstSubchannelData::ProcessConnectivityChangeLocked(
350350 // some connectivity state notifications.
351351 if (connectivity_state == GRPC_CHANNEL_READY) {
352352 p->channel_control_helper ()->UpdateState (
353- GRPC_CHANNEL_READY, UniquePtr<SubchannelPicker>(New<Picker>(
354- connected_subchannel ()->Ref ())));
353+ GRPC_CHANNEL_READY,
354+ UniquePtr<SubchannelPicker>(New<Picker>( subchannel ()->Ref ())));
355355 } else { // CONNECTING
356356 p->channel_control_helper ()->UpdateState (
357357 connectivity_state,
@@ -445,13 +445,13 @@ void PickFirst::PickFirstSubchannelData::ProcessUnselectedReadyLocked() {
445445 p->subchannel_list_ = std::move (p->latest_pending_subchannel_list_ );
446446 }
447447 // Cases 1 and 2.
448- p->selected_ = this ;
449- p->channel_control_helper ()->UpdateState (
450- GRPC_CHANNEL_READY,
451- UniquePtr<SubchannelPicker>(New<Picker>(connected_subchannel ()->Ref ())));
452448 if (GRPC_TRACE_FLAG_ENABLED (grpc_lb_pick_first_trace)) {
453449 gpr_log (GPR_INFO, " Pick First %p selected subchannel %p" , p, subchannel ());
454450 }
451+ p->selected_ = this ;
452+ p->channel_control_helper ()->UpdateState (
453+ GRPC_CHANNEL_READY,
454+ UniquePtr<SubchannelPicker>(New<Picker>(subchannel ()->Ref ())));
455455}
456456
457457void PickFirst::PickFirstSubchannelData::
0 commit comments