From a292e84f3c3c959bebb6242d95ef7d43df883710 Mon Sep 17 00:00:00 2001 From: MV Shiva Prasad Date: Mon, 6 Oct 2025 11:59:32 +0530 Subject: [PATCH 1/2] src code --- .../java/io/grpc/internal/PickFirstLeafLoadBalancer.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java b/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java index ebe329ca591..9c3a58bf175 100644 --- a/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java +++ b/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java @@ -449,6 +449,11 @@ private void shutdownRemaining(SubchannelData activeSubchannelData) { */ @Override public void requestConnection() { + // Immediately transition to CONNECTING if we are currently IDLE. + if (rawConnectivityState == IDLE) { + rawConnectivityState = CONNECTING; + updateBalancingState(CONNECTING, new Picker(PickResult.withNoResult())); + } if (!addressIndex.isValid() || rawConnectivityState == SHUTDOWN) { return; } From 54e6b5ae7fa1497422a09e6546f3e66f8df8459a Mon Sep 17 00:00:00 2001 From: MV Shiva Prasad Date: Mon, 6 Oct 2025 12:30:48 +0530 Subject: [PATCH 2/2] src code --- .../io/grpc/internal/PickFirstLeafLoadBalancer.java | 10 +++++----- .../grpc/internal/PickFirstLeafLoadBalancerTest.java | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java b/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java index 9c3a58bf175..f73013c07a3 100644 --- a/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java +++ b/core/src/main/java/io/grpc/internal/PickFirstLeafLoadBalancer.java @@ -449,11 +449,7 @@ private void shutdownRemaining(SubchannelData activeSubchannelData) { */ @Override public void requestConnection() { - // Immediately transition to CONNECTING if we are currently IDLE. - if (rawConnectivityState == IDLE) { - rawConnectivityState = CONNECTING; - updateBalancingState(CONNECTING, new Picker(PickResult.withNoResult())); - } + boolean wasIdle = rawConnectivityState == IDLE; if (!addressIndex.isValid() || rawConnectivityState == SHUTDOWN) { return; } @@ -469,6 +465,10 @@ public void requestConnection() { case IDLE: subchannelData.subchannel.requestConnection(); subchannelData.updateState(CONNECTING); + if (wasIdle) { + rawConnectivityState = CONNECTING; + updateBalancingState(CONNECTING, new Picker(PickResult.withNoResult())); + } scheduleNextConnection(); break; case CONNECTING: diff --git a/core/src/test/java/io/grpc/internal/PickFirstLeafLoadBalancerTest.java b/core/src/test/java/io/grpc/internal/PickFirstLeafLoadBalancerTest.java index 0e902bfdd56..e50e8a24915 100644 --- a/core/src/test/java/io/grpc/internal/PickFirstLeafLoadBalancerTest.java +++ b/core/src/test/java/io/grpc/internal/PickFirstLeafLoadBalancerTest.java @@ -2461,7 +2461,7 @@ public void happy_eyeballs_pick_pushes_index_over_end() { PickResult pickResult = requestingPicker.pickSubchannel(mockArgs); assertEquals("RequestConnectionPicker", requestingPicker.getClass().getSimpleName()); assertEquals(PickResult.withNoResult(), pickResult); - assertEquals(IDLE, loadBalancer.getConcludedConnectivityState()); + assertEquals(CONNECTING, loadBalancer.getConcludedConnectivityState()); // Second pick moves index to addr 3 pickResult = requestingPicker.pickSubchannel(mockArgs); @@ -2496,7 +2496,7 @@ public void happy_eyeballs_pick_pushes_index_over_end() { pickResult = requestingPicker2.pickSubchannel(mockArgs); assertEquals(PickResult.withNoResult(), pickResult); } - assertEquals(IDLE, loadBalancer.getConcludedConnectivityState()); + assertEquals(CONNECTING, loadBalancer.getConcludedConnectivityState()); listeners[0].onSubchannelState(ConnectivityStateInfo.forTransientFailure(error)); inOrder.verify(mockSubchannel2n2).start(stateListenerCaptor.capture());