mirror of https://github.com/grpc/grpc-java.git
xds: fix NPE in wrr in TF state (#10868)
This commit is contained in:
parent
c0a9d315d3
commit
a97f21b61e
|
|
@ -378,6 +378,9 @@ final class WeightedRoundRobinLoadBalancer extends RoundRobinLoadBalancer {
|
|||
WeightedChildLbState wChild = (WeightedChildLbState) childLbState;
|
||||
PickResult pickResult = childLbState.getCurrentPicker().pickSubchannel(args);
|
||||
Subchannel subchannel = pickResult.getSubchannel();
|
||||
if (subchannel == null) {
|
||||
return pickResult;
|
||||
}
|
||||
if (!enableOobLoadReport) {
|
||||
return PickResult.withSubchannel(subchannel,
|
||||
OrcaPerRequestUtil.getInstance().newOrcaClientStreamTracerFactory(
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ import io.grpc.LoadBalancer.ResolvedAddresses;
|
|||
import io.grpc.LoadBalancer.Subchannel;
|
||||
import io.grpc.LoadBalancer.SubchannelPicker;
|
||||
import io.grpc.LoadBalancer.SubchannelStateListener;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.SynchronizationContext;
|
||||
import io.grpc.internal.FakeClock;
|
||||
import io.grpc.internal.TestUtils;
|
||||
|
|
@ -162,6 +163,22 @@ public class WeightedRoundRobinLoadBalancerTest {
|
|||
verify(helper, times(3)).createSubchannel(any(CreateSubchannelArgs.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pickChildLbTF() throws Exception {
|
||||
syncContext.execute(() -> wrr.acceptResolvedAddresses(ResolvedAddresses.newBuilder()
|
||||
.setAddresses(servers.subList(0, 1)).setLoadBalancingPolicyConfig(weightedConfig)
|
||||
.setAttributes(affinity).build()));
|
||||
Iterator<Subchannel> it = subchannels.values().iterator();
|
||||
Subchannel readySubchannel1 = it.next();
|
||||
getSubchannelStateListener(readySubchannel1).onSubchannelState(ConnectivityStateInfo
|
||||
.forTransientFailure(Status.UNAVAILABLE));
|
||||
verify(helper).updateBalancingState(
|
||||
eq(ConnectivityState.TRANSIENT_FAILURE), pickerCaptor.capture());
|
||||
final WeightedRoundRobinPicker weightedPicker =
|
||||
(WeightedRoundRobinPicker) pickerCaptor.getValue();
|
||||
weightedPicker.pickSubchannel(mockArgs);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void wrrLifeCycle() {
|
||||
syncContext.execute(() -> wrr.acceptResolvedAddresses(ResolvedAddresses.newBuilder()
|
||||
|
|
|
|||
Loading…
Reference in New Issue