From ae62785e0b62743cbe51d6acbba49aeef0e6e8e2 Mon Sep 17 00:00:00 2001 From: yifeizhuang Date: Mon, 13 Nov 2023 14:58:30 -0800 Subject: [PATCH] xds: fix ring hash childLB acceptResolvedAddress not in syncContext (#10664) --- .../java/io/grpc/xds/RingHashLoadBalancer.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java b/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java index 54461385ff..780b444024 100644 --- a/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java +++ b/xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java @@ -425,12 +425,14 @@ final class RingHashLoadBalancer extends MultiChildLoadBalancer { return PickResult.withNoResult(); } - if (subchannelView.connectivityState == IDLE || childLbState.isDeactivated()) { - if (childLbState.isDeactivated()) { - childLbState.activate(); - } else { - syncContext.execute(() -> childLbState.getLb().requestConnection()); - } + if (subchannelView.connectivityState == IDLE) { + syncContext.execute(() -> { + if (childLbState.isDeactivated()) { + childLbState.activate(); + } else { + childLbState.getLb().requestConnection(); + } + }); return PickResult.withNoResult(); // Indicates that this should be retried after backoff } @@ -531,11 +533,10 @@ final class RingHashLoadBalancer extends MultiChildLoadBalancer { if (!isDeactivated()) { return; } - currentConnectivityState = CONNECTING; getLb().switchTo(pickFirstLbProvider); markReactivated(); - getLb().acceptResolvedAddresses(this.getResolvedAddresses()); // Time to get a subchannel + getLb().acceptResolvedAddresses(this.getResolvedAddresses()); logger.log(XdsLogLevel.DEBUG, "Child balancer {0} reactivated", getKey()); }