in src/main/java/com/googlesource/gerrit/plugins/ratelimiter/Module.java [92:133]
public RateLimiter load(String key) {
Optional<RateLimit> limit = finder.find(RateLimitType.UPLOAD_PACK_PER_HOUR, key);
Optional<RateLimit> warn = finder.find(RateLimitType.UPLOAD_PACK_PER_HOUR_WARN, key);
Optional<RateLimit> timeLapse = finder.find(RateLimitType.TIME_LAPSE_IN_MINUTES, key);
if (!limit.isPresent() && !warn.isPresent()) {
return UnlimitedRateLimiter.INSTANCE;
}
String rateLimitType = DEFAULT_RATE_LIMIT_TYPE;
// In the case that there is a warning but no limit
Integer myLimit = Integer.MAX_VALUE;
if (limit.isPresent()) {
myLimit = limit.get().getRatePerHour();
rateLimitType = limit.get().getType().getLimitType();
}
long effectiveTimeLapse = PeriodicRateLimiter.DEFAULT_TIME_LAPSE_IN_MINUTES;
if (timeLapse.isPresent()) {
long providedTimeLapse = timeLapse.get().getRatePerHour();
if (providedTimeLapse > 0 && providedTimeLapse <= effectiveTimeLapse) {
effectiveTimeLapse = providedTimeLapse;
rateLimitType = timeLapse.get().getType().getLimitType();
} else {
logger.warn(
"The time lapse is set to the default {} minutes, as the configured value is invalid.",
effectiveTimeLapse);
}
}
RateLimiter rateLimiter =
periodicRateLimiterFactory.create(myLimit, effectiveTimeLapse, rateLimitType);
if (warn.isPresent()) {
if (limit.isPresent()) {
return warningRateLimiterFactory.create(
rateLimiter, key, warn.get().getRatePerHour(), effectiveTimeLapse);
}
return warningUnlimitedRateLimiterFactory.create(
rateLimiter, key, warn.get().getRatePerHour(), effectiveTimeLapse);
}
return rateLimiter;
}