summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-01-19 14:11:02 +0000
committerTor Brede Vekterli <vekterli@oath.com>2018-01-19 14:11:02 +0000
commitdf171bcef711e1c56ea7f31f486b7eb821600851 (patch)
tree2aea49ac0ce7b23e7131fa483dfac54900f142c1 /storage
parent2b8eca7483f08f9a3a3e3b1765ca1060b9516da6 (diff)
Add bouncer metric set and clock skew abort metric
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/storageserver/bouncertest.cpp5
-rw-r--r--storage/src/vespa/storage/storageserver/CMakeLists.txt1
-rw-r--r--storage/src/vespa/storage/storageserver/bouncer.cpp10
-rw-r--r--storage/src/vespa/storage/storageserver/bouncer.h10
-rw-r--r--storage/src/vespa/storage/storageserver/bouncer_metrics.cpp16
-rw-r--r--storage/src/vespa/storage/storageserver/bouncer_metrics.h16
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