diff --git a/xds/src/main/java/io/grpc/xds/FaultFilter.java b/xds/src/main/java/io/grpc/xds/FaultFilter.java index 2012fd36b6..0f3bb5b055 100644 --- a/xds/src/main/java/io/grpc/xds/FaultFilter.java +++ b/xds/src/main/java/io/grpc/xds/FaultFilter.java @@ -99,7 +99,7 @@ final class FaultFilter implements Filter { } @Override - public FaultFilter newInstance() { + public FaultFilter newInstance(String name) { return INSTANCE; } diff --git a/xds/src/main/java/io/grpc/xds/Filter.java b/xds/src/main/java/io/grpc/xds/Filter.java index aa326b55ad..416d929bec 100644 --- a/xds/src/main/java/io/grpc/xds/Filter.java +++ b/xds/src/main/java/io/grpc/xds/Filter.java @@ -87,7 +87,7 @@ interface Filter extends Closeable { *
  • Filter name+typeUrl in FilterChain's HCM.http_filters.
  • * */ - Filter newInstance(); + Filter newInstance(String name); /** * Parses the top-level filter config from raw proto message. The message may be either a {@link diff --git a/xds/src/main/java/io/grpc/xds/GcpAuthenticationFilter.java b/xds/src/main/java/io/grpc/xds/GcpAuthenticationFilter.java index 41687817c4..add885c641 100644 --- a/xds/src/main/java/io/grpc/xds/GcpAuthenticationFilter.java +++ b/xds/src/main/java/io/grpc/xds/GcpAuthenticationFilter.java @@ -64,7 +64,7 @@ final class GcpAuthenticationFilter implements Filter { } @Override - public GcpAuthenticationFilter newInstance() { + public GcpAuthenticationFilter newInstance(String name) { return new GcpAuthenticationFilter(); } diff --git a/xds/src/main/java/io/grpc/xds/InternalRbacFilter.java b/xds/src/main/java/io/grpc/xds/InternalRbacFilter.java index cedb3f4c85..476adbf9cf 100644 --- a/xds/src/main/java/io/grpc/xds/InternalRbacFilter.java +++ b/xds/src/main/java/io/grpc/xds/InternalRbacFilter.java @@ -33,7 +33,7 @@ public final class InternalRbacFilter { throw new IllegalArgumentException( String.format("Failed to parse Rbac policy: %s", filterConfig.errorDetail)); } - return new RbacFilter.Provider().newInstance() + return new RbacFilter.Provider().newInstance("internalRbacFilter") .buildServerInterceptor(filterConfig.config, null); } } diff --git a/xds/src/main/java/io/grpc/xds/RbacFilter.java b/xds/src/main/java/io/grpc/xds/RbacFilter.java index 2bc4eeb846..d91884735e 100644 --- a/xds/src/main/java/io/grpc/xds/RbacFilter.java +++ b/xds/src/main/java/io/grpc/xds/RbacFilter.java @@ -89,7 +89,7 @@ final class RbacFilter implements Filter { } @Override - public RbacFilter newInstance() { + public RbacFilter newInstance(String name) { return INSTANCE; } diff --git a/xds/src/main/java/io/grpc/xds/RouterFilter.java b/xds/src/main/java/io/grpc/xds/RouterFilter.java index 939bd0b12a..504c421314 100644 --- a/xds/src/main/java/io/grpc/xds/RouterFilter.java +++ b/xds/src/main/java/io/grpc/xds/RouterFilter.java @@ -56,7 +56,7 @@ final class RouterFilter implements Filter { } @Override - public RouterFilter newInstance() { + public RouterFilter newInstance(String name) { return INSTANCE; } diff --git a/xds/src/main/java/io/grpc/xds/XdsNameResolver.java b/xds/src/main/java/io/grpc/xds/XdsNameResolver.java index bbe36bdd74..7704a4a09d 100644 --- a/xds/src/main/java/io/grpc/xds/XdsNameResolver.java +++ b/xds/src/main/java/io/grpc/xds/XdsNameResolver.java @@ -704,7 +704,8 @@ final class XdsNameResolver extends NameResolver { Filter.Provider provider = filterRegistry.get(typeUrl); checkNotNull(provider, "provider %s", typeUrl); - Filter filter = activeFilters.computeIfAbsent(filterKey, k -> provider.newInstance()); + Filter filter = activeFilters.computeIfAbsent( + filterKey, k -> provider.newInstance(namedFilter.name)); checkNotNull(filter, "filter %s", filterKey); filtersToShutdown.remove(filterKey); } diff --git a/xds/src/main/java/io/grpc/xds/XdsServerWrapper.java b/xds/src/main/java/io/grpc/xds/XdsServerWrapper.java index e018597486..6625bd8178 100644 --- a/xds/src/main/java/io/grpc/xds/XdsServerWrapper.java +++ b/xds/src/main/java/io/grpc/xds/XdsServerWrapper.java @@ -560,7 +560,8 @@ final class XdsServerWrapper extends Server { Filter.Provider provider = filterRegistry.get(typeUrl); checkNotNull(provider, "provider %s", typeUrl); - Filter filter = chainFilters.computeIfAbsent(filterKey, k -> provider.newInstance()); + Filter filter = chainFilters.computeIfAbsent( + filterKey, k -> provider.newInstance(namedFilter.name)); checkNotNull(filter, "filter %s", filterKey); filtersToShutdown.remove(filterKey); } diff --git a/xds/src/test/java/io/grpc/xds/GrpcXdsClientImplDataTest.java b/xds/src/test/java/io/grpc/xds/GrpcXdsClientImplDataTest.java index 90b83320d6..bfaa17245c 100644 --- a/xds/src/test/java/io/grpc/xds/GrpcXdsClientImplDataTest.java +++ b/xds/src/test/java/io/grpc/xds/GrpcXdsClientImplDataTest.java @@ -1267,7 +1267,7 @@ public class GrpcXdsClientImplDataTest { } @Override - public TestFilter newInstance() { + public TestFilter newInstance(String name) { return new TestFilter(); } diff --git a/xds/src/test/java/io/grpc/xds/RbacFilterTest.java b/xds/src/test/java/io/grpc/xds/RbacFilterTest.java index 7f195693d8..334e159dd1 100644 --- a/xds/src/test/java/io/grpc/xds/RbacFilterTest.java +++ b/xds/src/test/java/io/grpc/xds/RbacFilterTest.java @@ -80,6 +80,8 @@ public class RbacFilterTest { StringMatcher.newBuilder().setExact("/" + PATH).setIgnoreCase(true).build(); private static final RbacFilter.Provider FILTER_PROVIDER = new RbacFilter.Provider(); + private final String name = "theFilterName"; + @Test public void filterType_serverOnly() { assertThat(FILTER_PROVIDER.isClientFilter()).isFalse(); @@ -259,7 +261,7 @@ public class RbacFilterTest { OrMatcher.create(AlwaysTrueMatcher.INSTANCE)); AuthConfig authconfig = AuthConfig.create(Collections.singletonList(policyMatcher), GrpcAuthorizationEngine.Action.ALLOW); - FILTER_PROVIDER.newInstance().buildServerInterceptor(RbacConfig.create(authconfig), null) + FILTER_PROVIDER.newInstance(name).buildServerInterceptor(RbacConfig.create(authconfig), null) .interceptCall(mockServerCall, new Metadata(), mockHandler); verify(mockHandler, never()).startCall(eq(mockServerCall), any(Metadata.class)); ArgumentCaptor captor = ArgumentCaptor.forClass(Status.class); @@ -271,7 +273,7 @@ public class RbacFilterTest { authconfig = AuthConfig.create(Collections.singletonList(policyMatcher), GrpcAuthorizationEngine.Action.DENY); - FILTER_PROVIDER.newInstance().buildServerInterceptor(RbacConfig.create(authconfig), null) + FILTER_PROVIDER.newInstance(name).buildServerInterceptor(RbacConfig.create(authconfig), null) .interceptCall(mockServerCall, new Metadata(), mockHandler); verify(mockHandler).startCall(eq(mockServerCall), any(Metadata.class)); } @@ -322,7 +324,7 @@ public class RbacFilterTest { RbacConfig override = FILTER_PROVIDER.parseFilterConfigOverride(Any.pack(rbacPerRoute)).config; assertThat(override).isEqualTo(RbacConfig.create(null)); ServerInterceptor interceptor = - FILTER_PROVIDER.newInstance().buildServerInterceptor(original, override); + FILTER_PROVIDER.newInstance(name).buildServerInterceptor(original, override); assertThat(interceptor).isNull(); policyMatcher = PolicyMatcher.create("policy-matcher-override", @@ -332,7 +334,7 @@ public class RbacFilterTest { GrpcAuthorizationEngine.Action.ALLOW); override = RbacConfig.create(authconfig); - FILTER_PROVIDER.newInstance().buildServerInterceptor(original, override) + FILTER_PROVIDER.newInstance(name).buildServerInterceptor(original, override) .interceptCall(mockServerCall, new Metadata(), mockHandler); verify(mockHandler).startCall(eq(mockServerCall), any(Metadata.class)); verify(mockServerCall).getAttributes(); diff --git a/xds/src/test/java/io/grpc/xds/StatefulFilter.java b/xds/src/test/java/io/grpc/xds/StatefulFilter.java index 162dd380da..4ef662c7cc 100644 --- a/xds/src/test/java/io/grpc/xds/StatefulFilter.java +++ b/xds/src/test/java/io/grpc/xds/StatefulFilter.java @@ -108,7 +108,7 @@ class StatefulFilter implements Filter { } @Override - public synchronized StatefulFilter newInstance() { + public synchronized StatefulFilter newInstance(String name) { StatefulFilter filter = new StatefulFilter(counter++); instances.put(filter.idx, filter); return filter; diff --git a/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java b/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java index 371c421373..622084d430 100644 --- a/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsNameResolverTest.java @@ -219,7 +219,7 @@ public class XdsNameResolverTest { // Lenient: suppress [MockitoHint] Unused warning, only used in resolved_fault* tests. lenient() .doReturn(new FaultFilter(mockRandom, new AtomicLong())) - .when(faultFilterProvider).newInstance(); + .when(faultFilterProvider).newInstance(any(String.class)); FilterRegistry filterRegistry = FilterRegistry.newRegistry().register( ROUTER_FILTER_PROVIDER, diff --git a/xds/src/test/java/io/grpc/xds/XdsServerWrapperTest.java b/xds/src/test/java/io/grpc/xds/XdsServerWrapperTest.java index b866e10c55..e5f0f44cba 100644 --- a/xds/src/test/java/io/grpc/xds/XdsServerWrapperTest.java +++ b/xds/src/test/java/io/grpc/xds/XdsServerWrapperTest.java @@ -1135,7 +1135,7 @@ public class XdsServerWrapperTest { Filter.Provider filterProvider = mock(Filter.Provider.class); when(filterProvider.typeUrls()).thenReturn(new String[]{"filter-type-url"}); when(filterProvider.isServerFilter()).thenReturn(true); - when(filterProvider.newInstance()).thenReturn(filter); + when(filterProvider.newInstance(any(String.class))).thenReturn(filter); filterRegistry.register(filterProvider); FilterConfig f0 = mock(FilterConfig.class); @@ -1208,7 +1208,7 @@ public class XdsServerWrapperTest { Filter.Provider filterProvider = mock(Filter.Provider.class); when(filterProvider.typeUrls()).thenReturn(new String[]{"filter-type-url"}); when(filterProvider.isServerFilter()).thenReturn(true); - when(filterProvider.newInstance()).thenReturn(filter); + when(filterProvider.newInstance(any(String.class))).thenReturn(filter); filterRegistry.register(filterProvider); FilterConfig f0 = mock(FilterConfig.class);