Add Statistics::getAndResetTickerCount().
Summary: A convience method to atomically get and reset ticker count. I'm wanting to use it to have a thin wrapper to the statistics object to export ticker counts to ODS for LogDevice (since they don't even use fb303). Test Plan: test in LogDevice shadow cluster. https://fburl.com/461868822 Reviewers: andrewkr, yhchiang, IslamAbdelRahman Reviewed By: IslamAbdelRahman Subscribers: andrewkr, dhruba, leveldb Differential Revision: https://reviews.facebook.net/D64869
This commit is contained in:
parent
aea3ce4c83
commit
d6ae6dec69
@ -2,6 +2,7 @@
|
|||||||
## Unreleased
|
## Unreleased
|
||||||
### Public API Change
|
### Public API Change
|
||||||
* DB::GetOptions() reflect dynamic changed options (i.e. through DB::SetOptions()) and return copy of options instead of reference.
|
* DB::GetOptions() reflect dynamic changed options (i.e. through DB::SetOptions()) and return copy of options instead of reference.
|
||||||
|
* Added Statistics::getAndResetTickerCount().
|
||||||
|
|
||||||
## 4.12.0 (9/12/2016)
|
## 4.12.0 (9/12/2016)
|
||||||
### Public API Change
|
### Public API Change
|
||||||
|
@ -416,6 +416,7 @@ class Statistics {
|
|||||||
virtual std::string getHistogramString(uint32_t type) const { return ""; }
|
virtual std::string getHistogramString(uint32_t type) const { return ""; }
|
||||||
virtual void recordTick(uint32_t tickerType, uint64_t count = 0) = 0;
|
virtual void recordTick(uint32_t tickerType, uint64_t count = 0) = 0;
|
||||||
virtual void setTickerCount(uint32_t tickerType, uint64_t count) = 0;
|
virtual void setTickerCount(uint32_t tickerType, uint64_t count) = 0;
|
||||||
|
virtual uint64_t getAndResetTickerCount(uint32_t tickerType) = 0;
|
||||||
virtual void measureTime(uint32_t histogramType, uint64_t time) = 0;
|
virtual void measureTime(uint32_t histogramType, uint64_t time) = 0;
|
||||||
|
|
||||||
// String representation of the statistic object.
|
// String representation of the statistic object.
|
||||||
|
@ -123,6 +123,30 @@ void StatisticsImpl::setTickerCount(uint32_t tickerType, uint64_t count) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t StatisticsImpl::getAndResetTickerCount(uint32_t tickerType) {
|
||||||
|
uint64_t sum = 0;
|
||||||
|
{
|
||||||
|
MutexLock lock(&aggregate_lock_);
|
||||||
|
assert(enable_internal_stats_ ? tickerType < INTERNAL_TICKER_ENUM_MAX
|
||||||
|
: tickerType < TICKER_ENUM_MAX);
|
||||||
|
if (tickerType < TICKER_ENUM_MAX || enable_internal_stats_) {
|
||||||
|
tickers_[tickerType].thread_value->Fold(
|
||||||
|
[](void* curr_ptr, void* res) {
|
||||||
|
auto* sum_ptr = static_cast<uint64_t*>(res);
|
||||||
|
*sum_ptr += static_cast<std::atomic<uint64_t>*>(curr_ptr)->exchange(
|
||||||
|
0, std::memory_order_relaxed);
|
||||||
|
},
|
||||||
|
&sum);
|
||||||
|
sum += tickers_[tickerType].merged_sum.exchange(
|
||||||
|
0, std::memory_order_relaxed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stats_ && tickerType < TICKER_ENUM_MAX) {
|
||||||
|
stats_->setTickerCount(tickerType, 0);
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
void StatisticsImpl::recordTick(uint32_t tickerType, uint64_t count) {
|
void StatisticsImpl::recordTick(uint32_t tickerType, uint64_t count) {
|
||||||
assert(
|
assert(
|
||||||
enable_internal_stats_ ?
|
enable_internal_stats_ ?
|
||||||
|
@ -41,6 +41,7 @@ class StatisticsImpl : public Statistics {
|
|||||||
std::string getHistogramString(uint32_t histogram_type) const override;
|
std::string getHistogramString(uint32_t histogram_type) const override;
|
||||||
|
|
||||||
virtual void setTickerCount(uint32_t ticker_type, uint64_t count) override;
|
virtual void setTickerCount(uint32_t ticker_type, uint64_t count) override;
|
||||||
|
virtual uint64_t getAndResetTickerCount(uint32_t ticker_type) override;
|
||||||
virtual void recordTick(uint32_t ticker_type, uint64_t count) override;
|
virtual void recordTick(uint32_t ticker_type, uint64_t count) override;
|
||||||
virtual void measureTime(uint32_t histogram_type, uint64_t value) override;
|
virtual void measureTime(uint32_t histogram_type, uint64_t value) override;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user