Skip to content

Commit c75ba11

Browse files
committed
xds: Add client-side latency metrics for ext_proc HTTP filter
TAG=agy
1 parent 08d9464 commit c75ba11

19 files changed

Lines changed: 453 additions & 177 deletions

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

Lines changed: 209 additions & 65 deletions
Large diffs are not rendered by default.

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@
1616

1717
package io.grpc.xds;
1818

19-
import io.grpc.xds.Filter.FilterContext;
20-
21-
import io.grpc.xds.Filter.FilterConfigParseContext;
22-
2319
import static com.google.common.base.Preconditions.checkNotNull;
2420
import static java.util.concurrent.TimeUnit.NANOSECONDS;
2521

@@ -49,6 +45,8 @@
4945
import io.grpc.internal.GrpcUtil;
5046
import io.grpc.xds.FaultConfig.FaultAbort;
5147
import io.grpc.xds.FaultConfig.FaultDelay;
48+
import io.grpc.xds.Filter.FilterConfigParseContext;
49+
import io.grpc.xds.Filter.FilterContext;
5250
import io.grpc.xds.ThreadSafeRandom.ThreadSafeRandomImpl;
5351
import java.util.Locale;
5452
import java.util.concurrent.Executor;
@@ -103,7 +101,7 @@ public boolean isClientFilter() {
103101
}
104102

105103
@Override
106-
public FaultFilter newInstance(String name) {
104+
public FaultFilter newInstance(FilterContext context) {
107105
return INSTANCE;
108106
}
109107

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ default boolean isServerFilter() {
9292
* <li>Filter name+typeUrl in FilterChain's HCM.http_filters.</li>
9393
* </ol>
9494
*/
95-
Filter newInstance(String name);
95+
Filter newInstance(FilterContext context);
9696

9797
/**
9898
* Parses the top-level filter config from raw proto message. The message may be either a {@link

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@
1616

1717
package io.grpc.xds;
1818

19-
import io.grpc.xds.Filter.FilterContext;
20-
21-
import io.grpc.xds.Filter.FilterConfigParseContext;
22-
2319
import static com.google.common.base.Preconditions.checkNotNull;
2420
import static io.grpc.xds.XdsNameResolver.CLUSTER_SELECTION_KEY;
2521
import static io.grpc.xds.XdsNameResolver.XDS_CONFIG_CALL_OPTION_KEY;
@@ -45,6 +41,8 @@
4541
import io.grpc.Status;
4642
import io.grpc.StatusOr;
4743
import io.grpc.auth.MoreCallCredentials;
44+
import io.grpc.xds.Filter.FilterConfigParseContext;
45+
import io.grpc.xds.Filter.FilterContext;
4846
import io.grpc.xds.GcpAuthenticationFilter.AudienceMetadataParser.AudienceWrapper;
4947
import io.grpc.xds.MetadataRegistry.MetadataValueParser;
5048
import io.grpc.xds.XdsConfig.XdsClusterConfig;
@@ -85,8 +83,8 @@ public boolean isClientFilter() {
8583
}
8684

8785
@Override
88-
public GcpAuthenticationFilter newInstance(String name) {
89-
return new GcpAuthenticationFilter(name, cacheSize);
86+
public GcpAuthenticationFilter newInstance(FilterContext context) {
87+
return new GcpAuthenticationFilter(context.filterName(), cacheSize);
9088
}
9189

9290
@Override

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.envoyproxy.envoy.extensions.filters.http.rbac.v3.RBAC;
2020
import io.grpc.Internal;
2121
import io.grpc.ServerInterceptor;
22+
import io.grpc.xds.Filter.FilterContext;
2223

2324
/** This class exposes some functionality in RbacFilter to other packages. */
2425
@Internal
@@ -33,7 +34,8 @@ public static ServerInterceptor createInterceptor(RBAC rbac) {
3334
throw new IllegalArgumentException(
3435
String.format("Failed to parse Rbac policy: %s", filterConfig.errorDetail));
3536
}
36-
return new RbacFilter.Provider().newInstance("internalRbacFilter")
37+
return new RbacFilter.Provider().newInstance(
38+
FilterContext.create("internalRbacFilter", new io.grpc.MetricRecorder() {}))
3739
.buildServerInterceptor(filterConfig.config, null);
3840
}
3941
}

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@
1616

1717
package io.grpc.xds;
1818

19-
import io.grpc.xds.Filter.FilterContext;
20-
21-
import io.grpc.xds.Filter.FilterConfigParseContext;
22-
2319
import static com.google.common.base.Preconditions.checkNotNull;
2420

2521
import com.google.protobuf.Any;
@@ -37,6 +33,8 @@
3733
import io.grpc.ServerCallHandler;
3834
import io.grpc.ServerInterceptor;
3935
import io.grpc.Status;
36+
import io.grpc.xds.Filter.FilterConfigParseContext;
37+
import io.grpc.xds.Filter.FilterContext;
4038
import io.grpc.xds.internal.MatcherParser;
4139
import io.grpc.xds.internal.Matchers;
4240
import io.grpc.xds.internal.rbac.engine.GrpcAuthorizationEngine;
@@ -93,7 +91,7 @@ public boolean isServerFilter() {
9391
}
9492

