aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryifeizhuang <yifeizhuang@gmail.com>2023-11-13 14:58:30 -0800
committerGitHub <noreply@github.com>2023-11-13 14:58:30 -0800
commitae62785e0b62743cbe51d6acbba49aeef0e6e8e2 (patch)
tree2b2d659509482eca5e6ddd1a82cd6a121ddd2460
parentd5544bbb02fafc2eca4e09421258f85f1a6fcab4 (diff)
downloadgrpc-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.java17
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());
}