diff --git a/xds/src/main/java/io/grpc/xds/XdsLoadBalancer.java b/xds/src/main/java/io/grpc/xds/XdsLoadBalancer.java index 22a19a5b32..3eb17d415d 100644 --- a/xds/src/main/java/io/grpc/xds/XdsLoadBalancer.java +++ b/xds/src/main/java/io/grpc/xds/XdsLoadBalancer.java @@ -71,6 +71,12 @@ final class XdsLoadBalancer extends LoadBalancer { private LoadReportClient lrsClient; @Nullable private XdsLbState xdsLbState; + + // TODO(chengyuanzhang): use information populated by bootstrapper in xDS communication after + // xDS load balancer restructure is done. For now, don't integrate it. + @SuppressWarnings("unused") + @Nullable + private Bootstrapper bootstrapper; private final AdsStreamCallback adsStreamCallback = new AdsStreamCallback() { @Override @@ -112,24 +118,27 @@ final class XdsLoadBalancer extends LoadBalancer { private LbConfig fallbackPolicy; XdsLoadBalancer(Helper helper, LoadBalancerRegistry lbRegistry, - BackoffPolicy.Provider backoffPolicyProvider) { - this(helper, lbRegistry, backoffPolicyProvider, LoadReportClientFactory.getInstance(), - new FallbackManager(helper, lbRegistry)); + BackoffPolicy.Provider backoffPolicyProvider, boolean usingBootstrap) { + this(helper, lbRegistry, backoffPolicyProvider, usingBootstrap, + LoadReportClientFactory.getInstance(), new FallbackManager(helper, lbRegistry)); } private XdsLoadBalancer(Helper helper, LoadBalancerRegistry lbRegistry, BackoffPolicy.Provider backoffPolicyProvider, + boolean usingBootstrap, LoadReportClientFactory lrsClientFactory, FallbackManager fallbackManager) { - this(helper, lbRegistry, backoffPolicyProvider, lrsClientFactory, fallbackManager, - new LocalityStoreImpl(new LocalityStoreHelper(helper, fallbackManager), lbRegistry)); + this(helper, lbRegistry, backoffPolicyProvider, usingBootstrap, lrsClientFactory, + fallbackManager, new LocalityStoreImpl(new LocalityStoreHelper(helper, fallbackManager), + lbRegistry)); } @VisibleForTesting XdsLoadBalancer(Helper helper, LoadBalancerRegistry lbRegistry, BackoffPolicy.Provider backoffPolicyProvider, + boolean usingBootstrap, LoadReportClientFactory lrsClientFactory, FallbackManager fallbackManager, LocalityStore localityStore) { @@ -139,6 +148,16 @@ final class XdsLoadBalancer extends LoadBalancer { this.lrsClientFactory = checkNotNull(lrsClientFactory, "lrsClientFactory"); this.fallbackManager = checkNotNull(fallbackManager, "fallbackManager"); this.localityStore = checkNotNull(localityStore, "localityStore"); + if (usingBootstrap) { + // TODO(chengyuanzhang): figure out error handling when bootstrap fails. Currently bootstrap + // has not been integrated, but we do need a clear way of handling this case. + try { + bootstrapper = Bootstrapper.getInstance(); + } catch (Exception e) { + helper.getChannelLogger() + .log(ChannelLogLevel.ERROR, "Unable to bootstrap from local bootstrap file."); + } + } } private static final class LocalityStoreHelper extends ForwardingLoadBalancerHelper { diff --git a/xds/src/main/java/io/grpc/xds/XdsLoadBalancerProvider.java b/xds/src/main/java/io/grpc/xds/XdsLoadBalancerProvider.java index 8e311f6384..6e4c10ee32 100644 --- a/xds/src/main/java/io/grpc/xds/XdsLoadBalancerProvider.java +++ b/xds/src/main/java/io/grpc/xds/XdsLoadBalancerProvider.java @@ -67,7 +67,7 @@ public final class XdsLoadBalancerProvider extends LoadBalancerProvider { @Override public LoadBalancer newLoadBalancer(Helper helper) { return new XdsLoadBalancer(helper, LoadBalancerRegistry.getDefaultRegistry(), - new ExponentialBackoffPolicy.Provider()); + new ExponentialBackoffPolicy.Provider(), false); } @Override diff --git a/xds/src/test/java/io/grpc/xds/XdsLoadBalancerTest.java b/xds/src/test/java/io/grpc/xds/XdsLoadBalancerTest.java index a15bf8949f..f1be58a785 100644 --- a/xds/src/test/java/io/grpc/xds/XdsLoadBalancerTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsLoadBalancerTest.java @@ -227,7 +227,7 @@ public class XdsLoadBalancerTest { lbRegistry.register(lbProvider1); lbRegistry.register(lbProvider2); lbRegistry.register(roundRobin); - lb = new XdsLoadBalancer(helper, lbRegistry, backoffPolicyProvider); + lb = new XdsLoadBalancer(helper, lbRegistry, backoffPolicyProvider, false); doReturn(syncContext).when(helper).getSynchronizationContext(); doReturn(fakeClock.getScheduledExecutorService()).when(helper).getScheduledExecutorService(); doReturn(mock(ChannelLogger.class)).when(helper).getChannelLogger(); diff --git a/xds/src/test/java/io/grpc/xds/XdsLoadBalancerWithLrsTest.java b/xds/src/test/java/io/grpc/xds/XdsLoadBalancerWithLrsTest.java index 82e1668b25..c2689f2720 100644 --- a/xds/src/test/java/io/grpc/xds/XdsLoadBalancerWithLrsTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsLoadBalancerWithLrsTest.java @@ -224,7 +224,7 @@ public class XdsLoadBalancerWithLrsTest { any(BackoffPolicy.Provider.class), any(LoadStatsStore.class))).thenReturn(lrsClient); xdsLoadBalancer = - new XdsLoadBalancer(helper, lbRegistry, backoffPolicyProvider, lrsClientFactory, + new XdsLoadBalancer(helper, lbRegistry, backoffPolicyProvider, false, lrsClientFactory, new FallbackManager(helper, lbRegistry), localityStore); }