示例#1
0
        private void UpdateSubchannelState(Subchannel subchannel, SubchannelState state)
        {
            var index = FindSubchannel(_addressSubchannels, subchannel);

            if (index == null)
            {
                SubchannelsLoadBalancerLog.IgnoredSubchannelStateChange(_logger, subchannel.Id);
                return;
            }

            SubchannelsLoadBalancerLog.ProcessingSubchannelStateChanged(_logger, subchannel.Id, state.State, state.Status);

            UpdateBalancingState(state.Status);

            if (state.State == ConnectivityState.TransientFailure || state.State == ConnectivityState.Idle)
            {
                SubchannelsLoadBalancerLog.RefreshingResolverForSubchannel(_logger, subchannel.Id, state.State);
                Controller.RefreshResolver();
            }
            if (state.State == ConnectivityState.Idle)
            {
                SubchannelsLoadBalancerLog.RequestingConnectionForSubchannel(_logger, subchannel.Id, state.State);
                subchannel.RequestConnection();
            }
        }
 public override PickResult Pick(PickContext context)
 {
     Subchannel.RequestConnection();
     return(base.Pick(context));
 }
 /// <inheritdoc />
 public override void RequestConnection()
 {
     _subchannel?.RequestConnection();
 }