Skip to content

Commit dc66629

Browse files
committed
h11 proxy parsing bug: check for name, not type
1 parent 582c6ba commit dc66629

2 files changed

Lines changed: 29 additions & 12 deletions

File tree

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

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,20 @@ class XdsClusterResource extends XdsResourceType<CdsUpdate> {
8383
"type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext";
8484
private static final String TYPE_URL_UPSTREAM_TLS_CONTEXT_V2 =
8585
"type.googleapis.com/envoy.api.v2.auth.UpstreamTlsContext";
86-
static final String TRANSPORT_SOCKET_NAME_HTTP11_PROXY =
87-
"type.googleapis.com/envoy.extensions.transport_sockets.http_11_proxy.v3"
88-
+ ".Http11ProxyUpstreamTransport";
89-
static final String TRANSPORT_SOCKET_NAME_RAW_BUFFER =
90-
"type.googleapis.com/envoy.extensions.transport_sockets.raw_buffer.v3.RawBuffer";
86+
87+
// TODO(sergiitk): should this be in XdsResourceType next to TRANSPORT_SOCKET_NAME_TLS?
88+
@VisibleForTesting
89+
static final String TRANSPORT_SOCKET_NAME_HTTP11_PROXY = "envoy.transport_sockets.http_11_proxy";
90+
@VisibleForTesting
91+
static final String TRANSPORT_SOCKET_NAME_RAW_BUFFER = "envoy.transport_sockets.raw_buffer";
92+
93+
// TODO(sergiitk): tell Eric about the bug.
94+
// static final String TRANSPORT_SOCKET_NAME_HTTP11_PROXY =
95+
// "type.googleapis.com/envoy.extensions.transport_sockets.http_11_proxy.v3"
96+
// + ".Http11ProxyUpstreamTransport";
97+
// static final String TRANSPORT_SOCKET_NAME_RAW_BUFFER =
98+
// "type.googleapis.com/envoy.extensions.transport_sockets.raw_buffer.v3.RawBuffer";
99+
91100
private final LoadBalancerRegistry loadBalancerRegistry
92101
= LoadBalancerRegistry.getDefaultRegistry();
93102
private static final XdsLogger logger = XdsLogger.withLogId(
@@ -282,19 +291,29 @@ private static StructOrError<CdsUpdate.Builder> parseNonAggregateCluster(
282291
+ ", socketIsH1Proxy=" + socketIsH1Proxy
283292
+ ", isEnabledXdsHttpConnect=" + isEnabledXdsHttpConnect
284293
+ ", socketIsH1ProxyAndSupported=" + socketIsH1ProxyAndSupported + ".";
285-
logger.log(XdsLogLevel.ERROR, extraErrorMsg);
294+
logger.log(XdsLogLevel.FORCE_WARNING, extraErrorMsg);
286295

287296
return StructOrError.fromError(errMsg + ".");
288297
}
289298

290299
if (hasTransportSocket && socketIsH1ProxyAndSupported) {
300+
logger.log(XdsLogLevel.FORCE_INFO, "Enabling HTTP11 Proxy, trying to parse");
291301
isHttp11ProxyAvailable = true;
302+
292303
try {
293304
Http11ProxyUpstreamTransport wrappedTransportSocket = transportSocket
294-
.getTypedConfig().unpack(io.envoyproxy.envoy.extensions.transport_sockets
295-
.http_11_proxy.v3.Http11ProxyUpstreamTransport.class);
305+
.getTypedConfig().unpack(Http11ProxyUpstreamTransport.class);
306+
296307
hasTransportSocket = wrappedTransportSocket.hasTransportSocket();
297308
transportSocket = wrappedTransportSocket.getTransportSocket();
309+
transportSocketName = hasTransportSocket ? transportSocket.getName() : "<wrapped-invalid>";
310+
311+
logger.log(XdsLogLevel.FORCE_INFO,
312+
"Enabled HTTP11 Proxy, wrapped socket: " + transportSocketName
313+
);
314+
315+
// TODO(sergiitk): tell Eric this is missing the wrapped socket check.
316+
298317
} catch (InvalidProtocolBufferException e) {
299318
return StructOrError.fromError(
300319
"Cluster " + clusterName + ": malformed Http11ProxyUpstreamTransport: " + e);

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -416,8 +416,7 @@ public void endpointAddressRewritten_whenProxyMetadataIsInEndpointMetadata() {
416416
XdsClusterResource.isEnabledXdsHttpConnect = true;
417417
Cluster cluster = EDS_CLUSTER.toBuilder()
418418
.setTransportSocket(TransportSocket.newBuilder()
419-
.setName(
420-
"type.googleapis.com/" + Http11ProxyUpstreamTransport.getDescriptor().getFullName())
419+
.setName("envoy.transport_sockets.http_11_proxy")
421420
.setTypedConfig(Any.pack(Http11ProxyUpstreamTransport.getDefaultInstance())))
422421
.build();
423422
// Proxy address in endpointMetadata, and no proxy in locality metadata
@@ -466,8 +465,7 @@ public void endpointAddressRewritten_whenProxyMetadataIsInLocalityMetadata() {
466465
XdsClusterResource.isEnabledXdsHttpConnect = true;
467466
Cluster cluster = EDS_CLUSTER.toBuilder()
468467
.setTransportSocket(TransportSocket.newBuilder()
469-
.setName(
470-
"type.googleapis.com/" + Http11ProxyUpstreamTransport.getDescriptor().getFullName())
468+
.setName("envoy.transport_sockets.http_11_proxy")
471469
.setTypedConfig(Any.pack(Http11ProxyUpstreamTransport.getDefaultInstance())))
472470
.build();
473471
// No proxy address in endpointMetadata, and proxy in locality metadata

0 commit comments

Comments
 (0)