9593
@Override
96-
public RbacFilter newInstance(String name) {
94+
public RbacFilter newInstance(FilterContext context) {
9795
return INSTANCE;
9896
}
9997

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616

1717
package io.grpc.xds;
1818

19-
import io.grpc.xds.Filter.FilterContext;
20-
21-
import io.grpc.xds.Filter.FilterConfigParseContext;
22-
2319
import com.google.protobuf.Message;
20+
import io.grpc.xds.Filter.FilterConfigParseContext;
21+
import io.grpc.xds.Filter.FilterContext;
2422

2523
/**
2624
* Router filter implementation. Currently this filter does not parse any field in the config.
@@ -60,7 +58,7 @@ public boolean isServerFilter() {
6058
}
6159

6260
@Override
63-
public RouterFilter newInstance(String name) {
61+
public RouterFilter newInstance(FilterContext context) {
6462
return INSTANCE;
6563
}
6664

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package io.grpc.xds;
1818

19-
import io.grpc.xds.Filter.FilterConfigParseContext;
20-
2119
import static com.google.common.base.Preconditions.checkNotNull;
2220
import static io.grpc.xds.XdsClusterResource.validateCommonTlsContext;
2321
import static io.grpc.xds.XdsRouteConfigureResource.extractVirtualHosts;
@@ -620,7 +618,7 @@ static StructOrError<Filter.FilterConfig> parseHttpFilter(
620618
isForClient ? "client" : "server"));
621619
}
622620

623-
FilterConfigParseContext filterContext = FilterConfigParseContext.builder()
621+
Filter.FilterConfigParseContext filterContext = Filter.FilterConfigParseContext.builder()
624622
.bootstrapInfo(args.getBootstrapInfo())
625623
.serverInfo(args.getServerInfo())
626624
.build();

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import io.grpc.internal.ObjectPool;
5252
import io.grpc.xds.ClusterSpecifierPlugin.PluginConfig;
5353
import io.grpc.xds.Filter.FilterConfig;
54+
import io.grpc.xds.Filter.FilterContext;
5455
import io.grpc.xds.Filter.NamedFilterConfig;
5556
import io.grpc.xds.RouteLookupServiceClusterSpecifierPlugin.RlsPluginConfig;
5657
import io.grpc.xds.ThreadSafeRandom.ThreadSafeRandomImpl;
@@ -121,7 +122,6 @@ final class XdsNameResolver extends NameResolver {
121122
private final ThreadSafeRandom random;
122123
private final FilterRegistry filterRegistry;
123124
private final XxHash64 hashFunc = XxHash64.INSTANCE;
124-
// Clusters (with reference counts) to which new/existing requests can be/are routed.
125125
// put()/remove() must be called in SyncContext, and get() can be called in any thread.
126126
private final ConcurrentMap<String, ClusterRefState> clusterRefs = new ConcurrentHashMap<>();
127127
private final ConfigSelector configSelector = new ConfigSelector();
@@ -138,6 +138,7 @@ final class XdsNameResolver extends NameResolver {
138138
private CallCounterProvider callCounterProvider;
139139
private ResolveState resolveState;
140140

141+
141142
/**
142143
* Constructs a new instance.
143144
*
@@ -742,7 +743,9 @@ private void updateActiveFilters(@Nullable List<NamedFilterConfig> filterConfigs
742743
Filter.Provider provider = filterRegistry.get(typeUrl);
743744
checkNotNull(provider, "provider %s", typeUrl);
744745
Filter filter = activeFilters.computeIfAbsent(
745-
filterKey, k -> provider.newInstance(namedFilter.name));
746+
filterKey, k -> provider.newInstance(
747+
FilterContext.create(
748+
namedFilter.name, nameResolverArgs.getMetricRecorder())));
746749
checkNotNull(filter, "filter %s", filterKey);
747750
filtersToShutdown.remove(filterKey);
748751
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package io.grpc.xds;
1818

19-
import io.grpc.xds.Filter.FilterConfigParseContext;
20-
2119
import static com.google.common.base.Preconditions.checkNotNull;
2220

2321
import com.github.udpa.udpa.type.v1.TypedStruct;
@@ -214,7 +212,7 @@ private static StructOrError<VirtualHost> parseVirtualHost(
214212
static StructOrError<Map<String, FilterConfig>> parseOverrideFilterConfigs(
215213
Map<String, Any> rawFilterConfigMap, FilterRegistry filterRegistry,
216214
XdsResourceType.Args args) {
217-
FilterConfigParseContext context = FilterConfigParseContext.builder()
215+
Filter.FilterConfigParseContext context = Filter.FilterConfigParseContext.builder()
218216
.bootstrapInfo(args.getBootstrapInfo())
219217
.serverInfo(args.getServerInfo())
220218
.build();

0 commit comments

Comments
 (0)