aboutsummaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@verizonmedia.com>2019-02-04 14:47:57 +0000
committerTor Brede Vekterli <vekterli@verizonmedia.com>2019-02-04 14:47:57 +0000
commitd4ffb1cb379d3212f9d7a2ed7bd10cae9e5152f9 (patch)
treefce1430e91726e2af15f0206b79489204aa50e89 /storage
parent78c367c74800dfd14e69f8f0932c3f1eff878888 (diff)
Append node identity to response messages sent by Bouncer component
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/storageserver/bouncertest.cpp8
-rw-r--r--storage/src/vespa/storage/storageserver/bouncer.cpp13
-rw-r--r--storage/src/vespa/storage/storageserver/bouncer.h1
3 files changed, 16 insertions, 6 deletions
diff --git a/storage/src/tests/storageserver/bouncertest.cpp b/storage/src/tests/storageserver/bouncertest.cpp
index 4d739aab2d6..be926722497 100644
--- a/storage/src/tests/storageserver/bouncertest.cpp
+++ b/storage/src/tests/storageserver/bouncertest.cpp
@@ -213,9 +213,11 @@ BouncerTest::assertMessageBouncedWithAbort()
{
CPPUNIT_ASSERT_EQUAL(size_t(1), _upper->getNumReplies());
CPPUNIT_ASSERT_EQUAL(size_t(0), _upper->getNumCommands());
- CPPUNIT_ASSERT_EQUAL(api::ReturnCode::ABORTED,
- static_cast<api::RemoveReply&>(*_upper->getReply(0)).
- getResult().getResult());
+ auto& reply = dynamic_cast<api::StorageReply&>(*_upper->getReply(0));
+ CPPUNIT_ASSERT_EQUAL(api::ReturnCode(api::ReturnCode::ABORTED,
+ "We don't allow command of type MessageType(12, Remove) "
+ "when node is in state Down (on storage.2)"),
+ reply.getResult());
CPPUNIT_ASSERT_EQUAL(size_t(0), _lower->getNumCommands());
}
diff --git a/storage/src/vespa/storage/storageserver/bouncer.cpp b/storage/src/vespa/storage/storageserver/bouncer.cpp
index 8e882fa867e..82cf64423c6 100644
--- a/storage/src/vespa/storage/storageserver/bouncer.cpp
+++ b/storage/src/vespa/storage/storageserver/bouncer.cpp
@@ -102,6 +102,10 @@ Bouncer::validateConfig(
}
}
+void Bouncer::append_node_identity(std::ostream& target_stream) const {
+ target_stream << " (on " << _component.getNodeType() << '.' << _component.getIndex() << ")";
+}
+
void
Bouncer::abortCommandForUnavailableNode(api::StorageMessage& msg,
const lib::State& state)
@@ -111,7 +115,8 @@ Bouncer::abortCommandForUnavailableNode(api::StorageMessage& msg,
static_cast<api::StorageCommand&>(msg).makeReply().release());
std::ostringstream ost;
ost << "We don't allow command of type " << msg.getType()
- << " when node is in state " << state.toString(true) << ".";
+ << " when node is in state " << state.toString(true);
+ append_node_identity(ost);
reply->setResult(api::ReturnCode(api::ReturnCode::ABORTED, ost.str()));
sendUp(reply);
}
@@ -123,7 +128,8 @@ Bouncer::rejectCommandWithTooHighClockSkew(api::StorageMessage& msg,
auto& as_cmd = dynamic_cast<api::StorageCommand&>(msg);
std::ostringstream ost;
ost << "Message " << msg.getType() << " is more than "
- << maxClockSkewInSeconds << " seconds in the future.";
+ << maxClockSkewInSeconds << " seconds in the future";
+ append_node_identity(ost);
LOGBP(warning, "Rejecting operation from distributor %u: %s",
as_cmd.getSourceIndex(), ost.str().c_str());
_metrics->clock_skew_aborts.inc();
@@ -140,7 +146,8 @@ Bouncer::abortCommandDueToClusterDown(api::StorageMessage& msg)
static_cast<api::StorageCommand&>(msg).makeReply().release());
std::ostringstream ost;
ost << "We don't allow external load while cluster is in state "
- << _clusterState->toString(true) << ".";
+ << _clusterState->toString(true);
+ append_node_identity(ost);
reply->setResult(api::ReturnCode(api::ReturnCode::ABORTED, ost.str()));
sendUp(reply);
}
diff --git a/storage/src/vespa/storage/storageserver/bouncer.h b/storage/src/vespa/storage/storageserver/bouncer.h
index 12a8a0f5636..258b0b18a32 100644
--- a/storage/src/vespa/storage/storageserver/bouncer.h
+++ b/storage/src/vespa/storage/storageserver/bouncer.h
@@ -89,6 +89,7 @@ private:
void handleNewState() override;
const lib::NodeState &getDerivedNodeState(document::BucketSpace bucketSpace) const;
+ void append_node_identity(std::ostream& target_stream) const;
};
} // storage