Skip to content

Commit 603d4fe

Browse files
committed
revert unintended changes
1 parent 9d5842b commit 603d4fe

File tree

46 files changed

+3546
-367
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+3546
-367
lines changed

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

Lines changed: 606 additions & 0 deletions
Large diffs are not rendered by default.

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

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,24 @@ public FaultFilter newInstance(String name) {
106106
@Override
107107
public ConfigOrError<FaultConfig> parseFilterConfig(Message rawProtoMessage) {
108108
HTTPFault httpFaultProto;
109-
if (!(rawProtoMessage instanceof Any)) {
109+
if (rawProtoMessage instanceof Any) {
110+
try {
111+
httpFaultProto = ((Any) rawProtoMessage).unpack(HTTPFault.class);
112+
} catch (InvalidProtocolBufferException e) {
113+
return ConfigOrError.fromError("Invalid proto: " + e);
114+
}
115+
} else if (rawProtoMessage instanceof com.google.protobuf.Struct) {
116+
try {
117+
HTTPFault.Builder builder = HTTPFault.newBuilder();
118+
com.google.protobuf.util.JsonFormat.parser().merge(
119+
com.google.protobuf.util.JsonFormat.printer().print(rawProtoMessage), builder);
120+
httpFaultProto = builder.build();
121+
} catch (InvalidProtocolBufferException e) {
122+
return ConfigOrError.fromError("Failed to parse Struct to HTTPFault: " + e);
123+
}
124+
} else {
110125
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());
111126
}
112-
Any anyMessage = (Any) rawProtoMessage;
113-
try {
114-
httpFaultProto = anyMessage.unpack(HTTPFault.class);
115-
} catch (InvalidProtocolBufferException e) {
116-
return ConfigOrError.fromError("Invalid proto: " + e);
117-
}
118127
return parseHttpFault(httpFaultProto);
119128
}
120129

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ private FilterRegistry() {}
3535
static synchronized FilterRegistry getDefaultRegistry() {
3636
if (instance == null) {
3737
instance = newRegistry().register(
38-
new FaultFilter.Provider(),
39-
new RouterFilter.Provider(),
40-
new RbacFilter.Provider(),
41-
new GcpAuthenticationFilter.Provider());
38+
new FaultFilter.Provider(),
39+
new RouterFilter.Provider(),
40+
new RbacFilter.Provider(),
41+
new GcpAuthenticationFilter.Provider(),
42+
new CompositeFilter.Provider());
4243
}
4344
return instance;
4445
}
@@ -58,6 +59,13 @@ FilterRegistry register(Filter.Provider... filters) {
5859
return this;
5960
}
6061

