public void doFilter()

in src/main/java/com/googlesource/gerrit/plugins/quota/RestApiRateLimiter.java [72:109]


  public void doFilter(ServletRequest req, ServletResponse res, final FilterChain chain)
      throws IOException, ServletException {
    if (isRest(req)) {
      Holder rateLimiterHolder;
      CurrentUser u = user.get();
      if (u.isIdentifiedUser()) {
        Account.Id accountId = u.asIdentifiedUser().getAccountId();
        try {
          rateLimiterHolder = limitsPerAccount.get(accountId);
        } catch (ExecutionException e) {
          rateLimiterHolder = Holder.EMPTY;
          log.warn("Cannot get rate limits for account ''{}''", accountId, e);
        }
      } else {
        try {
          rateLimiterHolder = limitsPerRemoteHost.get(req.getRemoteHost());
        } catch (ExecutionException e) {
          rateLimiterHolder = Holder.EMPTY;
          log.warn(
              "Cannot get rate limits for anonymous access from remote host ''{}''",
              req.getRemoteHost(),
              e);
        }
      }
      if (!rateLimiterHolder.hasGracePermits()
          && rateLimiterHolder.get() != null
          && !rateLimiterHolder.get().tryAcquire()) {
        String msg =
            MessageFormat.format(
                limitExceededMsg,
                rateLimiterHolder.get().getRate() * SECONDS_PER_HOUR,
                rateLimiterHolder.getBurstPermits());
        ((HttpServletResponse) res).sendError(SC_TOO_MANY_REQUESTS, msg);
        return;
      }
    }
    chain.doFilter(req, res);
  }