Skip to content

Commit 9dcf939

Browse files
committed
[WIP] Tmp code to verify xDS HTTP Connect end-to-end
allows nested transport_sockets = RawBuffer
1 parent 9d5842b commit 9dcf939

5 files changed

Lines changed: 90 additions & 8 deletions

File tree

xds/src/main/java/io/grpc/xds/MessagePrinter.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager;
3636
import io.envoyproxy.envoy.extensions.load_balancing_policies.round_robin.v3.RoundRobin;
3737
import io.envoyproxy.envoy.extensions.load_balancing_policies.wrr_locality.v3.WrrLocality;
38+
import io.envoyproxy.envoy.extensions.transport_sockets.http_11_proxy.v3.Http11ProxyUpstreamTransport;
39+
import io.envoyproxy.envoy.extensions.transport_sockets.raw_buffer.v3.RawBuffer;
3840
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext;
3941
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext;
4042
import io.envoyproxy.envoy.service.discovery.v3.Resource;
@@ -72,8 +74,12 @@ private static JsonFormat.Printer newPrinter() {
7274
.add(ClusterConfig.getDescriptor())
7375
.add(ClusterLoadAssignment.getDescriptor())
7476
.add(WrrLocality.getDescriptor())
75-
.add(TypedStruct.getDescriptor())
76-
.add(RoundRobin.getDescriptor());
77+
.add(RoundRobin.getDescriptor())
78+
// Transports
79+
.add(Http11ProxyUpstreamTransport.getDescriptor())
80+
.add(RawBuffer.getDescriptor())
81+
// Always last, guarding the semicolon.
82+
.add(TypedStruct.getDescriptor());
7783
try {
7884
@SuppressWarnings("unchecked")
7985
Class<? extends Message> routeLookupClusterSpecifierClass =

xds/src/main/java/io/grpc/xds/XdsClusterResource.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ class XdsClusterResource extends XdsResourceType<CdsUpdate> {
8383
static final String TRANSPORT_SOCKET_NAME_HTTP11_PROXY =
8484
"type.googleapis.com/envoy.extensions.transport_sockets.http_11_proxy.v3"
8585
+ ".Http11ProxyUpstreamTransport";
86+
static final String TRANSPORT_SOCKET_NAME_RAW_BUFFER =
87+
"type.googleapis.com/envoy.extensions.transport_sockets.raw_buffer.v3.RawBuffer";
8688
private final LoadBalancerRegistry loadBalancerRegistry
8789
= LoadBalancerRegistry.getDefaultRegistry();
8890

@@ -260,15 +262,21 @@ private static StructOrError<CdsUpdate.Builder> parseNonAggregateCluster(
260262
boolean hasTransportSocket = cluster.hasTransportSocket();
261263
TransportSocket transportSocket = cluster.getTransportSocket();
262264

263-
if (hasTransportSocket && !TRANSPORT_SOCKET_NAME_TLS.equals(transportSocket.getName())
264-
&& !(isEnabledXdsHttpConnect
265-
&& TRANSPORT_SOCKET_NAME_HTTP11_PROXY.equals(transportSocket.getName()))) {
265+
266+
String transportSocketName = hasTransportSocket ? transportSocket.getName() : "<invalid>";
267+
boolean socketIsTls = transportSocketName.equals(TRANSPORT_SOCKET_NAME_TLS);
268+
boolean socketIsH1Proxy = transportSocketName.equals(TRANSPORT_SOCKET_NAME_HTTP11_PROXY);
269+
boolean supportSocketIsH1Proxy = isEnabledXdsHttpConnect && socketIsH1Proxy;
270+
271+
if (hasTransportSocket && !socketIsTls && !supportSocketIsH1Proxy) {
266272
return StructOrError.fromError(
267-
"transport-socket with name " + transportSocket.getName() + " not supported.");
273+
"transport-socket with name " + transportSocketName + " not supported, socketIsTls="
274+
+ socketIsTls + ", socketIsH1Proxy=" + socketIsH1Proxy
275+
+ ", isEnabledXdsHttpConnect=" + isEnabledXdsHttpConnect
276+
+ ", supportSocketIsH1Proxy=" + supportSocketIsH1Proxy + ".");
268277
}
269278

270-
if (hasTransportSocket && isEnabledXdsHttpConnect
271-
&& TRANSPORT_SOCKET_NAME_HTTP11_PROXY.equals(transportSocket.getName())) {
279+
if (hasTransportSocket && supportSocketIsH1Proxy) {
272280
isHttp11ProxyAvailable = true;
273281
try {
274282
Http11ProxyUpstreamTransport wrappedTransportSocket = transportSocket

xds/src/test/java/io/grpc/xds/GrpcXdsClientImplDataTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.google.common.truth.Truth.assertThat;
2020
import static io.envoyproxy.envoy.config.route.v3.RouteAction.ClusterSpecifierCase.CLUSTER_SPECIFIER_PLUGIN;
2121
import static io.grpc.xds.XdsClusterResource.TRANSPORT_SOCKET_NAME_HTTP11_PROXY;
22+
import static io.grpc.xds.XdsClusterResource.TRANSPORT_SOCKET_NAME_RAW_BUFFER;
2223
import static io.grpc.xds.XdsEndpointResource.GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS;
2324
import static org.junit.Assert.assertThrows;
2425
import static org.junit.Assert.fail;
@@ -97,6 +98,7 @@
9798
import io.envoyproxy.envoy.extensions.load_balancing_policies.client_side_weighted_round_robin.v3.ClientSideWeightedRoundRobin;
9899
import io.envoyproxy.envoy.extensions.load_balancing_policies.wrr_locality.v3.WrrLocality;
99100
import io.envoyproxy.envoy.extensions.transport_sockets.http_11_proxy.v3.Http11ProxyUpstreamTransport;
101+
import io.envoyproxy.envoy.extensions.transport_sockets.raw_buffer.v3.RawBuffer;
100102
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateProviderPluginInstance;
101103
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext;
102104
import io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CommonTlsContext;
@@ -2639,6 +2641,50 @@ public void parseNonAggregateCluster_withHttp11ProxyTransportSocket() throws Exc
26392641
assertThat(result.isHttp11ProxyAvailable()).isTrue();
26402642
}
26412643

2644+
/**
2645+
* Http11ProxyUpstreamTransport with transport_socket=RawBuffer must behave the same as
2646+
* when transport_socket is unset.
2647+
*/
2648+
@Test
2649+
public void parseNonAggregateCluster_withHttp11ProxyTransportSocket_rawBuffer() throws Exception {
2650+
XdsClusterResource.isEnabledXdsHttpConnect = true;
2651+
2652+
// Nested transport_socket (Http11ProxyUpstreamTransport.transport_socket).
2653+
TransportSocket transportSocketRawBuffer = TransportSocket.newBuilder()
2654+
.setName(TRANSPORT_SOCKET_NAME_RAW_BUFFER)
2655+
.setTypedConfig(Any.pack(RawBuffer.getDefaultInstance()))
2656+
.build();
2657+
2658+
Http11ProxyUpstreamTransport http11ProxyUpstreamTransport =
2659+
Http11ProxyUpstreamTransport.newBuilder()
2660+
.setTransportSocket(transportSocketRawBuffer)
2661+
.build();
2662+
2663+
TransportSocket transportSocket = TransportSocket.newBuilder()
2664+
.setName(TRANSPORT_SOCKET_NAME_HTTP11_PROXY)
2665+
.setTypedConfig(Any.pack(http11ProxyUpstreamTransport))
2666+
.build();
2667+
2668+
Cluster cluster = Cluster.newBuilder()
2669+
.setName("cluster-http11-proxy.googleapis.com")
2670+
.setType(DiscoveryType.EDS)
2671+
.setEdsClusterConfig(
2672+
EdsClusterConfig.newBuilder()
2673+
.setEdsConfig(
2674+
ConfigSource.newBuilder().setAds(AggregatedConfigSource.getDefaultInstance()))
2675+
.setServiceName("service-http11-proxy.googleapis.com"))
2676+
.setLbPolicy(LbPolicy.ROUND_ROBIN)
2677+
.setTransportSocket(transportSocket)
2678+
.build();
2679+
2680+
CdsUpdate result =
2681+
XdsClusterResource.processCluster(cluster, null, LRS_SERVER_INFO,
2682+
LoadBalancerRegistry.getDefaultRegistry());
2683+
2684+
assertThat(result).isNotNull();
2685+
assertThat(result.isHttp11ProxyAvailable()).isTrue();
2686+
}
2687+
26422688
@Test
26432689
public void processCluster_parsesOrcaLrsPropagationMetrics() throws ResourceInvalidException {
26442690
LoadStatsManager2.isEnabledOrcaLrsPropagation = true;

xds/third_party/envoy/import.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.proto
9696
envoy/extensions/load_balancing_policies/round_robin/v3/round_robin.proto
9797
envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.proto
9898
envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.proto
99+
envoy/extensions/transport_sockets/raw_buffer/v3/raw_buffer.proto
99100
envoy/extensions/transport_sockets/tls/v3/cert.proto
100101
envoy/extensions/transport_sockets/tls/v3/common.proto
101102
envoy/extensions/transport_sockets/tls/v3/secret.proto
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
syntax = "proto3";
2+
3+
package envoy.extensions.transport_sockets.raw_buffer.v3;
4+
5+
import "udpa/annotations/status.proto";
6+
import "udpa/annotations/versioning.proto";
7+
8+
option java_package = "io.envoyproxy.envoy.extensions.transport_sockets.raw_buffer.v3";
9+
option java_outer_classname = "RawBufferProto";
10+
option java_multiple_files = true;
11+
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/transport_sockets/raw_buffer/v3;raw_bufferv3";
12+
option (udpa.annotations.file_status).package_version_status = ACTIVE;
13+
14+
// [#protodoc-title: Raw Buffer]
15+
// [#extension: envoy.transport_sockets.raw_buffer]
16+
17+
// Configuration for raw buffer transport socket.
18+
message RawBuffer {
19+
option (udpa.annotations.versioning).previous_message_type =
20+
"envoy.config.transport_socket.raw_buffer.v2.RawBuffer";
21+
}

0 commit comments

Comments
 (0)