From abcf4306d6646cb5bd76e38ae1a5d2e880f66b06 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Tue, 4 Mar 2025 14:44:57 -0800 Subject: [PATCH] grpc-js-xds: ring_hash: Fix proactive connect logic when already connecting --- packages/grpc-js-xds/src/load-balancer-ring-hash.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/grpc-js-xds/src/load-balancer-ring-hash.ts b/packages/grpc-js-xds/src/load-balancer-ring-hash.ts index 299ced7a8..af3ebac86 100644 --- a/packages/grpc-js-xds/src/load-balancer-ring-hash.ts +++ b/packages/grpc-js-xds/src/load-balancer-ring-hash.ts @@ -249,16 +249,20 @@ class RingHashLoadBalancer implements LoadBalancer { if (!(this.currentState === connectivityState.TRANSIENT_FAILURE || this.currentState === connectivityState.CONNECTING)) { return; } + let firstIdleChild: LeafLoadBalancer | null = null; for (const leaf of this.leafMap.values()) { const leafState = leaf.getConnectivityState(); if (leafState === connectivityState.CONNECTING) { + firstIdleChild = null; break; } - if (leafState === connectivityState.IDLE) { - leaf.startConnecting(); - break; + if (leafState === connectivityState.IDLE && !firstIdleChild) { + firstIdleChild = leaf; } } + if (firstIdleChild) { + firstIdleChild.startConnecting(); + } } private calculateAndUpdateState() {