summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2016-11-28 21:16:26 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2016-12-12 02:55:40 +0100
commite1a678feb2deddeab5a78be77e16f3cdf0a614a9 (patch)
tree342fdd803d4597d05e2cef34d667fba2541f9f50
parente7195ab5e2d76848c1d3ac1004f54edf19dfb72d (diff)
Loosen up the metrics stuff further.
-rw-r--r--memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.cpp2
-rw-r--r--memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.h2
-rw-r--r--metrics/src/vespa/metrics/metricmanager.h16
-rw-r--r--metrics/src/vespa/metrics/metrics.h1
-rw-r--r--metrics/src/vespa/metrics/state_api_adapter.cpp1
-rw-r--r--metrics/src/vespa/metrics/state_api_adapter.h3
-rw-r--r--metrics/src/vespa/metrics/updatehook.h27
-rw-r--r--searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.cpp45
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.h22
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h7
-rw-r--r--storage/src/vespa/storage/bucketdb/lockablemap.h1
-rw-r--r--storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp14
-rw-r--r--storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h14
-rw-r--r--storage/src/vespa/storage/persistence/filestorage/filestormetrics.cpp1
-rw-r--r--storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp13
-rw-r--r--storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h14
-rw-r--r--storageframework/src/vespa/storageframework/generic/component/component.cpp4
-rw-r--r--storageframework/src/vespa/storageframework/generic/component/component.h4
-rw-r--r--storageframework/src/vespa/storageframework/generic/component/componentregister.h2
-rw-r--r--storageframework/src/vespa/storageframework/generic/metric/metricregistrator.h4
-rw-r--r--storageframework/src/vespa/storageframework/generic/metric/metricupdatehook.h7
22 files changed, 127 insertions, 79 deletions
diff --git a/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.cpp b/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.cpp
index 9e3a2b44eb0..638ff05fc60 100644
--- a/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.cpp
+++ b/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.cpp
@@ -45,7 +45,7 @@ MemFilePersistenceMetrics::~MemFilePersistenceMetrics() { }
MemFilePersistenceThreadMetrics*
MemFilePersistenceMetrics::addThreadMetrics() {
- metrics::MetricLockGuard metricLock(_component.getMetricManagerLock());
+ vespalib::MonitorGuard metricLock(_component.getMetricManagerLock());
vespalib::LockGuard guard(_threadMetricsLock);
if (!_sumMetric.get()) {
diff --git a/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.h b/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.h
index 6c6e1d882d1..81c64142777 100644
--- a/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.h
+++ b/memfilepersistence/src/vespa/memfilepersistence/spi/memfilepersistenceprovidermetrics.h
@@ -3,6 +3,8 @@
#include <vespa/metrics/metrics.h>
#include <vespa/memfilepersistence/mapper/serializationmetrics.h>
+#include <vespa/vespalib/util/sync.h>
+#include <list>
namespace storage {
diff --git a/metrics/src/vespa/metrics/metricmanager.h b/metrics/src/vespa/metrics/metricmanager.h
index ffa73c5eff1..28e03b01aff 100644
--- a/metrics/src/vespa/metrics/metricmanager.h
+++ b/metrics/src/vespa/metrics/metricmanager.h
@@ -50,6 +50,7 @@
#include <vespa/metrics/metricsnapshot.h>
#include <vespa/metrics/namehash.h>
#include <vespa/metrics/valuemetric.h>
+#include <vespa/metrics/updatehook.h>
#include <vespa/vespalib/stllike/hash_set.h>
#include <vespa/vespalib/util/sync.h>
#include <map>
@@ -64,21 +65,6 @@ typedef vespalib::MonitorGuard MetricLockGuard;
class MetricManager : private document::Runnable
{
public:
- class UpdateHook {
- const char* _name;
- time_t _nextCall;
- uint32_t _period;
- friend class MetricManager;
-
- public:
- typedef vespalib::LinkedPtr<UpdateHook> LP;
- using MetricLockGuard = metrics::MetricLockGuard;
-
- UpdateHook(const char* name) : _name(name), _nextCall(0), _period(0) {}
- virtual ~UpdateHook() {}
- virtual void updateMetrics(const MetricLockGuard & guard) = 0;
- const char* getName() const { return _name; }
- };
struct Timer {
virtual ~Timer() {}
diff --git a/metrics/src/vespa/metrics/metrics.h b/metrics/src/vespa/metrics/metrics.h
index 4b21dfb8579..db18bbefdbf 100644
--- a/metrics/src/vespa/metrics/metrics.h
+++ b/metrics/src/vespa/metrics/metrics.h
@@ -11,7 +11,6 @@
#include <vespa/metrics/loadmetric.h>
#include <vespa/metrics/summetric.h>
#include <vespa/metrics/metricset.h>
-#include <vespa/metrics/metricmanager.h>
#include <vespa/metrics/metricsnapshot.h>
#include <vespa/metrics/metrictimer.h>
diff --git a/metrics/src/vespa/metrics/state_api_adapter.cpp b/metrics/src/vespa/metrics/state_api_adapter.cpp
index 606f57a87fe..28e0e277af7 100644
--- a/metrics/src/vespa/metrics/state_api_adapter.cpp
+++ b/metrics/src/vespa/metrics/state_api_adapter.cpp
@@ -1,5 +1,6 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "state_api_adapter.h"
+#include <vespa/metrics/metricmanager.h>
#include "jsonwriter.h"
namespace metrics {
diff --git a/metrics/src/vespa/metrics/state_api_adapter.h b/metrics/src/vespa/metrics/state_api_adapter.h
index dd041a3c37c..df3175dd614 100644
--- a/metrics/src/vespa/metrics/state_api_adapter.h
+++ b/metrics/src/vespa/metrics/state_api_adapter.h
@@ -3,10 +3,11 @@
#pragma once
#include <vespa/vespalib/net/metrics_producer.h>
-#include "metricmanager.h"
namespace metrics {
+class MetricManager;
+
/**
* This is an adapter class that implements the metrics producer
* interface defined by the state api implementation in vespalib by
diff --git a/metrics/src/vespa/metrics/updatehook.h b/metrics/src/vespa/metrics/updatehook.h
new file mode 100644
index 00000000000..2b2f4466b54
--- /dev/null
+++ b/metrics/src/vespa/metrics/updatehook.h
@@ -0,0 +1,27 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#pragma once
+
+#include <vespa/vespalib/util/sync.h>
+#include <vespa/vespalib/util/linkedptr.h>
+
+namespace metrics {
+
+class MetricManager;
+
+class UpdateHook {
+ const char* _name;
+ time_t _nextCall;
+ uint32_t _period;
+ friend class MetricManager;
+
+public:
+ typedef vespalib::LinkedPtr<UpdateHook> LP;
+ using MetricLockGuard = vespalib::MonitorGuard;
+
+ UpdateHook(const char* name) : _name(name), _nextCall(0), _period(0) {}
+ virtual ~UpdateHook() {}
+ virtual void updateMetrics(const MetricLockGuard & guard) = 0;
+ const char* getName() const { return _name; }
+};
+
+}
diff --git a/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.h b/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.h
index f4fa80a77ab..1def71604fb 100644
--- a/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.h
+++ b/searchcore/src/vespa/searchcore/fdispatch/program/fdispatch.h
@@ -9,6 +9,8 @@
#include <vespa/searchlib/engine/transportserver.h>
#include <vespa/searchcore/config/config-fdispatchrc.h>
#include <vespa/config/subscription/configuri.h>
+#include <vespa/config/helper/ifetchercallback.h>
+#include <vespa/config/helper/configfetcher.h>
#include <vespa/vespalib/net/simple_component_config_producer.h>
#include <vespa/vespalib/util/random.h>
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.cpp b/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.cpp
index c5581822e9d..be39398163f 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.cpp
+++ b/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.cpp
@@ -1,18 +1,19 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/fastos/fastos.h>
-#include <vespa/log/log.h>
-LOG_SETUP(".proton.server.metricsengine");
#include "metrics_engine.h"
#include <vespa/metrics/jsonwriter.h>
+#include <vespa/metrics/metricmanager.h>
+#include <vespa/log/log.h>
+LOG_SETUP(".proton.server.metricsengine");
namespace proton {
MetricsEngine::MetricsEngine()
: _root(),
_legacyRoot(),
- _manager(),
- _metrics_producer(_manager)
+ _manager(std::make_unique<metrics::MetricManager>()),
+ _metrics_producer(*_manager)
{
}
@@ -24,15 +25,15 @@ void
MetricsEngine::start(const config::ConfigUri &)
{
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
- _manager.registerMetric(guard, _root);
- _manager.registerMetric(guard, _legacyRoot);
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
+ _manager->registerMetric(guard, _root);
+ _manager->registerMetric(guard, _legacyRoot);
}
// Storage doesnt snapshot unset metrics to save memory. Currently
// feature seems a bit bugged. Disabling this optimalization for search.
// Can enable it later when it is confirmed to be working well.
- _manager.snapshotUnsetMetrics(true);
+ _manager->snapshotUnsetMetrics(true);
// Currently, when injecting a metric manager into the content layer,
// the content layer require to be the one initializing and starting it.
@@ -41,28 +42,28 @@ MetricsEngine::start(const config::ConfigUri &)
}
void
-MetricsEngine::addMetricsHook(metrics::MetricManager::UpdateHook &hook)
+MetricsEngine::addMetricsHook(metrics::UpdateHook &hook)
{
- _manager.addMetricUpdateHook(hook, 5);
+ _manager->addMetricUpdateHook(hook, 5);
}
void
-MetricsEngine::removeMetricsHook(metrics::MetricManager::UpdateHook &hook)
+MetricsEngine::removeMetricsHook(metrics::UpdateHook &hook)
{
- _manager.removeMetricUpdateHook(hook);
+ _manager->removeMetricUpdateHook(hook);
}
void
MetricsEngine::addExternalMetrics(metrics::Metric &child)
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
_legacyRoot.registerMetric(child);
}
void
MetricsEngine::removeExternalMetrics(metrics::Metric &child)
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
_legacyRoot.unregisterMetric(child);
}
@@ -109,7 +110,7 @@ removeLegacyDocumentDBMetrics(LegacyProtonMetrics &legacyRoot,
void
MetricsEngine::addDocumentDBMetrics(DocumentDBMetricsCollection &child)
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
addLegacyDocumentDBMetrics(_legacyRoot, child.getMetrics());
_root.registerMetric(child.getTaggedMetrics());
@@ -118,7 +119,7 @@ MetricsEngine::addDocumentDBMetrics(DocumentDBMetricsCollection &child)
void
MetricsEngine::removeDocumentDBMetrics(DocumentDBMetricsCollection &child)
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
removeLegacyDocumentDBMetrics(_legacyRoot, child.getMetrics());
_root.unregisterMetric(child.getTaggedMetrics());
@@ -170,7 +171,7 @@ MetricsEngine::addAttribute(AttributeMetrics &subAttributes,
AttributeMetrics *totalAttributes,
const std::string &name)
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
doAddAttribute(subAttributes, name);
if (totalAttributes != NULL) {
doAddAttribute(*totalAttributes, name);
@@ -182,7 +183,7 @@ MetricsEngine::removeAttribute(AttributeMetrics &subAttributes,
AttributeMetrics *totalAttributes,
const std::string &name)
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
doRemoveAttribute(subAttributes, name);
if (totalAttributes != NULL) {
doRemoveAttribute(*totalAttributes, name);
@@ -193,7 +194,7 @@ void
MetricsEngine::cleanAttributes(AttributeMetrics &subAttributes,
AttributeMetrics *totalAttributes)
{
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
doCleanAttributes(subAttributes);
if (totalAttributes != NULL) {
doCleanAttributes(*totalAttributes);
@@ -203,7 +204,7 @@ MetricsEngine::cleanAttributes(AttributeMetrics &subAttributes,
void MetricsEngine::addRankProfile(LegacyDocumentDBMetrics &owner,
const std::string &name,
size_t numDocIdPartitions) {
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
LegacyDocumentDBMetrics::MatchingMetrics::RankProfileMetrics::LP &entry =
owner.matching.rank_profiles[name];
if (entry.get()) {
@@ -216,7 +217,7 @@ void MetricsEngine::addRankProfile(LegacyDocumentDBMetrics &owner,
}
void MetricsEngine::cleanRankProfiles(LegacyDocumentDBMetrics &owner) {
- metrics::MetricLockGuard guard(_manager.getMetricLock());
+ metrics::MetricLockGuard guard(_manager->getMetricLock());
LegacyDocumentDBMetrics::MatchingMetrics::RankProfileMap metrics;
owner.matching.rank_profiles.swap(metrics);
for (LegacyDocumentDBMetrics::MatchingMetrics::RankProfileMap::const_iterator
@@ -228,7 +229,7 @@ void MetricsEngine::cleanRankProfiles(LegacyDocumentDBMetrics &owner) {
void
MetricsEngine::stop()
{
- _manager.stop();
+ _manager->stop();
}
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.h b/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.h
index 7c8fa0627e8..d85f7e52f17 100644
--- a/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.h
+++ b/searchcore/src/vespa/searchcore/proton/metrics/metrics_engine.h
@@ -12,15 +12,23 @@
#include <vespa/metrics/state_api_adapter.h>
#include <vespa/vespalib/net/metrics_producer.h>
+namespace metrics {
+ class Metricmanager;
+ class UpdateHook;
+}
+
+namespace config {
+ class ConfigUri;
+}
namespace proton {
class MetricsEngine : public MetricsWireService
{
private:
- ContentProtonMetrics _root;
- LegacyProtonMetrics _legacyRoot;
- metrics::MetricManager _manager;
- metrics::StateApiAdapter _metrics_producer;
+ ContentProtonMetrics _root;
+ LegacyProtonMetrics _legacyRoot;
+ std::unique_ptr<metrics::MetricManager> _manager;
+ metrics::StateApiAdapter _metrics_producer;
public:
typedef std::unique_ptr<MetricsEngine> UP;
@@ -30,8 +38,8 @@ public:
ContentProtonMetrics &root() { return _root; }
LegacyProtonMetrics &legacyRoot() { return _legacyRoot; }
void start(const config::ConfigUri & configUri);
- void addMetricsHook(metrics::MetricManager::UpdateHook &hook);
- void removeMetricsHook(metrics::MetricManager::UpdateHook &hook);
+ void addMetricsHook(metrics::UpdateHook &hook);
+ void removeMetricsHook(metrics::UpdateHook &hook);
void addExternalMetrics(metrics::Metric &child);
void removeExternalMetrics(metrics::Metric &child);
void addDocumentDBMetrics(DocumentDBMetricsCollection &child);
@@ -51,7 +59,7 @@ public:
void stop();
vespalib::MetricsProducer &metrics_producer() { return _metrics_producer; }
- metrics::MetricManager &getManager() { return _manager; }
+ metrics::MetricManager &getManager() { return *_manager; }
};
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
index efc26510268..07c3cd7f946 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
@@ -37,6 +37,7 @@
#include <vespa/vespalib/util/varholder.h>
#include <vespa/searchcore/proton/attribute/attribute_usage_filter.h>
#include "disk_mem_usage_forwarder.h"
+#include <vespa/metrics/updatehook.h>
using vespa::config::search::core::ProtonConfig;
@@ -72,12 +73,12 @@ class DocumentDB : public IDocumentDBConfigOwner,
public search::transactionlog::SyncProxy
{
private:
- class MetricsUpdateHook : public metrics::MetricManager::UpdateHook {
+ class MetricsUpdateHook : public metrics::UpdateHook {
DocumentDBMetricsCollection _metrics;
DocumentDB &_db;
public:
MetricsUpdateHook(DocumentDB &s, const std::string &doc_type, size_t maxNumThreads)
- : metrics::MetricManager::UpdateHook("documentdb-hook"),
+ : metrics::UpdateHook("documentdb-hook"),
_metrics(doc_type, maxNumThreads),
_db(s) {}
void updateMetrics(const MetricLockGuard & ) override { _db.updateMetrics(_metrics); }
@@ -316,7 +317,7 @@ public:
*
* @return metrics update hook
**/
- metrics::MetricManager::UpdateHook & getMetricsUpdateHook(void) {
+ metrics::UpdateHook & getMetricsUpdateHook(void) {
return _metricsHook;
}
diff --git a/storage/src/vespa/storage/bucketdb/lockablemap.h b/storage/src/vespa/storage/bucketdb/lockablemap.h
index 25a1cf09d0b..76890c32f98 100644
--- a/storage/src/vespa/storage/bucketdb/lockablemap.h
+++ b/storage/src/vespa/storage/bucketdb/lockablemap.h
@@ -19,6 +19,7 @@
#include <list>
#include <vespa/vespalib/util/sync.h>
#include <vespa/vespalib/stllike/hash_map.h>
+#include <vespa/vespalib/stllike/hash_set.h>
#include <vespa/vespalib/stllike/asciistream.h>
#include <vespa/document/bucket/bucketid.h>
#include <vespa/storage/common/bucketoperationlogger.h>
diff --git a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
index 023dd31747a..58b07dd031b 100644
--- a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
+++ b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.cpp
@@ -13,11 +13,25 @@
#include <vespa/config-stor-filestor.h>
#include <vespa/vespalib/io/fileutil.h>
#include <vespa/config/config.h>
+#include <vespa/vespalib/stllike/hash_set.h>
LOG_SETUP(".storage.bucketdb.initializer");
namespace storage {
+using BucketSet = vespalib::hash_set<document::BucketId, document::BucketId::hash>;
+
+struct BucketReadState {
+ typedef vespalib::LinkedPtr<BucketReadState> LP;
+
+ BucketSet _pending;
+ document::BucketId _databaseIterator;
+ bool _done;
+
+ BucketReadState() : _done(false) {}
+};
+
+
StorageBucketDBInitializer::Config::Config(const config::ConfigUri & configUri)
: _listPriority(0),
_infoReadPriority(255),
diff --git a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h
index 4b344a09076..da3f6b4e352 100644
--- a/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h
+++ b/storage/src/vespa/storage/bucketdb/storagebucketdbinitializer.h
@@ -51,13 +51,13 @@
namespace storage {
+class BucketReadState;
+
class StorageBucketDBInitializer : public StorageLink,
public framework::HtmlStatusReporter,
private framework::Runnable
{
typedef uint16_t Disk;
- typedef vespalib::hash_set<document::BucketId,
- document::BucketId::hash> BucketSet;
typedef vespalib::hash_map<api::StorageMessage::Id, Disk> IdDiskMap;
struct Config {
@@ -126,21 +126,13 @@ class StorageBucketDBInitializer : public StorageLink,
_gottenInitProgress(false), _doneListing(false),
_doneInitializing(false) {}
};
- struct BucketReadState {
- typedef vespalib::LinkedPtr<BucketReadState> LP;
-
- BucketSet _pending;
- document::BucketId _databaseIterator;
- bool _done;
- BucketReadState() : _done(false) {}
- };
Config _config;
System _system;
Metrics _metrics;
GlobalState _state;
- std::vector<BucketReadState::LP> _readState;
+ std::vector<vespalib::LinkedPtr<BucketReadState>> _readState;
public:
StorageBucketDBInitializer(const config::ConfigUri&,
diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormetrics.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormetrics.cpp
index de0d3c464c9..342240f0be7 100644
--- a/storage/src/vespa/storage/persistence/filestorage/filestormetrics.cpp
+++ b/storage/src/vespa/storage/persistence/filestorage/filestormetrics.cpp
@@ -2,6 +2,7 @@
#include "filestormetrics.h"
#include <vespa/metrics/loadmetric.hpp>
#include <vespa/metrics/summetric.hpp>
+#include <sstream>
namespace storage {
diff --git a/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp b/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp
index c523a24c69e..acc9cf248b4 100644
--- a/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp
+++ b/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.cpp
@@ -3,6 +3,7 @@
#include <vespa/fastos/fastos.h>
#include <vespa/storageframework/defaultimplementation/component/componentregisterimpl.h>
#include <vespa/storageframework/storageframework.h>
+#include <vespa/metrics/metricmanager.h>
namespace storage {
namespace framework {
@@ -19,8 +20,9 @@ ComponentRegisterImpl::ComponentRegisterImpl()
_threadPool(0),
_upgradeFlag(NO_UPGRADE_SPECIAL_HANDLING_ACTIVE),
_shutdownListener(0)
-{
-}
+{ }
+
+ComponentRegisterImpl::~ComponentRegisterImpl() { }
void
ComponentRegisterImpl::registerComponent(ManagedComponent& mc)
@@ -139,12 +141,12 @@ ComponentRegisterImpl::registerMetric(metrics::Metric& m)
}
namespace {
- struct MetricHookWrapper : public metrics::MetricManager::UpdateHook {
+ struct MetricHookWrapper : public metrics::UpdateHook {
MetricUpdateHook& _hook;
MetricHookWrapper(vespalib::stringref name,
MetricUpdateHook& hook)
- : metrics::MetricManager::UpdateHook(name.c_str()),
+ : metrics::UpdateHook(name.c_str()),
_hook(hook)
{
}
@@ -159,8 +161,7 @@ ComponentRegisterImpl::registerUpdateHook(vespalib::stringref name,
SecondTime period)
{
vespalib::LockGuard lock(_componentLock);
- metrics::MetricManager::UpdateHook::LP hookPtr(
- new MetricHookWrapper(name, hook));
+ metrics::UpdateHook::LP hookPtr(new MetricHookWrapper(name, hook));
_hooks.push_back(hookPtr);
_metricManager->addMetricUpdateHook(*hookPtr, period.getTime());
}
diff --git a/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h b/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h
index 633123efdf3..8e472eb9c08 100644
--- a/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h
+++ b/storageframework/src/vespa/storageframework/defaultimplementation/component/componentregisterimpl.h
@@ -17,12 +17,19 @@
*/
#pragma once
-#include <vespa/metrics/metricmanager.h>
#include <vespa/storageframework/generic/component/componentregister.h>
#include <vespa/storageframework/generic/component/managedcomponent.h>
#include <vespa/storageframework/generic/metric/metricregistrator.h>
#include <vespa/storageframework/generic/status/statusreportermap.h>
#include <vespa/vespalib/util/sync.h>
+#include <vespa/metrics/metricset.h>
+
+namespace metrics {
+
+ class MetricManager;
+ class UpdateHook;
+
+}
namespace storage {
namespace framework {
@@ -41,7 +48,7 @@ class ComponentRegisterImpl : public virtual ComponentRegister,
std::vector<ManagedComponent*> _components;
metrics::MetricSet _topMetricSet;
- std::vector<metrics::MetricManager::UpdateHook::LP> _hooks;
+ std::vector<vespalib::LinkedPtr<metrics::UpdateHook>> _hooks;
metrics::MetricManager* _metricManager;
MemoryManagerInterface* _memoryManager;
Clock* _clock;
@@ -53,6 +60,7 @@ public:
typedef std::unique_ptr<ComponentRegisterImpl> UP;
ComponentRegisterImpl();
+ ~ComponentRegisterImpl();
bool hasMetricManager() const { return (_metricManager != 0); }
metrics::MetricManager& getMetricManager() {
@@ -76,7 +84,7 @@ public:
void registerUpdateHook(vespalib::stringref name,
MetricUpdateHook& hook,
SecondTime period);
- metrics::MetricLockGuard getMetricManagerLock() override;
+ vespalib::MonitorGuard getMetricManagerLock() override;
void registerShutdownListener(ShutdownListener&);
};
diff --git a/storageframework/src/vespa/storageframework/generic/component/component.cpp b/storageframework/src/vespa/storageframework/generic/component/component.cpp
index ba741aade2a..47897f8adab 100644
--- a/storageframework/src/vespa/storageframework/generic/component/component.cpp
+++ b/storageframework/src/vespa/storageframework/generic/component/component.cpp
@@ -76,13 +76,13 @@ Component::registerMetricUpdateHook(MetricUpdateHook& hook, SecondTime period)
}
}
-metrics::MetricLockGuard
+vespalib::MonitorGuard
Component::getMetricManagerLock()
{
if (_metricReg != 0) {
return _metricReg->getMetricManagerLock();
} else {
- return metrics::MetricLockGuard();
+ return vespalib::MonitorGuard();
}
}
diff --git a/storageframework/src/vespa/storageframework/generic/component/component.h b/storageframework/src/vespa/storageframework/generic/component/component.h
index 063b1102b13..8bbf0dc192a 100644
--- a/storageframework/src/vespa/storageframework/generic/component/component.h
+++ b/storageframework/src/vespa/storageframework/generic/component/component.h
@@ -71,7 +71,7 @@
#include <vespa/storageframework/generic/thread/runnable.h>
#include <vespa/storageframework/generic/thread/thread.h>
#include <vespa/storageframework/generic/clock/clock.h>
-#include <vespa/metrics/metricmanager.h>
+#include <vespa/vespalib/util/sync.h>
#include <atomic>
namespace storage {
@@ -162,7 +162,7 @@ public:
* If you need to modify the metric sets that have been registered, you need
* to hold the metric manager lock while you do it.
*/
- metrics::MetricLockGuard getMetricManagerLock();
+ vespalib::MonitorGuard getMetricManagerLock();
/** Get the name of the component. Must be a unique name. */
const vespalib::string& getName() const { return _name; }
diff --git a/storageframework/src/vespa/storageframework/generic/component/componentregister.h b/storageframework/src/vespa/storageframework/generic/component/componentregister.h
index d43f9faf4a0..7b863ec77a9 100644
--- a/storageframework/src/vespa/storageframework/generic/component/componentregister.h
+++ b/storageframework/src/vespa/storageframework/generic/component/componentregister.h
@@ -11,6 +11,8 @@
*/
#pragma once
+#include <vespa/vespalib/stllike/string.h>
+
namespace storage {
namespace framework {
diff --git a/storageframework/src/vespa/storageframework/generic/metric/metricregistrator.h b/storageframework/src/vespa/storageframework/generic/metric/metricregistrator.h
index d300a4508af..12d39b5f313 100644
--- a/storageframework/src/vespa/storageframework/generic/metric/metricregistrator.h
+++ b/storageframework/src/vespa/storageframework/generic/metric/metricregistrator.h
@@ -11,7 +11,7 @@
#pragma once
#include <vespa/vespalib/stllike/string.h>
-#include <vespa/metrics/metricmanager.h>
+#include <vespa/vespalib/util/sync.h>
namespace storage {
namespace framework {
@@ -23,7 +23,7 @@ struct MetricRegistrator {
virtual void registerUpdateHook(vespalib::stringref name,
MetricUpdateHook& hook,
SecondTime period) = 0;
- virtual metrics::MetricLockGuard getMetricManagerLock() = 0;
+ virtual vespalib::MonitorGuard getMetricManagerLock() = 0;
};
} // framework
diff --git a/storageframework/src/vespa/storageframework/generic/metric/metricupdatehook.h b/storageframework/src/vespa/storageframework/generic/metric/metricupdatehook.h
index 741e0ade787..07fdf1b5a6e 100644
--- a/storageframework/src/vespa/storageframework/generic/metric/metricupdatehook.h
+++ b/storageframework/src/vespa/storageframework/generic/metric/metricupdatehook.h
@@ -7,14 +7,15 @@
*/
#pragma once
-#include <vespa/vespalib/stllike/string.h>
-#include <vespa/metrics/metricmanager.h>
+namespace vespalib {
+ class MonitorGuard;
+}
namespace storage {
namespace framework {
struct MetricUpdateHook {
- typedef metrics::MetricManager::UpdateHook::MetricLockGuard MetricLockGuard;
+ using MetricLockGuard = vespalib::MonitorGuard;
virtual ~MetricUpdateHook() {}
virtual void updateMetrics(const MetricLockGuard &) = 0;