4141@ Internal
4242public abstract class BootstrapperImpl extends Bootstrapper {
4343
44+ public static final String GRPC_EXPERIMENTAL_XDS_FALLBACK =
45+ "GRPC_EXPERIMENTAL_XDS_FALLBACK" ;
46+
4447 // Client features.
4548 @ VisibleForTesting
4649 public static final String CLIENT_FEATURE_DISABLE_OVERPROVISIONING =
@@ -52,6 +55,9 @@ public abstract class BootstrapperImpl extends Bootstrapper {
5255 private static final String SERVER_FEATURE_IGNORE_RESOURCE_DELETION = "ignore_resource_deletion" ;
5356 private static final String SERVER_FEATURE_TRUSTED_XDS_SERVER = "trusted_xds_server" ;
5457
58+ @ VisibleForTesting
59+ static boolean enableXdsFallback = GrpcUtil .getFlag (GRPC_EXPERIMENTAL_XDS_FALLBACK , false );
60+
5561 protected final XdsLogger logger ;
5662
5763 protected FileReader reader = LocalFileReader .INSTANCE ;
@@ -65,6 +71,7 @@ protected BootstrapperImpl() {
6571 protected abstract Object getImplSpecificConfig (Map <String , ?> serverConfig , String serverUri )
6672 throws XdsInitializationException ;
6773
74+
6875 /**
6976 * Reads and parses bootstrap config. The config is expected to be in JSON format.
7077 */
@@ -103,6 +110,9 @@ protected BootstrapInfo.Builder bootstrapBuilder(Map<String, ?> rawData)
103110 throw new XdsInitializationException ("Invalid bootstrap: 'xds_servers' does not exist." );
104111 }
105112 List <ServerInfo > servers = parseServerInfos (rawServerConfigs , logger );
113+ if (servers .size () > 1 && !enableXdsFallback ) {
114+ servers = ImmutableList .of (servers .get (0 ));
115+ }
106116 builder .servers (servers );
107117
108118 Node .Builder nodeBuilder = Node .newBuilder ();
@@ -209,6 +219,9 @@ protected BootstrapInfo.Builder bootstrapBuilder(Map<String, ?> rawData)
209219 if (rawAuthorityServers == null || rawAuthorityServers .isEmpty ()) {
210220 authorityServers = servers ;
211221 } else {
222+ if (rawAuthorityServers .size () > 1 && !enableXdsFallback ) {
223+ rawAuthorityServers = ImmutableList .of (rawAuthorityServers .get (0 ));
224+ }
212225 authorityServers = parseServerInfos (rawAuthorityServers , logger );
213226 }
214227 authorityInfoMapBuilder .put (
0 commit comments