From 5d519323a0871bf503aa14a50bd078cd397216b6 Mon Sep 17 00:00:00 2001 From: "Penn (Dapeng) Zhang" Date: Tue, 15 Sep 2020 17:17:19 -0700 Subject: [PATCH] grpclb: cache requestConnection if no subchannel created --- grpclb/src/main/java/io/grpc/grpclb/GrpclbState.java | 7 +++++++ 1 file changed, 7 insertions(+) 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);