aboutsummaryrefslogtreecommitdiffstats
path: root/metrics
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-12-15 13:10:02 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-12-15 13:13:20 +0000
commit37be7b1516dcd42bfd34b6f9ffbe3896959717eb (patch)
tree7b7a4705d1e9cb82154c47865f677bad89d2ca0c /metrics
parentad4a9a58f97d7558eff48c6cd857cae3b570d55d (diff)
- Wire in the guard to make it evident that we have it when making changes that require it.
- Clean up some old members and code not used any more.
Diffstat (limited to 'metrics')
-rw-r--r--metrics/src/vespa/metrics/CMakeLists.txt1
-rw-r--r--metrics/src/vespa/metrics/metricmanager.cpp4
-rw-r--r--metrics/src/vespa/metrics/metricmanager.h2
-rw-r--r--metrics/src/vespa/metrics/updatehook.cpp18
-rw-r--r--metrics/src/vespa/metrics/updatehook.h19
5 files changed, 37 insertions, 7 deletions
diff --git a/metrics/src/vespa/metrics/CMakeLists.txt b/metrics/src/vespa/metrics/CMakeLists.txt
index 6bb39191791..13a3f09449e 100644
--- a/metrics/src/vespa/metrics/CMakeLists.txt
+++ b/metrics/src/vespa/metrics/CMakeLists.txt
@@ -15,6 +15,7 @@ vespa_add_library(metrics
state_api_adapter.cpp
summetric.cpp
textwriter.cpp
+ updatehook.cpp
valuemetric.cpp
valuemetricvalues.cpp
xmlwriter.cpp
diff --git a/metrics/src/vespa/metrics/metricmanager.cpp b/metrics/src/vespa/metrics/metricmanager.cpp
index 51149cf67c3..6447e12a0d2 100644
--- a/metrics/src/vespa/metrics/metricmanager.cpp
+++ b/metrics/src/vespa/metrics/metricmanager.cpp
@@ -20,7 +20,7 @@ LOG_SETUP(".metrics.manager");
namespace metrics {
-typedef MetricsmanagerConfig Config;
+using Config = MetricsmanagerConfig;
MetricManager::ConsumerSpec::ConsumerSpec() = default;
MetricManager::ConsumerSpec::~ConsumerSpec() = default;
@@ -32,7 +32,7 @@ MetricManager::Timer::getTime() const {
void
MetricManager::assertMetricLockLocked(const MetricLockGuard& g) const {
- if ((g.mutex() != &_waiter) || !g.owns_lock()) {
+ if (g.owns(_waiter)) {
throw vespalib::IllegalArgumentException("Given lock does not lock the metric lock.", VESPA_STRLOC);
}
}
diff --git a/metrics/src/vespa/metrics/metricmanager.h b/metrics/src/vespa/metrics/metricmanager.h
index feedf2c1515..f5ad5c5eea3 100644
--- a/metrics/src/vespa/metrics/metricmanager.h
+++ b/metrics/src/vespa/metrics/metricmanager.h
@@ -60,8 +60,6 @@ template class vespalib::hash_set<metrics::Metric::String>;
namespace metrics {
-using MetricLockGuard = UpdateHook::MetricLockGuard;
-
class MetricManager : private document::Runnable
{
public:
diff --git a/metrics/src/vespa/metrics/updatehook.cpp b/metrics/src/vespa/metrics/updatehook.cpp
new file mode 100644
index 00000000000..99051e8df64
--- /dev/null
+++ b/metrics/src/vespa/metrics/updatehook.cpp
@@ -0,0 +1,18 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "updatehook.h"
+
+namespace metrics {
+
+MetricLockGuard::MetricLockGuard(std::mutex & mutex)
+ : _guard(mutex)
+{}
+
+bool
+MetricLockGuard::owns(const std::mutex & mutex) const {
+ return (_guard.mutex() == &mutex) && !_guard.owns_lock();
+}
+
+MetricLockGuard::~MetricLockGuard() = default;
+
+}
diff --git a/metrics/src/vespa/metrics/updatehook.h b/metrics/src/vespa/metrics/updatehook.h
index 65f34c65664..0a0f218d61a 100644
--- a/metrics/src/vespa/metrics/updatehook.h
+++ b/metrics/src/vespa/metrics/updatehook.h
@@ -5,6 +5,21 @@
namespace metrics {
+class MetricLockGuard {
+public:
+ MetricLockGuard(std::mutex & mutex);
+ MetricLockGuard(const MetricLockGuard &) = delete;
+ MetricLockGuard & operator =(const MetricLockGuard &) = delete;
+ MetricLockGuard(MetricLockGuard &&) = default;
+ MetricLockGuard & operator =(MetricLockGuard &&) = default;
+ ~MetricLockGuard();
+
+ bool owns(const std::mutex &) const;
+ operator std::unique_lock<std::mutex> & () { return _guard; }
+private:
+ std::unique_lock<std::mutex> _guard;
+};
+
class MetricManager;
class UpdateHook {
@@ -14,9 +29,7 @@ class UpdateHook {
friend class MetricManager;
public:
- using UP = std::unique_ptr<UpdateHook>;
- using MetricLockGuard = std::unique_lock<std::mutex>;
-
+ using MetricLockGuard = metrics::MetricLockGuard;
UpdateHook(const char* name) : _name(name), _nextCall(0), _period(0) {}
virtual ~UpdateHook() = default;
virtual void updateMetrics(const MetricLockGuard & guard) = 0;