void rejectRequest(NetworkRequest networkRequest, boolean isExpired) throws InterruptedException {
    try {
      RequestOrResponse request = requestResponseHelper.getDecodedRequest(networkRequest);
      Response response = requestResponseHelper.createErrorResponse(request, ServerErrorCode.RetryAfterBackoff);
      if (isExpired) {
        http2ServerMetrics.requestResponseChannelDroppedOnExpiryCount.inc();
      } else {
        http2ServerMetrics.requestResponseChannelDroppedOnOverflowCount.inc();
      }
      serverMetrics.totalRequestDroppedRate.mark();
      // Log the request and response in public access logs
      long requestProcessingTime = SystemTime.getInstance().milliseconds() - networkRequest.getStartTimeInMs();
      publicAccessLogger.info("{} {} processingTime {}", request, response, requestProcessingTime);
      sendResponse(response, networkRequest, null);
    } catch (Throwable e) {
      logger.error("Error while handling request {} closing connection", networkRequest, e);
      closeConnection(networkRequest);
    } finally {
      networkRequest.release();
    }
  }
Reject request with backoff error code.
@param networkRequest incoming request
@param isExpired      {@code true} if request is expired. Else {@code false}
ambry-network/src/main/java/com/github/ambry/network/NettyServerRequestResponseChannel.java