diff options
author | Tor Brede Vekterli <vekterli@oath.com> | 2018-01-19 14:11:02 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@oath.com> | 2018-01-19 14:11:02 +0000 |
commit | df171bcef711e1c56ea7f31f486b7eb821600851 (patch) | |
tree | 2aea49ac0ce7b23e7131fa483dfac54900f142c1 /storage | |
parent | 2b8eca7483f08f9a3a3e3b1765ca1060b9516da6 (diff) |
Add bouncer metric set and clock skew abort metric
Diffstat (limited to 'storage')
6 files changed, 53 insertions, 5 deletions
diff --git a/storage/src/tests/storageserver/bouncertest.cpp b/storage/src/tests/storageserver/bouncertest.cpp index 5be57155ec9..a4f7ed915d8 100644 --- a/storage/src/tests/storageserver/bouncertest.cpp +++ b/storage/src/tests/storageserver/bouncertest.cpp @@ -5,6 +5,7 @@ #include <vespa/storageapi/message/state.h> #include <vespa/storageapi/message/stat.h> #include <vespa/storage/storageserver/bouncer.h> +#include <vespa/storage/storageserver/bouncer_metrics.h> #include <tests/common/teststorageapp.h> #include <tests/common/testhelper.h> #include <tests/common/dummystoragelink.h> @@ -122,6 +123,7 @@ BouncerTest::createDummyFeedMessage(api::Timestamp timestamp, void BouncerTest::testFutureTimestamp() { + CPPUNIT_ASSERT_EQUAL(uint64_t(0), _manager->metrics().clock_skew_aborts.getValue()); // Fail when future timestamps (more than 5 seconds) are received. { @@ -134,6 +136,7 @@ BouncerTest::testFutureTimestamp() getResult().getResult()); _upper->reset(); } + CPPUNIT_ASSERT_EQUAL(uint64_t(1), _manager->metrics().clock_skew_aborts.getValue()); // Verify that 1 second clock skew is OK { @@ -151,7 +154,7 @@ BouncerTest::testFutureTimestamp() CPPUNIT_ASSERT_EQUAL(1, (int)_lower->getNumCommands()); } - + CPPUNIT_ASSERT_EQUAL(uint64_t(1), _manager->metrics().clock_skew_aborts.getValue()); } void diff --git a/storage/src/vespa/storage/storageserver/CMakeLists.txt b/storage/src/vespa/storage/storageserver/CMakeLists.txt index 4fb3a5a0b99..0f90a5a8afb 100644 --- a/storage/src/vespa/storage/storageserver/CMakeLists.txt +++ b/storage/src/vespa/storage/storageserver/CMakeLists.txt @@ -2,6 +2,7 @@ vespa_add_library(storage_storageserver SOURCES bouncer.cpp + bouncer_metrics.cpp bucketintegritychecker.cpp changedbucketownershiphandler.cpp communicationmanager.cpp diff --git a/storage/src/vespa/storage/storageserver/bouncer.cpp b/storage/src/vespa/storage/storageserver/bouncer.cpp index 97ae3fb1a65..3d068ec5f81 100644 --- a/storage/src/vespa/storage/storageserver/bouncer.cpp +++ b/storage/src/vespa/storage/storageserver/bouncer.cpp @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "bouncer.h" +#include "bouncer_metrics.h" #include <vespa/storageapi/message/state.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/config/subscription/configuri.h> @@ -20,9 +21,11 @@ Bouncer::Bouncer(StorageComponentRegister& compReg, const config::ConfigUri & co _lock(), _nodeState("s:i"), _clusterState(&lib::State::UP), - _configFetcher(configUri.getContext()) + _configFetcher(configUri.getContext()), + _metrics(std::make_unique<BouncerMetrics>()) { _component.getStateUpdater().addStateListener(*this); + _component.registerMetric(*_metrics); // Register for config. Normally not critical, so catching config // exception allowing program to continue if missing/faulty config. try{ @@ -69,6 +72,10 @@ Bouncer::configure(std::unique_ptr<vespa::config::content::core::StorBouncerConf _config = std::move(config); } +const BouncerMetrics& Bouncer::metrics() const noexcept { + return *_metrics; +} + void Bouncer::validateConfig( const vespa::config::content::core::StorBouncerConfig& newConfig) const @@ -115,6 +122,7 @@ Bouncer::abortCommandWithTooHighClockSkew(api::StorageMessage& msg, << maxClockSkewInSeconds << " seconds in the future."; LOGBP(warning, "Aborting operation from distributor %u: %s", as_cmd.getSourceIndex(), ost.str().c_str()); + _metrics->clock_skew_aborts.inc(); std::shared_ptr<api::StorageReply> reply(as_cmd.makeReply().release()); reply->setResult(api::ReturnCode(api::ReturnCode::ABORTED, ost.str())); diff --git a/storage/src/vespa/storage/storageserver/bouncer.h b/storage/src/vespa/storage/storageserver/bouncer.h index f1428f9254f..6c81cb1b47a 100644 --- a/storage/src/vespa/storage/storageserver/bouncer.h +++ b/storage/src/vespa/storage/storageserver/bouncer.h @@ -23,6 +23,8 @@ namespace config { class ConfigUri; } namespace storage { +class BouncerMetrics; + class Bouncer : public StorageLink, private StateListener, private config::IFetcherCallback<vespa::config::content::core::StorBouncerConfig> @@ -33,17 +35,19 @@ class Bouncer : public StorageLink, lib::NodeState _nodeState; const lib::State* _clusterState; config::ConfigFetcher _configFetcher; + std::unique_ptr<BouncerMetrics> _metrics; public: - explicit Bouncer(StorageComponentRegister& compReg, - const config::ConfigUri & configUri); - ~Bouncer(); + Bouncer(StorageComponentRegister& compReg, const config::ConfigUri & configUri); + ~Bouncer() override; void print(std::ostream& out, bool verbose, const std::string& indent) const override; void configure(std::unique_ptr<vespa::config::content::core::StorBouncerConfig> config) override; + const BouncerMetrics& metrics() const noexcept; + private: void validateConfig( const vespa::config::content::core::StorBouncerConfig&) const; diff --git a/storage/src/vespa/storage/storageserver/bouncer_metrics.cpp b/storage/src/vespa/storage/storageserver/bouncer_metrics.cpp new file mode 100644 index 00000000000..2ee39ad22ec --- /dev/null +++ b/storage/src/vespa/storage/storageserver/bouncer_metrics.cpp @@ -0,0 +1,16 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "bouncer_metrics.h" + +namespace storage { + +BouncerMetrics::BouncerMetrics() + : MetricSet("bouncer", "", "Metrics for Bouncer component", nullptr), + clock_skew_aborts("clock_skew_aborts", "", "Number of client operations that were aborted due to " + "clock skew between sender and receiver exceeding acceptable range", this) +{ +} + +BouncerMetrics::~BouncerMetrics() = default; + +}
\ No newline at end of file diff --git a/storage/src/vespa/storage/storageserver/bouncer_metrics.h b/storage/src/vespa/storage/storageserver/bouncer_metrics.h new file mode 100644 index 00000000000..9beca6c73b7 --- /dev/null +++ b/storage/src/vespa/storage/storageserver/bouncer_metrics.h @@ -0,0 +1,16 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/metrics/metrics.h> + +namespace storage { + +struct BouncerMetrics : metrics::MetricSet { + metrics::LongCountMetric clock_skew_aborts; + + BouncerMetrics(); + ~BouncerMetrics() override; +}; + +}
\ No newline at end of file |