62+
@VisibleForTesting
63+
void deregister(Filter.Provider provider) {
64+
for (String typeUrl : provider.typeUrls()) {
65+
supportedFilters.remove(typeUrl);
66+
}
67+
}
68+
6169
@Nullable
6270
Filter.Provider get(String typeUrl) {
6371
return supportedFilters.get(typeUrl);

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

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,24 @@ public GcpAuthenticationFilter newInstance(String name) {
8888
@Override
8989
public ConfigOrError<GcpAuthenticationConfig> parseFilterConfig(Message rawProtoMessage) {
9090
GcpAuthnFilterConfig gcpAuthnProto;
91-
if (!(rawProtoMessage instanceof Any)) {
91+
if (rawProtoMessage instanceof Any) {
92+
try {
93+
gcpAuthnProto = ((Any) rawProtoMessage).unpack(GcpAuthnFilterConfig.class);
94+
} catch (InvalidProtocolBufferException e) {
95+
return ConfigOrError.fromError("Invalid proto: " + e);
96+
}
97+
} else if (rawProtoMessage instanceof com.google.protobuf.Struct) {
98+
try {
99+
GcpAuthnFilterConfig.Builder builder = GcpAuthnFilterConfig.newBuilder();
100+
com.google.protobuf.util.JsonFormat.parser().merge(
101+
com.google.protobuf.util.JsonFormat.printer().print(rawProtoMessage), builder);
102+
gcpAuthnProto = builder.build();
103+
} catch (InvalidProtocolBufferException e) {
104+
return ConfigOrError.fromError("Failed to parse Struct to GcpAuthnFilterConfig: " + e);
105+
}
106+
} else {
92107
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());
93108
}
94-
Any anyMessage = (Any) rawProtoMessage;
95-
96-
try {
97-
gcpAuthnProto = anyMessage.unpack(GcpAuthnFilterConfig.class);
98-
} catch (InvalidProtocolBufferException e) {
99-
return ConfigOrError.fromError("Invalid proto: " + e);
100-
}
101109

102110
long cacheSize = 10;
103111
// Validate cache_config

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

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,30 +96,48 @@ public RbacFilter newInstance(String name) {
9696
@Override
9797
public ConfigOrError<RbacConfig> parseFilterConfig(Message rawProtoMessage) {
9898
RBAC rbacProto;
99-
if (!(rawProtoMessage instanceof Any)) {
99+
if (rawProtoMessage instanceof Any) {
100+
try {
101+
rbacProto = ((Any) rawProtoMessage).unpack(RBAC.class);
102+
} catch (InvalidProtocolBufferException e) {
103+
return ConfigOrError.fromError("Invalid proto: " + e);
104+
}
105+
} else if (rawProtoMessage instanceof com.google.protobuf.Struct) {
106+
try {
107+
RBAC.Builder builder = RBAC.newBuilder();
108+
com.google.protobuf.util.JsonFormat.parser().merge(
109+
com.google.protobuf.util.JsonFormat.printer().print(rawProtoMessage), builder);
110+
rbacProto = builder.build();
111+
} catch (InvalidProtocolBufferException e) {
112+
return ConfigOrError.fromError("Failed to parse Struct to RBAC: " + e);
113+
}
114+
} else {
100115
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());
101116
}
102-
Any anyMessage = (Any) rawProtoMessage;
103-
try {
104-
rbacProto = anyMessage.unpack(RBAC.class);
105-
} catch (InvalidProtocolBufferException e) {
106-
return ConfigOrError.fromError("Invalid proto: " + e);
107-
}
108117
return parseRbacConfig(rbacProto);
109118
}
110119

111120
@Override
112121
public ConfigOrError<RbacConfig> parseFilterConfigOverride(Message rawProtoMessage) {
113122
RBACPerRoute rbacPerRoute;
114-
if (!(rawProtoMessage instanceof Any)) {
123+
if (rawProtoMessage instanceof Any) {
124+
try {
125+
rbacPerRoute = ((Any) rawProtoMessage).unpack(RBACPerRoute.class);
126+
} catch (InvalidProtocolBufferException e) {
127+
return ConfigOrError.fromError("Invalid proto: " + e);
128+
}
129+
} else if (rawProtoMessage instanceof com.google.protobuf.Struct) {
130+
try {
131+
RBACPerRoute.Builder builder = RBACPerRoute.newBuilder();
132+
com.google.protobuf.util.JsonFormat.parser().merge(
133+
com.google.protobuf.util.JsonFormat.printer().print(rawProtoMessage), builder);
134+
rbacPerRoute = builder.build();
135+
} catch (InvalidProtocolBufferException e) {
136+
return ConfigOrError.fromError("Failed to parse Struct to RBACPerRoute: " + e);
137+
}
138+
} else {
115139
return ConfigOrError.fromError("Invalid config type: " + rawProtoMessage.getClass());
116140
}
117-
Any anyMessage = (Any) rawProtoMessage;
118-
try {
119-
rbacPerRoute = anyMessage.unpack(RBACPerRoute.class);
120-
} catch (InvalidProtocolBufferException e) {
121-
return ConfigOrError.fromError("Invalid proto: " + e);
122-
}
123141
if (rbacPerRoute.hasRbac()) {
124142
return parseRbacConfig(rbacPerRoute.getRbac());
125143
} else {

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,38 @@ abstract static class Route {
6565

6666
abstract ImmutableMap<String, FilterConfig> filterConfigOverrides();
6767

68+
@Nullable
69+
abstract ImmutableMap<String, com.google.protobuf.Struct> filterMetadata();
70+
6871
static Route forAction(RouteMatch routeMatch, RouteAction routeAction,
6972
Map<String, FilterConfig> filterConfigOverrides) {
70-
return create(routeMatch, routeAction, filterConfigOverrides);
73+
return create(routeMatch, routeAction, filterConfigOverrides, null);
74+
}
75+
76+
static Route forAction(RouteMatch routeMatch, RouteAction routeAction,
77+
Map<String, FilterConfig> filterConfigOverrides,
78+
@Nullable Map<String, com.google.protobuf.Struct> filterMetadata) {
79+
return create(routeMatch, routeAction, filterConfigOverrides, filterMetadata);
7180
}
7281

7382
static Route forNonForwardingAction(RouteMatch routeMatch,
7483
Map<String, FilterConfig> filterConfigOverrides) {
75-
return create(routeMatch, null, filterConfigOverrides);
84+
return create(routeMatch, null, filterConfigOverrides, null);
85+
}
86+
87+
static Route forNonForwardingAction(RouteMatch routeMatch,
88+
Map<String, FilterConfig> filterConfigOverrides,
89+
@Nullable Map<String, com.google.protobuf.Struct> filterMetadata) {
90+
return create(routeMatch, null, filterConfigOverrides, filterMetadata);
7691
}
7792

7893
private static Route create(
7994
RouteMatch routeMatch, @Nullable RouteAction routeAction,
80-
Map<String, FilterConfig> filterConfigOverrides) {
95+
Map<String, FilterConfig> filterConfigOverrides,
96+
@Nullable Map<String, com.google.protobuf.Struct> filterMetadata) {
8197
return new AutoValue_VirtualHost_Route(
82-
routeMatch, routeAction, ImmutableMap.copyOf(filterConfigOverrides));
98+
routeMatch, routeAction, ImmutableMap.copyOf(filterConfigOverrides),
99+
filterMetadata == null ? null : ImmutableMap.copyOf(filterMetadata));
83100
}
84101

85102
@AutoValue

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616

1717
package io.grpc.xds;
1818

19+
import com.google.protobuf.Struct;
1920
import io.grpc.Attributes;
2021
import io.grpc.EquivalentAddressGroup;
2122
import io.grpc.Grpc;
2223
import io.grpc.NameResolver;
2324
import io.grpc.xds.XdsNameResolverProvider.CallCounterProvider;
2425
import io.grpc.xds.client.Locality;
2526
import io.grpc.xds.client.XdsClient;
27+
import java.util.Map;
2628

2729
/**
2830
* Attributes used for xDS implementation.
@@ -100,5 +102,18 @@ final class XdsAttributes {
100102
static final Attributes.Key<Long> ATTR_DRAIN_GRACE_NANOS =
101103
Attributes.Key.create("io.grpc.xds.XdsAttributes.drainGraceTime");
102104

105+
/**
106+
* Attribute key for xDS route metadata used in filter matching.
107+
*/
108+
@NameResolver.ResolutionResultAttr
109+
public static final Attributes.Key<Map<String, Struct>> ATTR_FILTER_METADATA = Attributes.Key
110+
.create("io.grpc.xds.XdsAttributes.filterMetadata");
111+
112+
/**
113+
* CallOptions key for xDS route metadata used in filter matching.
114+
*/
115+
public static final io.grpc.CallOptions.Key<Map<String, Struct>> CALL_OPTIONS_FILTER_METADATA =
116+
io.grpc.CallOptions.Key.create("io.grpc.xds.XdsAttributes.filterMetadata");
117+
103118
private XdsAttributes() {}
104119
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ static FilterChain parseFilterChain(
230230
// FilterChain contains L4 filters, so we ensure it contains only HCM.
231231
if (proto.getFiltersCount() != 1) {
232232
throw new ResourceInvalidException("FilterChain " + filterChainName
233-
+ " should contain exact one HttpConnectionManager filter");
233+
+ " should contain exactly one HttpConnectionManager filter");
234234
}
235235
io.envoyproxy.envoy.config.listener.v3.Filter l4Filter = proto.getFiltersList().get(0);
236236
if (!l4Filter.hasTypedConfig()) {
@@ -513,6 +513,7 @@ static io.grpc.xds.HttpConnectionManager parseHttpConnectionManager(
513513
}
514514

515515
// Parse http filters.
516+
// todo: AgraVator are we changing the assumption here ??
516517
if (proto.getHttpFiltersList().isEmpty()) {
517518
throw new ResourceInvalidException("Missing HttpFilter in HttpConnectionManager.");
518519
}
@@ -582,6 +583,7 @@ private static boolean isTerminalFilter(Filter.FilterConfig filterConfig) {
582583
static StructOrError<Filter.FilterConfig> parseHttpFilter(
583584
io.envoyproxy.envoy.extensions.filters.network.http_connection_manager.v3.HttpFilter
584585
httpFilter, FilterRegistry filterRegistry, boolean isForClient) {
586+
// todo: AgraVator do we need to change anything here for composite filter ??
585587
String filterName = httpFilter.getName();
586588
boolean isOptional = httpFilter.getIsOptional();
587589
if (!httpFilter.hasTypedConfig()) {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ private void updateResolutionResult(XdsConfig xdsConfig) {
336336
.setAttributes(attrs)
337337
.setServiceConfig(parsedServiceConfig)
338338
.build();
339+
// todo: abhishek probably the filters are getting applied here ??
339340
if (!listener.onResult2(result).isOk()) {
340341
resolveState.xdsDependencyManager.requestReresolution();
341342
}
@@ -404,6 +405,7 @@ static boolean matchHostName(String hostName, String pattern) {
404405
private final class ConfigSelector extends InternalConfigSelector {
405406
@Override
406407
public Result selectConfig(PickSubchannelArgs args) {
408+
// todo: AgraVator probably the filters are getting populated here
407409
RoutingConfig routingCfg;
408410
RouteData selectedRoute;
409411
String cluster;
@@ -716,6 +718,7 @@ public void onUpdate(StatusOr<XdsConfig> updateOrStatus) {
716718
}
717719

718720
VirtualHost virtualHost = update.getVirtualHost();
721+
// filters and there configurations
719722
ImmutableList<NamedFilterConfig> filterConfigs = httpConnectionManager.httpFilterConfigs();
720723
long streamDurationNano = httpConnectionManager.httpMaxStreamDurationNano();
721724

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.google.protobuf.Duration;
3030
import com.google.protobuf.InvalidProtocolBufferException;
3131
import com.google.protobuf.Message;
32+
import com.google.protobuf.Struct;
3233
import com.google.protobuf.util.Durations;
3334
import com.google.re2j.Pattern;
3435
import com.google.re2j.PatternSyntaxException;
@@ -289,6 +290,11 @@ static StructOrError<Route> parseRoute(
289290
}
290291
Map<String, FilterConfig> overrideConfigs = overrideConfigsOrError.getStruct();
291292

293+
Map<String, Struct> filterMetadata = null;
294+
if (proto.hasMetadata()) {
295+
filterMetadata = proto.getMetadata().getFilterMetadataMap();
296+
}
297+
292298
switch (proto.getActionCase()) {
293299
case ROUTE:
294300
StructOrError<RouteAction> routeAction =
@@ -303,10 +309,11 @@ static StructOrError<Route> parseRoute(
303309
+ routeAction.getErrorDetail());
304310
}
305311
return StructOrError.fromStruct(
306-
Route.forAction(routeMatch.getStruct(), routeAction.getStruct(), overrideConfigs));
312+
Route.forAction(routeMatch.getStruct(), routeAction.getStruct(), overrideConfigs,
313+
filterMetadata));
307314
case NON_FORWARDING_ACTION:
308315
return StructOrError.fromStruct(
309-
Route.forNonForwardingAction(routeMatch.getStruct(), overrideConfigs));
316+
Route.forNonForwardingAction(routeMatch.getStruct(), overrideConfigs, filterMetadata));
310317
case REDIRECT:
311318
case DIRECT_RESPONSE:
312319
case FILTER_ACTION:

0 commit comments

Comments
 (0)