#include "dnsdist-rings.hh"
+thread_local size_t Rings::t_samplingCounter{0};
+
void Rings::init(const RingsConfiguration& config)
{
if (d_initialized.exchange(true)) {
if (d_samplingRate == 0) {
return false;
}
- auto counter = d_samplingCounter++;
- return (counter % d_samplingRate) == 0;
+ auto counter = t_samplingCounter++;
+ return (counter % d_samplingRate) != 0;
}
uint32_t Rings::adjustForSamplingRate(uint32_t count) const
bool shouldSkipDueToSampling();
static constexpr bool s_keepLockingStats{false};
+ // small hack to reduce contention: this only works because we have a single Rings object in DNSdist
+ static thread_local size_t t_samplingCounter;
+
std::atomic<size_t> d_nbQueryEntries{0};
std::atomic<size_t> d_nbResponseEntries{0};
size_t d_numberOfShards{10};
size_t d_nbLockTries{5};
size_t d_samplingRate{0};
- std::atomic<size_t> d_samplingCounter{0};
bool d_recordQueries{true};
bool d_recordResponses{true};
};