Skip to content

Commit ad4d9f9

Browse files
committed
add GRPC_EXPERIMENTAL_RLQS_DRY_RUN
1 parent 48f5673 commit ad4d9f9

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

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

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,16 @@
2727
import io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings;
2828
import io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaFilterConfig;
2929
import io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaOverride;
30+
import io.grpc.InternalLogId;
3031
import io.grpc.Metadata;
3132
import io.grpc.ServerCall;
3233
import io.grpc.ServerCall.Listener;
3334
import io.grpc.ServerCallHandler;
3435
import io.grpc.ServerInterceptor;
3536
import io.grpc.internal.GrpcUtil;
3637
import io.grpc.xds.Filter.ServerInterceptorBuilder;
38+
import io.grpc.xds.client.XdsLogger;
39+
import io.grpc.xds.client.XdsLogger.XdsLogLevel;
3740
import io.grpc.xds.internal.datatype.GrpcService;
3841
import io.grpc.xds.internal.matchers.HttpMatchInput;
3942
import io.grpc.xds.internal.matchers.Matcher;
@@ -53,6 +56,10 @@
5356
final class RlqsFilter implements Filter, ServerInterceptorBuilder {
5457
static final boolean enabled = GrpcUtil.getFlag("GRPC_EXPERIMENTAL_XDS_ENABLE_RLQS", false);
5558

59+
// TODO(sergiitk): [IMPL] remove
60+
// Do do not fail on parsing errors, only log requests.
61+
static final boolean dryRun = GrpcUtil.getFlag("GRPC_EXPERIMENTAL_RLQS_DRY_RUN", false);
62+
5663
static final RlqsFilter INSTANCE = new RlqsFilter();
5764

5865
static final String TYPE_URL = "type.googleapis.com/"
@@ -62,6 +69,15 @@ final class RlqsFilter implements Filter, ServerInterceptorBuilder {
6269

6370
private final AtomicReference<RlqsCache> rlqsCache = new AtomicReference<>();
6471

72+
private final InternalLogId logId;
73+
private final XdsLogger logger;
74+
75+
public RlqsFilter() {
76+
logId = InternalLogId.allocate("rlqs-filter", null);
77+
logger = XdsLogger.withLogId(logId);
78+
logger.log(XdsLogLevel.INFO, "Created RLQS Filter with logId=" + logId);
79+
}
80+
6581
@Override
6682
public String[] typeUrls() {
6783
return new String[]{TYPE_URL, TYPE_URL_OVERRIDE_CONFIG};
@@ -158,7 +174,15 @@ private ServerInterceptor generateRlqsInterceptor(RlqsFilterConfig config) {
158174
@Override
159175
public <ReqT, RespT> Listener<ReqT> interceptCall(
160176
ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) {
161-
RlqsRateLimitResult result = rlqsEngine.rateLimit(HttpMatchInput.create(headers, call));
177+
HttpMatchInput httpMatchInput = HttpMatchInput.create(headers, call);
178+
179+
// TODO(sergiitk): [IMPL] Remove
180+
if (dryRun) {
181+
logger.log(XdsLogLevel.INFO, "RLQS DRY RUN: request <<" + httpMatchInput + ">>");
182+
return next.startCall(call, headers);
183+
}
184+
185+
RlqsRateLimitResult result = rlqsEngine.rateLimit(httpMatchInput);
162186
if (result.isAllowed()) {
163187
return next.startCall(call, headers);
164188
}
@@ -170,7 +194,7 @@ public <ReqT, RespT> Listener<ReqT> interceptCall(
170194
}
171195

172196
@VisibleForTesting
173-
static RlqsFilterConfig parseRlqsFilter(RateLimitQuotaFilterConfig rlqsFilterProto)
197+
RlqsFilterConfig parseRlqsFilter(RateLimitQuotaFilterConfig rlqsFilterProto)
174198
throws ResourceInvalidException, InvalidProtocolBufferException {
175199
RlqsFilterConfig.Builder builder = RlqsFilterConfig.builder();
176200
if (rlqsFilterProto.getDomain().isEmpty()) {
@@ -179,6 +203,12 @@ static RlqsFilterConfig parseRlqsFilter(RateLimitQuotaFilterConfig rlqsFilterPro
179203
builder.domain(rlqsFilterProto.getDomain())
180204
.rlqsService(GrpcService.fromEnvoyProto(rlqsFilterProto.getRlqsServer()));
181205

206+
// TODO(sergiitk): [IMPL] Remove
207+
if (dryRun) {
208+
logger.log(XdsLogLevel.INFO, "RLQS DRY RUN: skipping matchers");
209+
return builder.build();
210+
}
211+
182212
// TODO(sergiitk): [IMPL] actually parse, move to RlqsBucketSettings.fromProto()
183213
RateLimitQuotaBucketSettings fallbackBucketSettingsProto = unpackAny(
184214
rlqsFilterProto.getBucketMatchers().getOnNoMatch().getAction().getTypedConfig(),

0 commit comments

Comments
 (0)