diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java index b6c99135e22..3630db63a16 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java +++ b/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java @@ -158,6 +158,7 @@ enum Mode { private List backendList = Collections.emptyList(); private RoundRobinPicker currentPicker = new RoundRobinPicker(Collections.emptyList(), Arrays.asList(BUFFER_ENTRY)); + private boolean requestConnectionPending; GrpclbState( GrpclbConfig config, @@ -242,9 +243,11 @@ void handleAddresses( } void requestConnection() { + requestConnectionPending = true; for (RoundRobinEntry entry : currentPicker.pickList) { if (entry instanceof IdleSubchannelEntry) { ((IdleSubchannelEntry) entry).subchannel.requestConnection(); + requestConnectionPending = false; } } } @@ -471,6 +474,10 @@ public void onSubchannelState(ConnectivityStateInfo newState) { handleSubchannelState(subchannel, newState); } }); + if (requestConnectionPending) { + subchannel.requestConnection(); + requestConnectionPending = false; + } } else { subchannel = subchannels.values().iterator().next(); subchannel.updateAddresses(eagList);