aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-04-04 00:34:30 +0200
committerHenning Baldersheim <balder@oath.com>2018-04-04 00:34:30 +0200
commit0d53709e475bc10c294bbcdbd275e00247344703 (patch)
treedd525de16f67947b6754700eaa2d14f56b1d1163
parent26e56f2bca05f82d8aa0c9e5da59fbfc00918161 (diff)
Update test and serialize bucket information.
-rw-r--r--storage/src/tests/distributor/pendingmessagetrackertest.cpp95
-rw-r--r--storage/src/vespa/storage/distributor/pendingmessagetracker.cpp74
-rw-r--r--storage/src/vespa/storage/distributor/pendingmessagetracker.h59
-rw-r--r--storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp165
4 files changed, 131 insertions, 262 deletions
diff --git a/storage/src/tests/distributor/pendingmessagetrackertest.cpp b/storage/src/tests/distributor/pendingmessagetrackertest.cpp
index a7fec5ac460..1ded89dc6d3 100644
--- a/storage/src/tests/distributor/pendingmessagetrackertest.cpp
+++ b/storage/src/tests/distributor/pendingmessagetrackertest.cpp
@@ -13,8 +13,7 @@
using document::test::makeDocumentBucket;
-namespace storage {
-namespace distributor {
+namespace storage::distributor {
using namespace std::chrono_literals;
@@ -199,12 +198,10 @@ PendingMessageTrackerTest::testSimple()
clock.setAbsoluteTimeInSeconds(1);
PendingMessageTracker tracker(compReg);
- std::shared_ptr<api::RemoveCommand> remove(
- new api::RemoveCommand(
+ auto remove = std::make_shared<api::RemoveCommand>(
makeDocumentBucket(document::BucketId(16, 1234)),
- document::DocumentId("userdoc:footype:1234:foo"), 1001));
- remove->setAddress(
- api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 0));
+ document::DocumentId("userdoc:footype:1234:foo"), 1001);
+ remove->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 0));
tracker.insert(remove);
{
@@ -216,8 +213,7 @@ PendingMessageTrackerTest::testSimple()
"<b>Bucket(BucketSpace(0x0000000000000001), BucketId(0x40000000000004d2))</b>\n"
"<ul>\n"
"<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> "
- "Remove(BucketId(0x40000000000004d2), "
- "userdoc:footype:1234:foo, timestamp 1001)</li>\n"
+ "Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
"</ul>\n"),
ost.str());
}
@@ -229,8 +225,7 @@ PendingMessageTrackerTest::testSimple()
std::ostringstream ost;
tracker.reportStatus(ost, framework::HttpUrlPath("/pendingmessages?order=bucket"));
- CPPUNIT_ASSERT_MSG(ost.str(),
- ost.str().find("doc:") == std::string::npos);
+ CPPUNIT_ASSERT_MSG(ost.str(), ost.str().find("doc:") == std::string::npos);
}
}
@@ -240,20 +235,17 @@ PendingMessageTrackerTest::insertMessages(PendingMessageTracker& tracker)
for (uint32_t i = 0; i < 4; i++) {
std::ostringstream ost;
ost << "userdoc:footype:1234:" << i;
- std::shared_ptr<api::RemoveCommand> remove(
- new api::RemoveCommand(
+ auto remove = std::make_shared<api::RemoveCommand>(
makeDocumentBucket(document::BucketId(16, 1234)),
- document::DocumentId(ost.str()), 1000 + i));
- remove->setAddress(
- api::StorageMessageAddress("storage",
- lib::NodeType::STORAGE, i % 2));
+ document::DocumentId(ost.str()), 1000 + i);
+ remove->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, i % 2));
tracker.insert(remove);
}
for (uint32_t i = 0; i < 4; i++) {
std::ostringstream ost;
ost << "userdoc:footype:4567:" << i;
- std::shared_ptr<api::RemoveCommand> remove(new api::RemoveCommand(makeDocumentBucket(document::BucketId(16, 4567)), document::DocumentId(ost.str()), 2000 + i));
+ auto remove = std::make_shared<api::RemoveCommand>(makeDocumentBucket(document::BucketId(16, 4567)), document::DocumentId(ost.str()), 2000 + i);
remove->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, i % 2));
tracker.insert(remove);
}
@@ -302,21 +294,21 @@ PendingMessageTrackerTest::testMultipleMessages()
std::string(
"<b>Bucket(BucketSpace(0x0000000000000001), BucketId(0x40000000000004d2))</b>\n"
"<ul>\n"
- "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:0, timestamp 1000)</li>\n"
- "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:2, timestamp 1002)</li>\n"
- "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:1, timestamp 1001)</li>\n"
- "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:3, timestamp 1003)</li>\n"
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
"</ul>\n"
"<b>Bucket(BucketSpace(0x0000000000000001), BucketId(0x40000000000011d7))</b>\n"
"<ul>\n"
- "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:0, timestamp 2000)</li>\n"
- "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:2, timestamp 2002)</li>\n"
- "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:1, timestamp 2001)</li>\n"
- "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:3, timestamp 2003)</li>\n"
- "</ul>\n"),
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
+ "</ul>\n"
+ ),
ost.str());
}
-
{
std::ostringstream ost;
tracker.reportStatus(ost, framework::HttpUrlPath("/pendingmessages?order=node"));
@@ -324,17 +316,17 @@ PendingMessageTrackerTest::testMultipleMessages()
CPPUNIT_ASSERT_CONTAIN(std::string(
"<b>Node 0 (pending count: 4)</b>\n"
"<ul>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:0, timestamp 1000)</li>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:2, timestamp 1002)</li>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:0, timestamp 2000)</li>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:2, timestamp 2002)</li>\n"
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
+ "<li><i>Node 0</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
"</ul>\n"
"<b>Node 1 (pending count: 4)</b>\n"
"<ul>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:1, timestamp 1001)</li>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), userdoc:footype:1234:3, timestamp 1003)</li>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:1, timestamp 2001)</li>\n"
- "<li><b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), userdoc:footype:4567:3, timestamp 2003)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000004d2), priority=127)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
+ "<li><i>Node 1</i>: <b>1970-01-01 00:00:01</b> Remove(BucketId(0x40000000000011d7), priority=127)</li>\n"
"</ul>\n"
), ost.str());
}
@@ -394,12 +386,9 @@ PendingMessageTrackerTest::testGetPendingMessageTypes()
PendingMessageTracker tracker(compReg);
document::BucketId bid(16, 1234);
- std::shared_ptr<api::RemoveCommand> remove(
- new api::RemoveCommand(
- makeDocumentBucket(bid),
- document::DocumentId("userdoc:footype:1234:foo"), 1001));
- remove->setAddress(
- api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 0));
+ auto remove = std::make_shared<api::RemoveCommand>(makeDocumentBucket(bid),
+ document::DocumentId("userdoc:footype:1234:foo"), 1001);
+ remove->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 0));
tracker.insert(remove);
{
@@ -434,21 +423,16 @@ PendingMessageTrackerTest::testHasPendingMessage()
CPPUNIT_ASSERT(!tracker.hasPendingMessage(1, makeDocumentBucket(bid), api::MessageType::REMOVE_ID));
{
- std::shared_ptr<api::RemoveCommand> remove(
- new api::RemoveCommand(
- makeDocumentBucket(bid),
- document::DocumentId("userdoc:footype:1234:foo"), 1001));
- remove->setAddress(
- api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 1));
+ auto remove = std::make_shared<api::RemoveCommand>(makeDocumentBucket(bid),
+ document::DocumentId("userdoc:footype:1234:foo"), 1001);
+ remove->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 1));
tracker.insert(remove);
}
CPPUNIT_ASSERT(tracker.hasPendingMessage(1, makeDocumentBucket(bid), api::MessageType::REMOVE_ID));
CPPUNIT_ASSERT(!tracker.hasPendingMessage(0, makeDocumentBucket(bid), api::MessageType::REMOVE_ID));
CPPUNIT_ASSERT(!tracker.hasPendingMessage(2, makeDocumentBucket(bid), api::MessageType::REMOVE_ID));
- CPPUNIT_ASSERT(!tracker.hasPendingMessage(1,
- makeDocumentBucket(document::BucketId(16, 1233)),
- api::MessageType::REMOVE_ID));
+ CPPUNIT_ASSERT(!tracker.hasPendingMessage(1, makeDocumentBucket(document::BucketId(16, 1233)), api::MessageType::REMOVE_ID));
CPPUNIT_ASSERT(!tracker.hasPendingMessage(1, makeDocumentBucket(bid), api::MessageType::DELETEBUCKET_ID));
}
@@ -460,10 +444,8 @@ class OperationEnumerator : public PendingMessageTracker::Checker
public:
bool check(uint32_t msgType, uint16_t node, uint8_t p) override {
(void) p;
- ss << api::MessageType::get(static_cast<api::MessageType::Id>(msgType))
- .getName()
- << " -> " << node
- << "\n";
+ ss << api::MessageType::get(static_cast<api::MessageType::Id>(msgType)).getName()
+ << " -> " << node << "\n";
return true;
}
@@ -523,5 +505,4 @@ void PendingMessageTrackerTest::busy_node_duration_can_be_adjusted() {
CPPUNIT_ASSERT(!f.tracker().getNodeInfo().isBusy(0));
}
-} // distributor
-} // storage
+}
diff --git a/storage/src/vespa/storage/distributor/pendingmessagetracker.cpp b/storage/src/vespa/storage/distributor/pendingmessagetracker.cpp
index e3fd0c1f72d..52a35bffc98 100644
--- a/storage/src/vespa/storage/distributor/pendingmessagetracker.cpp
+++ b/storage/src/vespa/storage/distributor/pendingmessagetracker.cpp
@@ -10,8 +10,7 @@ LOG_SETUP(".pendingmessages");
namespace storage::distributor {
PendingMessageTracker::PendingMessageTracker(framework::ComponentRegister& cr)
- : framework::HtmlStatusReporter("pendingmessages",
- "Pending messages to storage nodes"),
+ : framework::HtmlStatusReporter("pendingmessages", "Pending messages to storage nodes"),
_component(cr, "pendingmessagetracker"),
_nodeInfo(_component.getClock()),
_nodeBusyDuration(60),
@@ -32,6 +31,15 @@ PendingMessageTracker::MessageEntry::MessageEntry(TimePoint timeStamp_, uint32_t
nodeIdx(nodeIdx_)
{ }
+vespalib::string
+PendingMessageTracker::MessageEntry::toHtml() const {
+ vespalib::asciistream ss;
+ ss << "<li><i>Node " << nodeIdx << "</i>: "
+ << "<b>" << framework::MilliSecTime(timeStamp.count()).toString() << "</b> "
+ << api::MessageType::get(api::MessageType::Id(msgType)).getName() << "(" << bucket.getBucketId() << ", priority=" << priority << ")</li>\n";
+ return ss.str();
+}
+
PendingMessageTracker::TimePoint
PendingMessageTracker::currentTime() const
{
@@ -82,16 +90,13 @@ PendingMessageTracker::insert(const std::shared_ptr<api::StorageMessage>& msg)
{
std::lock_guard<std::mutex> guard(_lock);
if (msg->getAddress()) {
- _messages.insert(
- MessageEntry(currentTime(), msg->getType().getId(), msg->getPriority(), msg->getMsgId(),
- msg->getBucket(), msg->getAddress()->getIndex()));
+ _messages.emplace(currentTime(), msg->getType().getId(), msg->getPriority(), msg->getMsgId(),
+ msg->getBucket(), msg->getAddress()->getIndex());
_nodeInfo.incPending(msg->getAddress()->getIndex());
LOG(debug, "Sending message %s with id %zu to %s",
- msg->toString().c_str(),
- msg->getMsgId(),
- msg->getAddress()->toString().c_str());
+ msg->toString().c_str(), msg->getMsgId(), msg->getAddress()->toString().c_str());
}
}
@@ -137,9 +142,7 @@ runCheckerOnRange(PendingMessageTracker::Checker& checker, const Range& range)
}
void
-PendingMessageTracker::checkPendingMessages(uint16_t node,
- const document::Bucket &bucket,
- Checker& checker) const
+PendingMessageTracker::checkPendingMessages(uint16_t node, const document::Bucket &bucket, Checker& checker) const
{
std::lock_guard<std::mutex> guard(_lock);
const MessagesByNodeAndBucket& msgs(boost::multi_index::get<1>(_messages));
@@ -149,8 +152,7 @@ PendingMessageTracker::checkPendingMessages(uint16_t node,
}
void
-PendingMessageTracker::checkPendingMessages(const document::Bucket &bucket,
- Checker& checker) const
+PendingMessageTracker::checkPendingMessages(const document::Bucket &bucket, Checker& checker) const
{
std::lock_guard<std::mutex> guard(_lock);
const MessagesByBucketAndType& msgs(boost::multi_index::get<2>(_messages));
@@ -160,9 +162,7 @@ PendingMessageTracker::checkPendingMessages(const document::Bucket &bucket,
}
bool
-PendingMessageTracker::hasPendingMessage(uint16_t node,
- const document::Bucket &bucket,
- uint32_t messageType) const
+PendingMessageTracker::hasPendingMessage(uint16_t node, const document::Bucket &bucket, uint32_t messageType) const
{
std::lock_guard<std::mutex> guard(_lock);
const MessagesByNodeAndBucket& msgs(boost::multi_index::get<1>(_messages));
@@ -174,9 +174,7 @@ PendingMessageTracker::hasPendingMessage(uint16_t node,
void
PendingMessageTracker::getStatusStartPage(std::ostream& out) const
{
- out << "View:\n"
- "<ul>\n"
- "<li><a href=\"?order=bucket\">Group by bucket</a></li>"
+ out << "View:\n<ul>\n<li><a href=\"?order=bucket\">Group by bucket</a></li>"
"<li><a href=\"?order=node\">Group by node</a></li>\n";
}
@@ -185,18 +183,10 @@ PendingMessageTracker::getStatusPerBucket(std::ostream& out) const
{
std::lock_guard<std::mutex> guard(_lock);
const MessagesByNodeAndBucket& msgs = boost::multi_index::get<1>(_messages);
- using BucketMap = std::map<document::Bucket,
- std::vector<vespalib::string>>;
+ using BucketMap = std::map<document::Bucket, std::vector<vespalib::string>>;
BucketMap perBucketMsgs;
- for (auto& msg : msgs) {
- vespalib::asciistream ss;
- ss << "<li><i>Node "
- << msg.nodeIdx << "</i>: "
- << "<b>"
- << framework::MilliSecTime(msg.timeStamp.count()).toString()
- << "</b> </li>\n";
-
- perBucketMsgs[msg.bucket].emplace_back(ss.str());
+ for (const auto& msg : msgs) {
+ perBucketMsgs[msg.bucket].emplace_back(msg.toHtml());
}
bool first = true;
@@ -223,23 +213,18 @@ PendingMessageTracker::getStatusPerNode(std::ostream& out) const
std::lock_guard<std::mutex> guard(_lock);
const MessagesByNodeAndBucket& msgs = boost::multi_index::get<1>(_messages);
int lastNode = -1;
- for (MessagesByNodeAndBucket::const_iterator iter =
- msgs.begin(); iter != msgs.end(); iter++) {
- if (iter->nodeIdx != lastNode) {
+ for (const auto & node : msgs) {
+ if (node.nodeIdx != lastNode) {
if (lastNode != -1) {
out << "</ul>\n";
}
- out << "<b>Node " << iter->nodeIdx
- << " (pending count: "
- << _nodeInfo.getPendingCount(iter->nodeIdx)
- << ")</b>\n<ul>\n";
- lastNode = iter->nodeIdx;
+ out << "<b>Node " << node.nodeIdx << " (pending count: "
+ << _nodeInfo.getPendingCount(node.nodeIdx) << ")</b>\n<ul>\n";
+ lastNode = node.nodeIdx;
}
- out << "<li><b>"
- << framework::MilliSecTime(iter->timeStamp.count()).toString()
- << "</b> </li>\n";
+ out << node.toHtml();
}
if (lastNode != -1) {
@@ -260,11 +245,6 @@ PendingMessageTracker::reportHtmlStatus(std::ostream& out, const framework::Http
}
void
-PendingMessageTracker::print(std::ostream& /*out*/,
- bool /*verbose*/,
- const std::string& /*indent*/) const
-{
-
-}
+PendingMessageTracker::print(std::ostream&, bool, const std::string&) const { }
}
diff --git a/storage/src/vespa/storage/distributor/pendingmessagetracker.h b/storage/src/vespa/storage/distributor/pendingmessagetracker.h
index c899fea6dbb..275eba7f20c 100644
--- a/storage/src/vespa/storage/distributor/pendingmessagetracker.h
+++ b/storage/src/vespa/storage/distributor/pendingmessagetracker.h
@@ -32,9 +32,7 @@ public:
public:
virtual ~Checker() {}
- virtual bool check(uint32_t messageType,
- uint16_t node,
- uint8_t priority) = 0;
+ virtual bool check(uint32_t messageType, uint16_t node, uint8_t priority) = 0;
};
/**
@@ -59,25 +57,20 @@ public:
* passing it to the given type checker.
* Breaks when the checker returns false.
*/
- void checkPendingMessages(uint16_t node,
- const document::Bucket &bucket,
- Checker& checker) const;
+ void checkPendingMessages(uint16_t node, const document::Bucket &bucket, Checker& checker) const;
/**
* Goes through each pending message (across all nodes) for the given bucket
* and invokes the given checker with the node, message type and priority.
* Breaks when the checker returns false.
*/
- void checkPendingMessages(const document::Bucket &bucket,
- Checker& checker) const;
+ void checkPendingMessages(const document::Bucket &bucket, Checker& checker) const;
/**
* Utility function for checking if there's a message of type
* messageType pending to bucket bid on the given node.
*/
- bool hasPendingMessage(uint16_t node,
- const document::Bucket &bucket,
- uint32_t messageType) const;
+ bool hasPendingMessage(uint16_t node, const document::Bucket &bucket, uint32_t messageType) const;
/**
* Returns a vector containing the number of pending messages to each storage node.
@@ -99,26 +92,20 @@ public:
private:
struct MessageEntry {
- TimePoint timeStamp;
- uint32_t msgType;
- uint32_t priority;
- uint64_t msgId;
+ TimePoint timeStamp;
+ uint32_t msgType;
+ uint32_t priority;
+ uint64_t msgId;
document::Bucket bucket;
- uint16_t nodeIdx;
-
- MessageEntry(TimePoint timeStamp,
- uint32_t msgType,
- uint32_t priority,
- uint64_t msgId,
- document::Bucket bucket,
- uint16_t nodeIdx);
- };
+ uint16_t nodeIdx;
- struct MessageIdKey
- : boost::multi_index::member<MessageEntry, uint64_t, &MessageEntry::msgId>
- {
+ MessageEntry(TimePoint timeStamp, uint32_t msgType, uint32_t priority,
+ uint64_t msgId, document::Bucket bucket, uint16_t nodeIdx);
+ vespalib::string toHtml() const;
};
+ struct MessageIdKey : boost::multi_index::member<MessageEntry, uint64_t, &MessageEntry::msgId> {};
+
/**
* Each entry has a separate composite keyed index on node+bucket id+type.
* This makes it efficient to find all messages for a node, for a bucket
@@ -127,12 +114,9 @@ private:
struct CompositeNodeBucketKey
: boost::multi_index::composite_key<
MessageEntry,
- boost::multi_index::member<MessageEntry, uint16_t,
- &MessageEntry::nodeIdx>,
- boost::multi_index::member<MessageEntry, document::Bucket,
- &MessageEntry::bucket>,
- boost::multi_index::member<MessageEntry, uint32_t,
- &MessageEntry::msgType>
+ boost::multi_index::member<MessageEntry, uint16_t, &MessageEntry::nodeIdx>,
+ boost::multi_index::member<MessageEntry, document::Bucket, &MessageEntry::bucket>,
+ boost::multi_index::member<MessageEntry, uint32_t, &MessageEntry::msgType>
>
{
};
@@ -140,12 +124,9 @@ private:
struct CompositeBucketMsgNodeKey
: boost::multi_index::composite_key<
MessageEntry,
- boost::multi_index::member<MessageEntry, document::Bucket,
- &MessageEntry::bucket>,
- boost::multi_index::member<MessageEntry, uint32_t,
- &MessageEntry::msgType>,
- boost::multi_index::member<MessageEntry, uint16_t,
- &MessageEntry::nodeIdx>
+ boost::multi_index::member<MessageEntry, document::Bucket, &MessageEntry::bucket>,
+ boost::multi_index::member<MessageEntry, uint32_t, &MessageEntry::msgType>,
+ boost::multi_index::member<MessageEntry, uint16_t, &MessageEntry::nodeIdx>
>
{
};
diff --git a/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp b/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp
index 5a8e822f30c..22195466dd2 100644
--- a/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp
+++ b/storageapi/src/vespa/storageapi/messageapi/storagemessage.cpp
@@ -42,142 +42,75 @@ StorageMessage::getPriorityString(Priority p) {
std::map<MessageType::Id, MessageType*> MessageType::_codes;
const MessageType MessageType::DOCBLOCK("DocBlock", DOCBLOCK_ID);
-const MessageType MessageType::DOCBLOCK_REPLY(
- "DocBlock Reply", DOCBLOCK_REPLY_ID, &MessageType::DOCBLOCK);
+const MessageType MessageType::DOCBLOCK_REPLY("DocBlock Reply", DOCBLOCK_REPLY_ID, &MessageType::DOCBLOCK);
const MessageType MessageType::GET("Get", GET_ID);
-const MessageType MessageType::GET_REPLY(
- "Get Reply", GET_REPLY_ID, &MessageType::GET);
+const MessageType MessageType::GET_REPLY("Get Reply", GET_REPLY_ID, &MessageType::GET);
const MessageType MessageType::INTERNAL("Internal", INTERNAL_ID);
-const MessageType MessageType::INTERNAL_REPLY(
- "Internal Reply", INTERNAL_REPLY_ID, &MessageType::INTERNAL);
+const MessageType MessageType::INTERNAL_REPLY("Internal Reply", INTERNAL_REPLY_ID, &MessageType::INTERNAL);
const MessageType MessageType::PUT("Put", PUT_ID);
-const MessageType MessageType::PUT_REPLY(
- "Put Reply", PUT_REPLY_ID, &MessageType::PUT);
+const MessageType MessageType::PUT_REPLY("Put Reply", PUT_REPLY_ID, &MessageType::PUT);
const MessageType MessageType::UPDATE("Update", UPDATE_ID);
-const MessageType MessageType::UPDATE_REPLY(
- "Update Reply", UPDATE_REPLY_ID, &MessageType::UPDATE);
+const MessageType MessageType::UPDATE_REPLY("Update Reply", UPDATE_REPLY_ID, &MessageType::UPDATE);
const MessageType MessageType::REMOVE("Remove", REMOVE_ID);
-const MessageType MessageType::REMOVE_REPLY(
- "Remove Reply", REMOVE_REPLY_ID, &MessageType::REMOVE);
+const MessageType MessageType::REMOVE_REPLY("Remove Reply", REMOVE_REPLY_ID, &MessageType::REMOVE);
const MessageType MessageType::REVERT("Revert", REVERT_ID);
-const MessageType MessageType::REVERT_REPLY(
- "Revert Reply", REVERT_REPLY_ID, &MessageType::REVERT);
-const MessageType MessageType::VISITOR_CREATE(
- "Visitor Create", VISITOR_CREATE_ID);
-const MessageType MessageType::VISITOR_CREATE_REPLY(
- "Visitor Create Reply", VISITOR_CREATE_REPLY_ID,
- &MessageType::VISITOR_CREATE);
-const MessageType MessageType::VISITOR_DESTROY(
- "Visitor Destroy", VISITOR_DESTROY_ID);
-const MessageType MessageType::VISITOR_DESTROY_REPLY(
- "Visitor Destroy Reply", VISITOR_DESTROY_REPLY_ID,
- &MessageType::VISITOR_DESTROY);
-const MessageType MessageType::REQUESTBUCKETINFO("Request bucket info",
- REQUESTBUCKETINFO_ID);
-const MessageType MessageType::REQUESTBUCKETINFO_REPLY(
- "Request bucket info reply", REQUESTBUCKETINFO_REPLY_ID,
- &MessageType::REQUESTBUCKETINFO);
-const MessageType MessageType::NOTIFYBUCKETCHANGE("Notify bucket change",
- NOTIFYBUCKETCHANGE_ID);
-const MessageType MessageType::NOTIFYBUCKETCHANGE_REPLY(
- "Notify bucket change reply", NOTIFYBUCKETCHANGE_REPLY_ID,
- &MessageType::NOTIFYBUCKETCHANGE);
+const MessageType MessageType::REVERT_REPLY("Revert Reply", REVERT_REPLY_ID, &MessageType::REVERT);
+const MessageType MessageType::VISITOR_CREATE("Visitor Create", VISITOR_CREATE_ID);
+const MessageType MessageType::VISITOR_CREATE_REPLY("Visitor Create Reply", VISITOR_CREATE_REPLY_ID, &MessageType::VISITOR_CREATE);
+const MessageType MessageType::VISITOR_DESTROY("Visitor Destroy", VISITOR_DESTROY_ID);
+const MessageType MessageType::VISITOR_DESTROY_REPLY("Visitor Destroy Reply", VISITOR_DESTROY_REPLY_ID, &MessageType::VISITOR_DESTROY);
+const MessageType MessageType::REQUESTBUCKETINFO("Request bucket info", REQUESTBUCKETINFO_ID);
+const MessageType MessageType::REQUESTBUCKETINFO_REPLY("Request bucket info reply", REQUESTBUCKETINFO_REPLY_ID, &MessageType::REQUESTBUCKETINFO);
+const MessageType MessageType::NOTIFYBUCKETCHANGE("Notify bucket change", NOTIFYBUCKETCHANGE_ID);
+const MessageType MessageType::NOTIFYBUCKETCHANGE_REPLY("Notify bucket change reply", NOTIFYBUCKETCHANGE_REPLY_ID, &MessageType::NOTIFYBUCKETCHANGE);
const MessageType MessageType::CREATEBUCKET("Create bucket", CREATEBUCKET_ID);
-const MessageType MessageType::CREATEBUCKET_REPLY(
- "Create bucket reply", CREATEBUCKET_REPLY_ID,
- &MessageType::CREATEBUCKET);
+const MessageType MessageType::CREATEBUCKET_REPLY("Create bucket reply", CREATEBUCKET_REPLY_ID, &MessageType::CREATEBUCKET);
const MessageType MessageType::MERGEBUCKET("Merge bucket", MERGEBUCKET_ID);
-const MessageType MessageType::MERGEBUCKET_REPLY(
- "Merge bucket reply", MERGEBUCKET_REPLY_ID,
- &MessageType::MERGEBUCKET);
+const MessageType MessageType::MERGEBUCKET_REPLY("Merge bucket reply", MERGEBUCKET_REPLY_ID, &MessageType::MERGEBUCKET);
const MessageType MessageType::DELETEBUCKET("Delete bucket", DELETEBUCKET_ID);
-const MessageType MessageType::DELETEBUCKET_REPLY(
- "Delete bucket reply", DELETEBUCKET_REPLY_ID,
- &MessageType::DELETEBUCKET);
+const MessageType MessageType::DELETEBUCKET_REPLY("Delete bucket reply", DELETEBUCKET_REPLY_ID, &MessageType::DELETEBUCKET);
const MessageType MessageType::SETNODESTATE("Set node state", SETNODESTATE_ID);
-const MessageType MessageType::SETNODESTATE_REPLY(
- "Set node state reply", SETNODESTATE_REPLY_ID,
- &MessageType::SETNODESTATE);
+const MessageType MessageType::SETNODESTATE_REPLY("Set node state reply", SETNODESTATE_REPLY_ID, &MessageType::SETNODESTATE);
const MessageType MessageType::GETNODESTATE("Get node state", GETNODESTATE_ID);
-const MessageType MessageType::GETNODESTATE_REPLY(
- "Get node state reply", GETNODESTATE_REPLY_ID,
- &MessageType::GETNODESTATE);
+const MessageType MessageType::GETNODESTATE_REPLY("Get node state reply", GETNODESTATE_REPLY_ID, &MessageType::GETNODESTATE);
const MessageType MessageType::SETSYSTEMSTATE("Set system state", SETSYSTEMSTATE_ID);
-const MessageType MessageType::SETSYSTEMSTATE_REPLY(
- "Set system state reply", SETSYSTEMSTATE_REPLY_ID,
- &MessageType::SETSYSTEMSTATE);
+const MessageType MessageType::SETSYSTEMSTATE_REPLY("Set system state reply", SETSYSTEMSTATE_REPLY_ID, &MessageType::SETSYSTEMSTATE);
const MessageType MessageType::GETSYSTEMSTATE("Get system state", GETSYSTEMSTATE_ID);
-const MessageType MessageType::GETSYSTEMSTATE_REPLY(
- "get system state reply", GETSYSTEMSTATE_REPLY_ID,
- &MessageType::GETSYSTEMSTATE);
+const MessageType MessageType::GETSYSTEMSTATE_REPLY("get system state reply", GETSYSTEMSTATE_REPLY_ID, &MessageType::GETSYSTEMSTATE);
const MessageType MessageType::GETBUCKETDIFF("GetBucketDiff", GETBUCKETDIFF_ID);
-const MessageType MessageType::GETBUCKETDIFF_REPLY(
- "GetBucketDiff reply", GETBUCKETDIFF_REPLY_ID,
- &MessageType::GETBUCKETDIFF);
-const MessageType MessageType::APPLYBUCKETDIFF("ApplyBucketDiff",
- APPLYBUCKETDIFF_ID);
-const MessageType MessageType::APPLYBUCKETDIFF_REPLY(
- "ApplyBucketDiff reply", APPLYBUCKETDIFF_REPLY_ID,
- &MessageType::APPLYBUCKETDIFF);
-const MessageType MessageType::VISITOR_INFO("VisitorInfo",
- VISITOR_INFO_ID);
-const MessageType MessageType::VISITOR_INFO_REPLY(
- "VisitorInfo reply", VISITOR_INFO_REPLY_ID,
- &MessageType::VISITOR_INFO);
+const MessageType MessageType::GETBUCKETDIFF_REPLY("GetBucketDiff reply", GETBUCKETDIFF_REPLY_ID, &MessageType::GETBUCKETDIFF);
+const MessageType MessageType::APPLYBUCKETDIFF("ApplyBucketDiff", APPLYBUCKETDIFF_ID);
+const MessageType MessageType::APPLYBUCKETDIFF_REPLY("ApplyBucketDiff reply", APPLYBUCKETDIFF_REPLY_ID, &MessageType::APPLYBUCKETDIFF);
+const MessageType MessageType::VISITOR_INFO("VisitorInfo", VISITOR_INFO_ID);
+const MessageType MessageType::VISITOR_INFO_REPLY("VisitorInfo reply", VISITOR_INFO_REPLY_ID, &MessageType::VISITOR_INFO);
const MessageType MessageType::SEARCHRESULT("SearchResult", SEARCHRESULT_ID);
-const MessageType MessageType::SEARCHRESULT_REPLY(
- "SearchResult reply", SEARCHRESULT_REPLY_ID,
- &MessageType::SEARCHRESULT);
+const MessageType MessageType::SEARCHRESULT_REPLY("SearchResult reply", SEARCHRESULT_REPLY_ID, &MessageType::SEARCHRESULT);
const MessageType MessageType::DOCUMENTSUMMARY("DocumentSummary", DOCUMENTSUMMARY_ID);
-const MessageType MessageType::DOCUMENTSUMMARY_REPLY(
- "DocumentSummary reply", DOCUMENTSUMMARY_REPLY_ID,
- &MessageType::DOCUMENTSUMMARY);
+const MessageType MessageType::DOCUMENTSUMMARY_REPLY("DocumentSummary reply", DOCUMENTSUMMARY_REPLY_ID, &MessageType::DOCUMENTSUMMARY);
const MessageType MessageType::MAPVISITOR("Mapvisitor", MAPVISITOR_ID);
-const MessageType MessageType::MAPVISITOR_REPLY(
- "Mapvisitor reply", MAPVISITOR_REPLY_ID,
- &MessageType::MAPVISITOR);
+const MessageType MessageType::MAPVISITOR_REPLY("Mapvisitor reply", MAPVISITOR_REPLY_ID, &MessageType::MAPVISITOR);
const MessageType MessageType::SPLITBUCKET("SplitBucket", SPLITBUCKET_ID);
-const MessageType MessageType::SPLITBUCKET_REPLY(
- "SplitBucket reply", SPLITBUCKET_REPLY_ID,
- &MessageType::SPLITBUCKET);
+const MessageType MessageType::SPLITBUCKET_REPLY("SplitBucket reply", SPLITBUCKET_REPLY_ID, &MessageType::SPLITBUCKET);
const MessageType MessageType::JOINBUCKETS("Joinbuckets", JOINBUCKETS_ID);
-const MessageType MessageType::JOINBUCKETS_REPLY(
- "Joinbuckets reply", JOINBUCKETS_REPLY_ID,
- &MessageType::JOINBUCKETS);
+const MessageType MessageType::JOINBUCKETS_REPLY("Joinbuckets reply", JOINBUCKETS_REPLY_ID, &MessageType::JOINBUCKETS);
const MessageType MessageType::STATBUCKET("Statbucket", STATBUCKET_ID);
-const MessageType MessageType::STATBUCKET_REPLY(
- "Statbucket Reply", STATBUCKET_REPLY_ID, &MessageType::STATBUCKET);
+const MessageType MessageType::STATBUCKET_REPLY("Statbucket Reply", STATBUCKET_REPLY_ID, &MessageType::STATBUCKET);
const MessageType MessageType::GETBUCKETLIST("Getbucketlist", GETBUCKETLIST_ID);
-const MessageType MessageType::GETBUCKETLIST_REPLY(
- "Getbucketlist Reply", GETBUCKETLIST_REPLY_ID, &MessageType::GETBUCKETLIST);
+const MessageType MessageType::GETBUCKETLIST_REPLY("Getbucketlist Reply", GETBUCKETLIST_REPLY_ID, &MessageType::GETBUCKETLIST);
const MessageType MessageType::DOCUMENTLIST("documentlist", DOCUMENTLIST_ID);
-const MessageType MessageType::DOCUMENTLIST_REPLY(
- "documentlist Reply", DOCUMENTLIST_REPLY_ID, &MessageType::DOCUMENTLIST);
+const MessageType MessageType::DOCUMENTLIST_REPLY("documentlist Reply", DOCUMENTLIST_REPLY_ID, &MessageType::DOCUMENTLIST);
const MessageType MessageType::EMPTYBUCKETS("Emptybuckets", EMPTYBUCKETS_ID);
-const MessageType MessageType::EMPTYBUCKETS_REPLY(
- "Emptybuckets Reply", EMPTYBUCKETS_REPLY_ID, &MessageType::EMPTYBUCKETS);
+const MessageType MessageType::EMPTYBUCKETS_REPLY("Emptybuckets Reply", EMPTYBUCKETS_REPLY_ID, &MessageType::EMPTYBUCKETS);
const MessageType MessageType::REMOVELOCATION("Removelocation", REMOVELOCATION_ID);
-const MessageType MessageType::REMOVELOCATION_REPLY(
- "Removelocation Reply", REMOVELOCATION_REPLY_ID, &MessageType::REMOVELOCATION);
+const MessageType MessageType::REMOVELOCATION_REPLY("Removelocation Reply", REMOVELOCATION_REPLY_ID, &MessageType::REMOVELOCATION);
const MessageType MessageType::QUERYRESULT("QueryResult", QUERYRESULT_ID);
-const MessageType MessageType::QUERYRESULT_REPLY(
- "QueryResult reply", QUERYRESULT_REPLY_ID,
- &MessageType::QUERYRESULT);
+const MessageType MessageType::QUERYRESULT_REPLY("QueryResult reply", QUERYRESULT_REPLY_ID, &MessageType::QUERYRESULT);
const MessageType MessageType::BATCHPUTREMOVE("BatchPutRemove", BATCHPUTREMOVE_ID);
-const MessageType MessageType::BATCHPUTREMOVE_REPLY(
- "BatchPutRemove reply", BATCHPUTREMOVE_REPLY_ID,
- &MessageType::BATCHPUTREMOVE);
+const MessageType MessageType::BATCHPUTREMOVE_REPLY("BatchPutRemove reply", BATCHPUTREMOVE_REPLY_ID, &MessageType::BATCHPUTREMOVE);
const MessageType MessageType::BATCHDOCUMENTUPDATE("BatchDocumentUpdate", BATCHDOCUMENTUPDATE_ID);
-const MessageType MessageType::BATCHDOCUMENTUPDATE_REPLY(
- "BatchDocumentUpdate reply", BATCHDOCUMENTUPDATE_REPLY_ID,
- &MessageType::BATCHDOCUMENTUPDATE);
-const MessageType MessageType::SETBUCKETSTATE(
- "SetBucketState",
- SETBUCKETSTATE_ID);
-const MessageType MessageType::SETBUCKETSTATE_REPLY(
- "SetBucketStateReply",
- SETBUCKETSTATE_REPLY_ID,
- &MessageType::SETBUCKETSTATE);
+const MessageType MessageType::BATCHDOCUMENTUPDATE_REPLY("BatchDocumentUpdate reply", BATCHDOCUMENTUPDATE_REPLY_ID, &MessageType::BATCHDOCUMENTUPDATE);
+const MessageType MessageType::SETBUCKETSTATE("SetBucketState", SETBUCKETSTATE_ID);
+const MessageType MessageType::SETBUCKETSTATE_REPLY("SetBucketStateReply", SETBUCKETSTATE_REPLY_ID, &MessageType::SETBUCKETSTATE);
const MessageType&
MessageType::MessageType::get(Id id)
@@ -257,9 +190,7 @@ uint16_t
StorageMessageAddress::getIndex() const
{
if (_type == 0) {
- throw vespalib::IllegalStateException(
- "Cannot retrieve node index out of external address",
- VESPA_STRLOC);
+ throw vespalib::IllegalStateException("Cannot retrieve node index out of external address", VESPA_STRLOC);
}
return _index;
}
@@ -268,9 +199,7 @@ const lib::NodeType&
StorageMessageAddress::getNodeType() const
{
if (_type == 0) {
- throw vespalib::IllegalStateException(
- "Cannot retrieve node type out of external address",
- VESPA_STRLOC);
+ throw vespalib::IllegalStateException("Cannot retrieve node type out of external address", VESPA_STRLOC);
}
return *_type;
}
@@ -279,9 +208,7 @@ const vespalib::string&
StorageMessageAddress::getCluster() const
{
if (_type == 0) {
- throw vespalib::IllegalStateException(
- "Cannot retrieve cluster out of external address",
- VESPA_STRLOC);
+ throw vespalib::IllegalStateException("Cannot retrieve cluster out of external address", VESPA_STRLOC);
}
return _cluster;
}
@@ -359,7 +286,7 @@ StorageMessage::StorageMessage(const StorageMessage& other, Id id)
{
}
-StorageMessage::~StorageMessage() { }
+StorageMessage::~StorageMessage() = default;
void StorageMessage::setNewMsgId()
{