xds: Protect xdstp processing with federation env var

There are still some cases for xdstp processing, but they are to percent
encoding replacement strings. Those seem better to leave running since
it looks like it they could be triggered even with federation disabled
in the bootstrap processing.
This commit is contained in:
Eric Anderson 2022-05-23 08:16:11 -07:00 committed by GitHub
parent 4a5f6adf73
commit f9e1c0f37f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 2 deletions

View File

@ -60,7 +60,6 @@ class BootstrapperImpl extends Bootstrapper {
"envoy.lb.does_not_support_overprovisioning"; "envoy.lb.does_not_support_overprovisioning";
@VisibleForTesting @VisibleForTesting
static final String CLIENT_FEATURE_RESOURCE_IN_SOTW = "xds.config.resource-in-sotw"; static final String CLIENT_FEATURE_RESOURCE_IN_SOTW = "xds.config.resource-in-sotw";
@VisibleForTesting
static boolean enableFederation = static boolean enableFederation =
!Strings.isNullOrEmpty(System.getenv("GRPC_EXPERIMENTAL_XDS_FEDERATION")) !Strings.isNullOrEmpty(System.getenv("GRPC_EXPERIMENTAL_XDS_FEDERATION"))
&& Boolean.parseBoolean(System.getenv("GRPC_EXPERIMENTAL_XDS_FEDERATION")); && Boolean.parseBoolean(System.getenv("GRPC_EXPERIMENTAL_XDS_FEDERATION"));

View File

@ -2444,7 +2444,7 @@ final class ClientXdsClient extends XdsClient implements XdsResponseHandler, Res
} }
private ServerInfo getServerInfo(String resource) { private ServerInfo getServerInfo(String resource) {
if (resource.startsWith(XDSTP_SCHEME)) { if (BootstrapperImpl.enableFederation && resource.startsWith(XDSTP_SCHEME)) {
URI uri = URI.create(resource); URI uri = URI.create(resource);
String authority = uri.getAuthority(); String authority = uri.getAuthority();
if (authority == null) { if (authority == null) {

View File

@ -263,6 +263,7 @@ public abstract class ClientXdsClientTestBase {
private boolean originalEnableFaultInjection; private boolean originalEnableFaultInjection;
private boolean originalEnableRbac; private boolean originalEnableRbac;
private boolean originalEnableLeastRequest; private boolean originalEnableLeastRequest;
private boolean originalEnableFederation;
@Before @Before
public void setUp() throws IOException { public void setUp() throws IOException {
@ -279,6 +280,7 @@ public abstract class ClientXdsClientTestBase {
assertThat(originalEnableRbac).isTrue(); assertThat(originalEnableRbac).isTrue();
originalEnableLeastRequest = ClientXdsClient.enableLeastRequest; originalEnableLeastRequest = ClientXdsClient.enableLeastRequest;
ClientXdsClient.enableLeastRequest = true; ClientXdsClient.enableLeastRequest = true;
originalEnableFederation = BootstrapperImpl.enableFederation;
final String serverName = InProcessServerBuilder.generateName(); final String serverName = InProcessServerBuilder.generateName();
cleanupRule.register( cleanupRule.register(
InProcessServerBuilder InProcessServerBuilder
@ -353,6 +355,7 @@ public abstract class ClientXdsClientTestBase {
ClientXdsClient.enableFaultInjection = originalEnableFaultInjection; ClientXdsClient.enableFaultInjection = originalEnableFaultInjection;
ClientXdsClient.enableRbac = originalEnableRbac; ClientXdsClient.enableRbac = originalEnableRbac;
ClientXdsClient.enableLeastRequest = originalEnableLeastRequest; ClientXdsClient.enableLeastRequest = originalEnableLeastRequest;
BootstrapperImpl.enableFederation = originalEnableFederation;
xdsClient.shutdown(); xdsClient.shutdown();
channel.shutdown(); // channel not owned by XdsClient channel.shutdown(); // channel not owned by XdsClient
assertThat(adsEnded.get()).isTrue(); assertThat(adsEnded.get()).isTrue();
@ -788,6 +791,7 @@ public abstract class ClientXdsClientTestBase {
@Test @Test
public void ldsResourceUpdated_withXdstpResourceName() { public void ldsResourceUpdated_withXdstpResourceName() {
BootstrapperImpl.enableFederation = true;
String ldsResourceName = useProtocolV3() String ldsResourceName = useProtocolV3()
? "xdstp://authority.xds.com/envoy.config.listener.v3.Listener/listener1" ? "xdstp://authority.xds.com/envoy.config.listener.v3.Listener/listener1"
: "xdstp://authority.xds.com/envoy.api.v2.Listener/listener1"; : "xdstp://authority.xds.com/envoy.api.v2.Listener/listener1";
@ -808,6 +812,7 @@ public abstract class ClientXdsClientTestBase {
@Test @Test
public void ldsResourceUpdated_withXdstpResourceName_withEmptyAuthority() { public void ldsResourceUpdated_withXdstpResourceName_withEmptyAuthority() {
BootstrapperImpl.enableFederation = true;
String ldsResourceName = useProtocolV3() String ldsResourceName = useProtocolV3()
? "xdstp:///envoy.config.listener.v3.Listener/listener1" ? "xdstp:///envoy.config.listener.v3.Listener/listener1"
: "xdstp:///envoy.api.v2.Listener/listener1"; : "xdstp:///envoy.api.v2.Listener/listener1";
@ -828,6 +833,7 @@ public abstract class ClientXdsClientTestBase {
@Test @Test
public void ldsResourceUpdated_withXdstpResourceName_witUnorderedContextParams() { public void ldsResourceUpdated_withXdstpResourceName_witUnorderedContextParams() {
BootstrapperImpl.enableFederation = true;
String ldsResourceName = useProtocolV3() String ldsResourceName = useProtocolV3()
? "xdstp://authority.xds.com/envoy.config.listener.v3.Listener/listener1/a?bar=2&foo=1" ? "xdstp://authority.xds.com/envoy.config.listener.v3.Listener/listener1/a?bar=2&foo=1"
: "xdstp://authority.xds.com/envoy.api.v2.Listener/listener1/a?bar=2&foo=1"; : "xdstp://authority.xds.com/envoy.api.v2.Listener/listener1/a?bar=2&foo=1";
@ -847,6 +853,7 @@ public abstract class ClientXdsClientTestBase {
@Test @Test
public void ldsResourceUpdated_withXdstpResourceName_withWrongType() { public void ldsResourceUpdated_withXdstpResourceName_withWrongType() {
BootstrapperImpl.enableFederation = true;
String ldsResourceName = useProtocolV3() String ldsResourceName = useProtocolV3()
? "xdstp://authority.xds.com/envoy.config.listener.v3.Listener/listener1" ? "xdstp://authority.xds.com/envoy.config.listener.v3.Listener/listener1"
: "xdstp://authority.xds.com/envoy.api.v2.Listener/listener1"; : "xdstp://authority.xds.com/envoy.api.v2.Listener/listener1";
@ -867,6 +874,7 @@ public abstract class ClientXdsClientTestBase {
@Test @Test
public void rdsResourceUpdated_withXdstpResourceName_withWrongType() { public void rdsResourceUpdated_withXdstpResourceName_withWrongType() {
BootstrapperImpl.enableFederation = true;
String rdsResourceName = useProtocolV3() String rdsResourceName = useProtocolV3()
? "xdstp://authority.xds.com/envoy.config.route.v3.RouteConfiguration/route1" ? "xdstp://authority.xds.com/envoy.config.route.v3.RouteConfiguration/route1"
: "xdstp://authority.xds.com/envoy.api.v2.RouteConfiguration/route1"; : "xdstp://authority.xds.com/envoy.api.v2.RouteConfiguration/route1";
@ -886,6 +894,7 @@ public abstract class ClientXdsClientTestBase {
@Test @Test
public void cdsResourceUpdated_withXdstpResourceName_withWrongType() { public void cdsResourceUpdated_withXdstpResourceName_withWrongType() {
BootstrapperImpl.enableFederation = true;
String cdsResourceName = useProtocolV3() String cdsResourceName = useProtocolV3()
? "xdstp://authority.xds.com/envoy.config.cluster.v3.Cluster/cluster1" ? "xdstp://authority.xds.com/envoy.config.cluster.v3.Cluster/cluster1"
: "xdstp://authority.xds.com/envoy.api.v2.Cluster/cluster1"; : "xdstp://authority.xds.com/envoy.api.v2.Cluster/cluster1";
@ -906,6 +915,7 @@ public abstract class ClientXdsClientTestBase {
@Test @Test
public void edsResourceUpdated_withXdstpResourceName_withWrongType() { public void edsResourceUpdated_withXdstpResourceName_withWrongType() {
BootstrapperImpl.enableFederation = true;
String edsResourceName = useProtocolV3() String edsResourceName = useProtocolV3()
? "xdstp://authority.xds.com/envoy.config.endpoint.v3.ClusterLoadAssignment/cluster1" ? "xdstp://authority.xds.com/envoy.config.endpoint.v3.ClusterLoadAssignment/cluster1"
: "xdstp://authority.xds.com/envoy.api.v2.ClusterLoadAssignment/cluster1"; : "xdstp://authority.xds.com/envoy.api.v2.ClusterLoadAssignment/cluster1";