public ApiResponse invkWithToken()

in lambda/src/main/java/cn/amazon/aws/rp/spapi/lambda/requestlimiter/ApiProxy.java [45:82]


    public ApiResponse<R> invkWithToken(Map<String, Object> input, String sellerName) throws Throwable {

        ApiResponse<R> result = null;
        try {
            final String limiterName = String.format("%s:%s", sellerName, ivk.getRateLimiterNameSuffix());

            // Blocking here.
            acquireToken(limiterName);

            logger.info("request parameters: " + gson.toJson(input));
            result = ivk.invoke(input);
            logger.info("result is: " + gson.toJson(result)); // TODO remove it.

            // Retry
            if (result.getStatusCode() == OVER_REQUEST_CODE) {
                logger.warn("SERVER SIDE LIMIT: going to retry due to request too frequently.");
                result = retryInvk(input, sellerName);
            }

            // Everything is good here, so we reset delay
            delayTime = 0.0;

            // Update rate limiter
            final List<String> updateLimit = result.getHeaders().get(X_AMZN_RATE_LIMIT_LIMIT);
            if (updateLimit != null) {
                logger.info("server current limit is " + gson.toJson(updateLimit));
                final String limit = updateLimit.get(0);
                if (limit != null) {
                    updateLimiter(limiterName, limit);
                }
            }
        } catch (ApiException throwable) {
            logger.error("Other error found in API Call ", throwable);
            logger.error("Details: " + gson.toJson(throwable));
            throw throwable;
        }
        return result;
    }