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() {