From f702fd930b3469bb72f2b02ddc4a0c06d6447c1f Mon Sep 17 00:00:00 2001 From: yifeizhuang Date: Fri, 9 Sep 2022 17:27:22 -0700 Subject: [PATCH] xds: ringhash policy in TRANSIENT_FAILURE should not attempt connecting when already in connecting (#9535) --- xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java | 2 +- xds/src/test/java/io/grpc/xds/RingHashLoadBalancerTest.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java b/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java index f0183e2c298..4b365230009 100644 --- a/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java +++ b/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java @@ -248,7 +248,7 @@ private void updateBalancingState() { overallState = READY; } else if (numTransientFailure >= 2) { overallState = TRANSIENT_FAILURE; - startConnectionAttempt = true; + startConnectionAttempt = (numConnecting == 0); } else if (numConnecting > 0) { overallState = CONNECTING; } else if (numTransientFailure == 1 && subchannels.size() > 1) { diff --git a/xds/src/test/java/io/grpc/xds/RingHashLoadBalancerTest.java b/xds/src/test/java/io/grpc/xds/RingHashLoadBalancerTest.java index 8b205e8ad85..9cfa00bc848 100644 --- a/xds/src/test/java/io/grpc/xds/RingHashLoadBalancerTest.java +++ b/xds/src/test/java/io/grpc/xds/RingHashLoadBalancerTest.java @@ -310,7 +310,7 @@ public void aggregateSubchannelStates_twoOrMoreSubchannelsInTransientFailure() { ConnectivityStateInfo.forNonError(CONNECTING)); inOrder.verify(helper) .updateBalancingState(eq(TRANSIENT_FAILURE), any(SubchannelPicker.class)); - verifyConnection(1); + verifyConnection(0); // three in TRANSIENT_FAILURE, one in CONNECTING deliverSubchannelState( @@ -320,7 +320,7 @@ public void aggregateSubchannelStates_twoOrMoreSubchannelsInTransientFailure() { inOrder.verify(helper).refreshNameResolution(); inOrder.verify(helper) .updateBalancingState(eq(TRANSIENT_FAILURE), any(SubchannelPicker.class)); - verifyConnection(1); + verifyConnection(0); // three in TRANSIENT_FAILURE, one in READY deliverSubchannelState( @@ -884,7 +884,7 @@ public void thirdSubchannelConnecting() { deliverSubchannelState(subchannels.get(Collections.singletonList(servers.get(1))), ConnectivityStateInfo.forNonError(CONNECTING)); verify(helper, times(2)).updateBalancingState(eq(TRANSIENT_FAILURE), pickerCaptor.capture()); - verifyConnection(3); + verifyConnection(2); // Picking subchannel triggers connection. PickSubchannelArgs args = new PickSubchannelArgsImpl(