41
41
@ Internal
42
42
public abstract class BootstrapperImpl extends Bootstrapper {
43
43
44
+ public static final String GRPC_EXPERIMENTAL_XDS_FALLBACK =
45
+ "GRPC_EXPERIMENTAL_XDS_FALLBACK" ;
46
+
44
47
// Client features.
45
48
@ VisibleForTesting
46
49
public static final String CLIENT_FEATURE_DISABLE_OVERPROVISIONING =
@@ -52,6 +55,9 @@ public abstract class BootstrapperImpl extends Bootstrapper {
52
55
private static final String SERVER_FEATURE_IGNORE_RESOURCE_DELETION = "ignore_resource_deletion" ;
53
56
private static final String SERVER_FEATURE_TRUSTED_XDS_SERVER = "trusted_xds_server" ;
54
57
58
+ @ VisibleForTesting
59
+ static boolean enableXdsFallback = GrpcUtil .getFlag (GRPC_EXPERIMENTAL_XDS_FALLBACK , false );
60
+
55
61
protected final XdsLogger logger ;
56
62
57
63
protected FileReader reader = LocalFileReader .INSTANCE ;
@@ -65,6 +71,7 @@ protected BootstrapperImpl() {
65
71
protected abstract Object getImplSpecificConfig (Map <String , ?> serverConfig , String serverUri )
66
72
throws XdsInitializationException ;
67
73
74
+
68
75
/**
69
76
* Reads and parses bootstrap config. The config is expected to be in JSON format.
70
77
*/
@@ -103,6 +110,9 @@ protected BootstrapInfo.Builder bootstrapBuilder(Map<String, ?> rawData)
103
110
throw new XdsInitializationException ("Invalid bootstrap: 'xds_servers' does not exist." );
104
111
}
105
112
List <ServerInfo > servers = parseServerInfos (rawServerConfigs , logger );
113
+ if (servers .size () > 1 && !enableXdsFallback ) {
114
+ servers = ImmutableList .of (servers .get (0 ));
115
+ }
106
116
builder .servers (servers );
107
117
108
118
Node .Builder nodeBuilder = Node .newBuilder ();
@@ -209,6 +219,9 @@ protected BootstrapInfo.Builder bootstrapBuilder(Map<String, ?> rawData)
209
219
if (rawAuthorityServers == null || rawAuthorityServers .isEmpty ()) {
210
220
authorityServers = servers ;
211
221
} else {
222
+ if (rawAuthorityServers .size () > 1 && !enableXdsFallback ) {
223
+ rawAuthorityServers = ImmutableList .of (rawAuthorityServers .get (0 ));
224
+ }
212
225
authorityServers = parseServerInfos (rawAuthorityServers , logger );
213
226
}
214
227
authorityInfoMapBuilder .put (
0 commit comments