diff options
author | yifeizhuang <yifeizhuang@gmail.com> | 2023-11-13 14:58:30 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-13 14:58:30 -0800 |
commit | ae62785e0b62743cbe51d6acbba49aeef0e6e8e2 (patch) | |
tree | 2b2d659509482eca5e6ddd1a82cd6a121ddd2460 | |
parent | d5544bbb02fafc2eca4e09421258f85f1a6fcab4 (diff) | |
download | grpc-grpc-java-ae62785e0b62743cbe51d6acbba49aeef0e6e8e2.tar.gz |
xds: fix ring hash childLB acceptResolvedAddress not in syncContext (#10664)
-rw-r--r-- | xds/src/main/java/io/grpc/xds/RingHashLoadBalancer.java | 17 |
1 files 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 54461385f..780b44402 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()); } |