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;
}