Skip to content

Commit 210f9c0

Browse files
authored
Xds fallback (#11254)
* XDS Client Fallback
1 parent 99a2696 commit 210f9c0

18 files changed

+1354
-292
lines changed

xds/src/main/java/io/grpc/xds/client/BootstrapperImpl.java

+13
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
@Internal
4242
public 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

Comments
 (0)