summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-08-09 20:26:24 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-08-09 20:26:24 +0000
commit8e9c8cea1f11ef7f07ef4a084b170f180b662e2d (patch)
tree9cd51c875afba6e6025679654584d65ddc9c3ea5
parente8c966890fbc22d6ce5556b0ba708bf0dec4c739 (diff)
Use faster and lighter hash_map for message tracking in distributor.
-rw-r--r--storage/src/vespa/storage/distributor/messagetracker.cpp10
-rw-r--r--storage/src/vespa/storage/distributor/messagetracker.h9
2 files changed, 10 insertions, 9 deletions
diff --git a/storage/src/vespa/storage/distributor/messagetracker.cpp b/storage/src/vespa/storage/distributor/messagetracker.cpp
index 8830e5ecabc..a9c1a56212c 100644
--- a/storage/src/vespa/storage/distributor/messagetracker.cpp
+++ b/storage/src/vespa/storage/distributor/messagetracker.cpp
@@ -3,6 +3,7 @@
#include "messagetracker.h"
#include <vespa/storageapi/messageapi/bucketcommand.h>
#include <vespa/storageapi/messageapi/bucketreply.h>
+#include <vespa/vespalib/stllike/hash_map.hpp>
#include <cinttypes>
#include <vespa/log/log.h>
@@ -19,10 +20,11 @@ MessageTracker::~MessageTracker() = default;
void
MessageTracker::flushQueue(MessageSender& sender)
{
- for (uint32_t i = 0; i < _commandQueue.size(); i++) {
- _commandQueue[i]._msg->setAddress(api::StorageMessageAddress::create(_cluster_ctx.cluster_name_ptr(), lib::NodeType::STORAGE, _commandQueue[i]._target));
- _sentMessages[_commandQueue[i]._msg->getMsgId()] = _commandQueue[i]._target;
- sender.sendCommand(_commandQueue[i]._msg);
+ _sentMessages.resize(_commandQueue.size());
+ for (const auto & toSend : _commandQueue) {
+ toSend._msg->setAddress(api::StorageMessageAddress::create(_cluster_ctx.cluster_name_ptr(), lib::NodeType::STORAGE, toSend._target));
+ _sentMessages[toSend._msg->getMsgId()] = toSend._target;
+ sender.sendCommand(toSend._msg);
}
_commandQueue.clear();
diff --git a/storage/src/vespa/storage/distributor/messagetracker.h b/storage/src/vespa/storage/distributor/messagetracker.h
index 73e2461eb7a..07afc37ffa2 100644
--- a/storage/src/vespa/storage/distributor/messagetracker.h
+++ b/storage/src/vespa/storage/distributor/messagetracker.h
@@ -4,8 +4,7 @@
#include <vespa/storage/common/cluster_context.h>
#include <vespa/storage/common/messagesender.h>
#include <vespa/vespalib/stllike/string.h>
-#include <vector>
-#include <map>
+#include <vespa/vespalib/stllike/hash_map.h>
namespace storage::api {
class BucketCommand;
@@ -49,10 +48,10 @@ public:
bool finished();
protected:
- std::vector<ToSend> _commandQueue;
+ std::vector<ToSend> _commandQueue;
// Keeps track of which node a message was sent to.
- std::map<uint64_t, uint16_t> _sentMessages;
- const ClusterContext& _cluster_ctx;
+ vespalib::hash_map<uint64_t, uint16_t> _sentMessages;
+ const ClusterContext& _cluster_ctx;
};
}