private SamplingResponse doSampleCustomerRule()

in aws-xray-recorder-sdk-core/src/main/java/com/amazonaws/xray/strategy/sampling/rule/CentralizedRule.java [197:243]


    private SamplingResponse doSampleCustomerRule(Instant now, SamplingResponse res, double random) {
        if (centralizedReservoir.isExpired(now)) {
            // Attempt to borrow request

            if (centralizedReservoir.isBorrow(now)) {
                logger.debug("Sampling target has expired for rule " + getName() + ". Borrowing a request.");
                statistics.incBorrowed();
                res.setSampled(true);

                return res;
            }

            if (logger.isDebugEnabled()) {
                logger.debug("Sampling target has expired for rule " + getName() + ". Using fixed rate of " +
                    (int) (fixedRate * 100) + " percent.");
            }

            // Fallback to bernoulli sampling
            if (random < fixedRate) {
                statistics.incSampled();
                res.setSampled(true);

                return res;
            }

            return res;
        }

        // CentralizedReservoir has a valid quota. Consume a unit, if available.
        if (centralizedReservoir.take(now)) {
            statistics.incSampled();
            res.setSampled(true);
            logger.debug("Sampling target has been exhausted for rule " + getName() + ". Using fixed request.");

            return res;
        }

        // Fallback to bernoulli sampling
        if (random < fixedRate) {
            statistics.incSampled();
            res.setSampled(true);

            return res;
        }

        return res;
    }