summaryrefslogtreecommitdiffstats
path: root/metrics
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2019-01-10 14:54:23 +0000
committerTor Brede Vekterli <vekterli@oath.com>2019-01-10 14:54:23 +0000
commit19852a059409d9f02ec4d967beb2e88b7dce1d44 (patch)
tree1b210fe1f6ba686532b9eaad6657e30488f23b1f /metrics
parent209adc1be4f17d95850f8a6c4ca9d1dc38103817 (diff)
Make MetricManager lastProcessedTime atomic
Diffstat (limited to 'metrics')
-rw-r--r--metrics/src/vespa/metrics/metricmanager.cpp8
-rw-r--r--metrics/src/vespa/metrics/metricmanager.h4
2 files changed, 6 insertions, 6 deletions
diff --git a/metrics/src/vespa/metrics/metricmanager.cpp b/metrics/src/vespa/metrics/metricmanager.cpp
index 7125446c168..4621c2229b6 100644
--- a/metrics/src/vespa/metrics/metricmanager.cpp
+++ b/metrics/src/vespa/metrics/metricmanager.cpp
@@ -176,7 +176,7 @@ MetricManager::init(const config::ConfigUri & uri, FastOS_ThreadPool& pool,
// Wait for first iteration to have completed, such that it is safe
// to access snapshots afterwards.
vespalib::MonitorGuard sync(_waiter);
- while (_lastProcessedTime == 0) {
+ while (_lastProcessedTime.load(std::memory_order_relaxed) == 0) {
sync.wait(1);
}
} else {
@@ -863,10 +863,10 @@ MetricManager::tick(const MetricLockGuard & guard, time_t currentTime)
}
_forceEventLogging = false;
}
- _lastProcessedTime = (nextWorkTime <= currentTime ? nextWorkTime
- : currentTime);
+ _lastProcessedTime.store(nextWorkTime <= currentTime ? nextWorkTime : currentTime,
+ std::memory_order_relaxed);
LOG(spam, "Worker thread done with processing for time %" PRIu64 ".",
- _lastProcessedTime);
+ _lastProcessedTime.load(std::memory_order_relaxed));
time_t next = std::min(
_logPeriod.second,
_snapshots[0]->getPeriod() + _snapshots[0]->getToTime());
diff --git a/metrics/src/vespa/metrics/metricmanager.h b/metrics/src/vespa/metrics/metricmanager.h
index ec166529b94..4089236ca48 100644
--- a/metrics/src/vespa/metrics/metricmanager.h
+++ b/metrics/src/vespa/metrics/metricmanager.h
@@ -111,7 +111,7 @@ private:
std::vector<MetricSnapshotSet::SP> _snapshots;
MetricSnapshot::SP _totalMetrics;
std::unique_ptr<Timer> _timer;
- time_t _lastProcessedTime;
+ std::atomic<time_t> _lastProcessedTime;
bool _forceEventLogging;
// Should be added to config, but wont now due to problems with
// upgrading
@@ -262,7 +262,7 @@ public:
void checkMetricsAltered(const MetricLockGuard &);
/** Used by unit tests to verify that we have processed for a given time. */
- time_t getLastProcessedTime() const { return _lastProcessedTime; }
+ time_t getLastProcessedTime() const { return _lastProcessedTime.load(std::memory_order_relaxed); }
/** Used by unit tests to wake waiters after altering time. */
void timeChangedNotification() const;