diff --git a/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java b/grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java index b6c99135e2..3630db63a1 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 @@ final class GrpclbState { 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 @@ final class GrpclbState { } void requestConnection() { + requestConnectionPending = true; for (RoundRobinEntry entry : currentPicker.pickList) { if (entry instanceof IdleSubchannelEntry) { ((IdleSubchannelEntry) entry).subchannel.requestConnection(); + requestConnectionPending = false; } } } @@ -471,6 +474,10 @@ final class GrpclbState { handleSubchannelState(subchannel, newState); } }); + if (requestConnectionPending) { + subchannel.requestConnection(); + requestConnectionPending = false; + } } else { subchannel = subchannels.values().iterator().next(); subchannel.updateAddresses(eagList);