Skip to content

Commit c940c80

Browse files
committed
Resolve Filter.java merge conflict
2 parents fc06747 + c91a798 commit c940c80

32 files changed

Lines changed: 809 additions & 305 deletions

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ public FaultFilter newInstance(String name, GrpcServiceXdsContextProvider grpcSe
105105
}
106106

107107
@Override
108-
public ConfigOrError<FaultConfig> parseFilterConfig(Message rawProtoMessage) {
108+
public ConfigOrError<FaultConfig> parseFilterConfig(
109+
Message rawProtoMessage, FilterContext context) {
109110
HTTPFault httpFaultProto;
110111
if (!(rawProtoMessage instanceof Any)) {
111112
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());
@@ -120,8 +121,9 @@ public ConfigOrError<FaultConfig> parseFilterConfig(Message rawProtoMessage) {
120121
}
121122

122123
@Override
123-
public ConfigOrError<FaultConfig> parseFilterConfigOverride(Message rawProtoMessage) {
124-
return parseFilterConfig(rawProtoMessage);
124+
public ConfigOrError<FaultConfig> parseFilterConfigOverride(
125+
Message rawProtoMessage, FilterContext context) {
126+
return parseFilterConfig(rawProtoMessage, context);
125127
}
126128

127129
private static ConfigOrError<FaultConfig> parseHttpFault(HTTPFault httpFault) {

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

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616

1717
package io.grpc.xds;
1818

19+
20+
import com.google.auto.value.AutoValue;
1921
import com.google.common.base.MoreObjects;
2022
import com.google.protobuf.Message;
2123
import io.grpc.ClientInterceptor;
2224
import io.grpc.ServerInterceptor;
23-
import io.grpc.xds.internal.grpcservice.GrpcServiceXdsContextProvider;
25+
import io.grpc.xds.client.Bootstrapper.BootstrapInfo;
26+
import io.grpc.xds.client.Bootstrapper.ServerInfo;
2427
import java.io.Closeable;
2528
import java.util.Objects;
2629
import java.util.concurrent.ScheduledExecutorService;
@@ -88,19 +91,21 @@ default boolean isServerFilter() {
8891
* <li>Filter name+typeUrl in FilterChain's HCM.http_filters.</li>
8992
* </ol>
9093
*/
91-
Filter newInstance(String name, GrpcServiceXdsContextProvider grpcServiceXdsContextProvider);
94+
Filter newInstance(String name);
9295

9396
/**
9497
* Parses the top-level filter config from raw proto message. The message may be either a {@link
9598
* com.google.protobuf.Any} or a {@link com.google.protobuf.Struct}.
9699
*/
97-
ConfigOrError<? extends FilterConfig> parseFilterConfig(Message rawProtoMessage);
100+
ConfigOrError<? extends FilterConfig> parseFilterConfig(
101+
Message rawProtoMessage, FilterContext context);
98102

99103
/**
100104
* Parses the per-filter override filter config from raw proto message. The message may be
101105
* either a {@link com.google.protobuf.Any} or a {@link com.google.protobuf.Struct}.
102106
*/
103-
ConfigOrError<? extends FilterConfig> parseFilterConfigOverride(Message rawProtoMessage);
107+
ConfigOrError<? extends FilterConfig> parseFilterConfigOverride(
108+
Message rawProtoMessage, FilterContext context);
104109
}
105110

106111
/** Uses the FilterConfigs produced above to produce an HTTP filter interceptor for clients. */
@@ -126,6 +131,27 @@ default ServerInterceptor buildServerInterceptor(
126131
@Override
127132
default void close() {}
128133

134+
/** Context carrying dynamic metadata for a filter. */
135+
@AutoValue
136+
abstract static class FilterContext {
137+
abstract BootstrapInfo bootstrapInfo();
138+
139+
abstract ServerInfo serverInfo();
140+
141+
static Builder builder() {
142+
return new AutoValue_Filter_FilterContext.Builder();
143+
}
144+
145+
@AutoValue.Builder
146+
abstract static class Builder {
147+
abstract Builder bootstrapInfo(BootstrapInfo info);
148+
149+
abstract Builder serverInfo(ServerInfo info);
150+
151+
abstract FilterContext build();
152+
}
153+
}
154+
129155
/** Filter config with instance name. */
130156
final class NamedFilterConfig {
131157
// filter instance name

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ public GcpAuthenticationFilter newInstance(String name, GrpcServiceXdsContextPro
8787
}
8888

8989
@Override
90-
public ConfigOrError<GcpAuthenticationConfig> parseFilterConfig(Message rawProtoMessage) {
90+
public ConfigOrError<GcpAuthenticationConfig> parseFilterConfig(
91+
Message rawProtoMessage, FilterContext context) {
9192
GcpAuthnFilterConfig gcpAuthnProto;
9293
if (!(rawProtoMessage instanceof Any)) {
9394
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());
@@ -122,8 +123,8 @@ public ConfigOrError<GcpAuthenticationConfig> parseFilterConfig(Message rawProto
122123

123124
@Override
124125
public ConfigOrError<GcpAuthenticationConfig> parseFilterConfigOverride(
125-
Message rawProtoMessage) {
126-
return parseFilterConfig(rawProtoMessage);
126+
Message rawProtoMessage, FilterContext context) {
127+
return parseFilterConfig(rawProtoMessage, context);
127128
}
128129
}
129130

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@
2525
import io.grpc.xds.client.BootstrapperImpl;
2626
import io.grpc.xds.client.XdsInitializationException;
2727
import io.grpc.xds.client.XdsLogger;
28+
import io.grpc.xds.internal.grpcservice.AllowedGrpcService;
29+
import io.grpc.xds.internal.grpcservice.AllowedGrpcServices;
2830
import io.grpc.xds.internal.grpcservice.ChannelCredsConfig;
2931
import io.grpc.xds.internal.grpcservice.ConfiguredChannelCredentials;
30-
import io.grpc.xds.internal.grpcservice.GrpcServiceXdsContext;
3132
import java.io.IOException;
3233
import java.util.List;
3334
import java.util.Map;
@@ -163,7 +164,7 @@ private static ConfiguredChannelCredentials parseChannelCredentials(List<Map<Str
163164

164165
ChannelCredentials creds = provider.newChannelCredentials(config);
165166
if (creds == null) {
166-
continue;
167+
return null;
167168
}
168169
return ConfiguredChannelCredentials.create(creds, new JsonChannelCredsConfig(type, config));
169170
}
@@ -173,9 +174,13 @@ private static ConfiguredChannelCredentials parseChannelCredentials(List<Map<Str
173174

174175
@Override
175176
protected Optional<Object> parseAllowedGrpcServices(
176-
Map<String, ?> rawAllowedGrpcServices)
177+
@Nullable Map<String, ?> rawAllowedGrpcServices)
177178
throws XdsInitializationException {
178-
ImmutableMap.Builder<String, GrpcServiceXdsContext.AllowedGrpcService> builder =
179+
if (rawAllowedGrpcServices == null || rawAllowedGrpcServices.isEmpty()) {
180+
return Optional.of(AllowedGrpcServices.empty());
181+
}
182+
183+
ImmutableMap.Builder<String, AllowedGrpcService> builder =
179184
ImmutableMap.builder();
180185
for (String targetUri : rawAllowedGrpcServices.keySet()) {
181186
Map<String, ?> serviceConfig = JsonUtil.getObject(rawAllowedGrpcServices, targetUri);
@@ -193,13 +198,12 @@ protected Optional<Object> parseAllowedGrpcServices(
193198
parseCallCredentials(JsonUtil.checkObjectList(rawCallCredsList), targetUri);
194199
}
195200

196-
GrpcServiceXdsContext.AllowedGrpcService.Builder b = GrpcServiceXdsContext.AllowedGrpcService
197-
.builder().configuredChannelCredentials(configuredChannel);
201+
AllowedGrpcService.Builder b = AllowedGrpcService.builder()
202+
.configuredChannelCredentials(configuredChannel);
198203
callCredentials.ifPresent(b::callCredentials);
199204
builder.put(targetUri, b.build());
200205
}
201-
ImmutableMap<String, GrpcServiceXdsContext.AllowedGrpcService> parsed = builder.buildOrThrow();
202-
return parsed.isEmpty() ? Optional.empty() : Optional.of(parsed);
206+
return Optional.of(AllowedGrpcServices.create(builder.build()));
203207
}
204208

205209
@SuppressWarnings("unused")

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ public RbacFilter newInstance(String name, GrpcServiceXdsContextProvider grpcSer
9595
}
9696

9797
@Override
98-
public ConfigOrError<RbacConfig> parseFilterConfig(Message rawProtoMessage) {
98+
public ConfigOrError<RbacConfig> parseFilterConfig(
99+
Message rawProtoMessage, FilterContext context) {
99100
RBAC rbacProto;
100101
if (!(rawProtoMessage instanceof Any)) {
101102
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());
@@ -110,7 +111,8 @@ public ConfigOrError<RbacConfig> parseFilterConfig(Message rawProtoMessage) {
110111
}
111112

112113
@Override
113-
public ConfigOrError<RbacConfig> parseFilterConfigOverride(Message rawProtoMessage) {
114+
public ConfigOrError<RbacConfig> parseFilterConfigOverride(
115+
Message rawProtoMessage, FilterContext context) {
114116
RBACPerRoute rbacPerRoute;
115117
if (!(rawProtoMessage instanceof Any)) {
116118
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,14 @@ public RouterFilter newInstance(String name, GrpcServiceXdsContextProvider grpcS
6262
}
6363

6464
@Override
65-
public ConfigOrError<? extends FilterConfig> parseFilterConfig(Message rawProtoMessage) {
65+
public ConfigOrError<? extends FilterConfig> parseFilterConfig(
66+
Message rawProtoMessage, FilterContext context) {
6667
return ConfigOrError.fromConfig(ROUTER_CONFIG);
6768
}
6869

6970
@Override
7071
public ConfigOrError<? extends FilterConfig> parseFilterConfigOverride(
71-
Message rawProtoMessage) {
72+
Message rawProtoMessage, FilterContext context) {
7273
return ConfigOrError.fromError("Router Filter should not have override config");
7374
}
7475
}

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ static io.grpc.xds.HttpConnectionManager parseHttpConnectionManager(
527527
"HttpConnectionManager contains duplicate HttpFilter: " + filterName);
528528
}
529529
StructOrError<Filter.FilterConfig> filterConfig =
530-
parseHttpFilter(httpFilter, filterRegistry, isForClient);
530+
parseHttpFilter(httpFilter, filterRegistry, isForClient, args);
531531
if ((i == proto.getHttpFiltersCount() - 1)
532532
&& (filterConfig == null || !isTerminalFilter(filterConfig.getStruct()))) {
533533
throw new ResourceInvalidException("The last HttpFilter must be a terminal filter: "
@@ -581,7 +581,8 @@ private static boolean isTerminalFilter(Filter.FilterConfig filterConfig) {
581581
@Nullable // Returns null if the filter is optional but not supported.
582582
static StructOrError<Filter.FilterConfig> parseHttpFilter(
583583
io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter
584-
httpFilter, FilterRegistry filterRegistry, boolean isForClient) {
584+
httpFilter, FilterRegistry filterRegistry, boolean isForClient,
585+
XdsResourceType.Args args) {
585586
String filterName = httpFilter.getName();
586587
boolean isOptional = httpFilter.getIsOptional();
587588
if (!httpFilter.hasTypedConfig()) {
@@ -616,7 +617,13 @@ static StructOrError<Filter.FilterConfig> parseHttpFilter(
616617
"HttpFilter [" + filterName + "](" + typeUrl + ") is required but unsupported for " + (
617618
isForClient ? "client" : "server"));
618619
}
619-
ConfigOrError<? extends FilterConfig> filterConfig = provider.parseFilterConfig(rawConfig);
620+
621+
Filter.FilterContext filterContext = Filter.FilterContext.builder()
622+
.bootstrapInfo(args.getBootstrapInfo())
623+
.serverInfo(args.getServerInfo())
624+
.build();
625+
ConfigOrError<? extends FilterConfig> filterConfig =
626+
provider.parseFilterConfig(rawConfig, filterContext);
620627
if (filterConfig.errorDetail != null) {
621628
return StructOrError.fromError(
622629
"Invalid filter config for HttpFilter [" + filterName + "]: " + filterConfig.errorDetail);

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ private static StructOrError<VirtualHost> parseVirtualHost(
198198
routes.add(route.getStruct());
199199
}
200200
StructOrError<Map<String, Filter.FilterConfig>> overrideConfigs =
201-
parseOverrideFilterConfigs(proto.getTypedPerFilterConfigMap(), filterRegistry);
201+
parseOverrideFilterConfigs(proto.getTypedPerFilterConfigMap(), filterRegistry, args);
202202
if (overrideConfigs.getErrorDetail() != null) {
203203
return StructOrError.fromError(
204204
"VirtualHost [" + proto.getName() + "] contains invalid HttpFilter config: "
@@ -210,7 +210,12 @@ private static StructOrError<VirtualHost> parseVirtualHost(
210210

211211
@VisibleForTesting
212212
static StructOrError<Map<String, FilterConfig>> parseOverrideFilterConfigs(
213-
Map<String, Any> rawFilterConfigMap, FilterRegistry filterRegistry) {
213+
Map<String, Any> rawFilterConfigMap, FilterRegistry filterRegistry,
214+
XdsResourceType.Args args) {
215+
Filter.FilterContext context = Filter.FilterContext.builder()
216+
.bootstrapInfo(args.getBootstrapInfo())
217+
.serverInfo(args.getServerInfo())
218+
.build();
214219
Map<String, FilterConfig> overrideConfigs = new HashMap<>();
215220
for (String name : rawFilterConfigMap.keySet()) {
216221
Any anyConfig = rawFilterConfigMap.get(name);
@@ -254,7 +259,7 @@ static StructOrError<Map<String, FilterConfig>> parseOverrideFilterConfigs(
254259
"HttpFilter [" + name + "](" + typeUrl + ") is required but unsupported");
255260
}
256261
ConfigOrError<? extends Filter.FilterConfig> filterConfig =
257-
provider.parseFilterConfigOverride(rawConfig);
262+
provider.parseFilterConfigOverride(rawConfig, context);
258263
if (filterConfig.errorDetail != null) {
259264
return StructOrError.fromError(
260265
"Invalid filter config for HttpFilter [" + name + "]: " + filterConfig.errorDetail);
@@ -281,7 +286,7 @@ static StructOrError<Route> parseRoute(
281286
}
282287

283288
StructOrError<Map<String, FilterConfig>> overrideConfigsOrError =
284-
parseOverrideFilterConfigs(proto.getTypedPerFilterConfigMap(), filterRegistry);
289+
parseOverrideFilterConfigs(proto.getTypedPerFilterConfigMap(), filterRegistry, args);
285290
if (overrideConfigsOrError.getErrorDetail() != null) {
286291
return StructOrError.fromError(
287292
"Route [" + proto.getName() + "] contains invalid HttpFilter config: "
@@ -490,7 +495,7 @@ static StructOrError<RouteAction> parseRouteAction(
490495
for (io.envoyproxy.envoy.config.route.v3.WeightedCluster.ClusterWeight clusterWeight
491496
: clusterWeights) {
492497
StructOrError<ClusterWeight> clusterWeightOrError =
493-
parseClusterWeight(clusterWeight, filterRegistry);
498+
parseClusterWeight(clusterWeight, filterRegistry, args);
494499
if (clusterWeightOrError.getErrorDetail() != null) {
495500
return StructOrError.fromError("RouteAction contains invalid ClusterWeight: "
496501
+ clusterWeightOrError.getErrorDetail());
@@ -599,9 +604,9 @@ private static StructOrError<VirtualHost.Route.RouteAction.RetryPolicy> parseRet
599604
@VisibleForTesting
600605
static StructOrError<VirtualHost.Route.RouteAction.ClusterWeight> parseClusterWeight(
601606
io.envoyproxy.envoy.config.route.v3.WeightedCluster.ClusterWeight proto,
602-
FilterRegistry filterRegistry) {
607+
FilterRegistry filterRegistry, XdsResourceType.Args args) {
603608
StructOrError<Map<String, Filter.FilterConfig>> overrideConfigs =
604-
parseOverrideFilterConfigs(proto.getTypedPerFilterConfigMap(), filterRegistry);
609+
parseOverrideFilterConfigs(proto.getTypedPerFilterConfigMap(), filterRegistry, args);
605610
if (overrideConfigs.getErrorDetail() != null) {
606611
return StructOrError.fromError(
607612
"ClusterWeight [" + proto.getName() + "] contains invalid HttpFilter config: "

xds/src/main/java/io/grpc/xds/client/Bootstrapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,8 @@ public abstract static class BootstrapInfo {
216216
public static Builder builder() {
217217
return new AutoValue_Bootstrapper_BootstrapInfo.Builder()
218218
.clientDefaultListenerResourceNameTemplate("%s")
219-
.authorities(ImmutableMap.<String, AuthorityInfo>of());
219+
.authorities(ImmutableMap.<String, AuthorityInfo>of())
220+
.allowedGrpcServices(Optional.empty());
220221
}
221222

222223
@AutoValue.Builder

xds/src/main/java/io/grpc/xds/client/BootstrapperImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import java.util.HashMap;
3535
import java.util.List;
3636
import java.util.Map;
37+
import java.util.Optional;
38+
import javax.annotation.Nullable;
3739

3840
/**
3941
* A {@link Bootstrapper} implementation that reads xDS configurations from local file system.
@@ -240,17 +242,15 @@ protected BootstrapInfo.Builder bootstrapBuilder(Map<String, ?> rawData)
240242
}
241243

242244
Map<String, ?> rawAllowedGrpcServices = JsonUtil.getObject(rawData, "allowed_grpc_services");
243-
if (rawAllowedGrpcServices != null) {
244-
builder.allowedGrpcServices(parseAllowedGrpcServices(rawAllowedGrpcServices));
245-
}
245+
builder.allowedGrpcServices(parseAllowedGrpcServices(rawAllowedGrpcServices));
246246

247247
return builder;
248248
}
249249

250-
protected java.util.Optional<Object> parseAllowedGrpcServices(
251-
Map<String, ?> rawAllowedGrpcServices)
250+
protected Optional<Object> parseAllowedGrpcServices(
251+
@Nullable Map<String, ?> rawAllowedGrpcServices)
252252
throws XdsInitializationException {
253-
return java.util.Optional.empty();
253+
return Optional.empty();
254254
}
255255

256256
private List<ServerInfo> parseServerInfos(List<?> rawServerConfigs, XdsLogger logger)

0 commit comments

Comments
 (0)