summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-01-30 22:25:32 +0100
committerHenning Baldersheim <balder@oath.com>2018-01-30 22:25:32 +0100
commit3f165b09c9672b520bf49f4d3d98715644d92a97 (patch)
tree45586ee184770216b1d5786a2dcf826df6fdda13 /storage
parent7923c31a91388782f6f6b169358a6cecdf63d2fc (diff)
Move the shared_ptr into the Q and if necessary take the copy cost outside of the lock.
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/storageserver/communicationmanager.cpp19
-rw-r--r--storage/src/vespa/storage/storageserver/communicationmanager.h6
-rw-r--r--storage/src/vespa/storage/storageserver/fnetlistener.cpp9
3 files changed, 17 insertions, 17 deletions
diff --git a/storage/src/vespa/storage/storageserver/communicationmanager.cpp b/storage/src/vespa/storage/storageserver/communicationmanager.cpp
index b61717e5b67..c2bdd6e6843 100644
--- a/storage/src/vespa/storage/storageserver/communicationmanager.cpp
+++ b/storage/src/vespa/storage/storageserver/communicationmanager.cpp
@@ -35,7 +35,7 @@ bool Queue::getNext(std::shared_ptr<api::StorageMessage>& msg, int timeout) {
while (true) { // Max twice
if (!_queue.empty()) {
LOG(spam, "Picking message from queue");
- msg = _queue.front();
+ msg = std::move(_queue.front());
_queue.pop();
return true;
}
@@ -49,9 +49,9 @@ bool Queue::getNext(std::shared_ptr<api::StorageMessage>& msg, int timeout) {
return false;
}
-void Queue::enqueue(const std::shared_ptr<api::StorageMessage>& msg) {
+void Queue::enqueue(std::shared_ptr<api::StorageMessage> msg) {
vespalib::MonitorGuard sync(_queueMonitor);
- _queue.emplace(msg);
+ _queue.emplace(std::move(msg));
sync.unsafeSignalUnlock();
}
@@ -138,18 +138,19 @@ CommunicationManager::handleMessage(std::unique_ptr<mbus::Message> msg)
cmd->setTrace(docMsgPtr->getTrace());
cmd->setTransportContext(std::unique_ptr<api::TransportContext>(new StorageTransportContext(std::move(docMsgPtr))));
- enqueue(std::shared_ptr<api::StorageCommand>(std::move(cmd)));
+ enqueue(std::move(cmd));
} else if (protocolName == mbusprot::StorageProtocol::NAME) {
std::unique_ptr<mbusprot::StorageCommand> storMsgPtr(static_cast<mbusprot::StorageCommand*>(msg.release()));
assert(storMsgPtr.get());
- const std::shared_ptr<api::StorageCommand> & cmd = storMsgPtr->getCommand();
+ //TODO: Can it be moved ?
+ std::shared_ptr<api::StorageCommand> cmd = storMsgPtr->getCommand();
cmd->setTimeout(storMsgPtr->getTimeRemaining());
cmd->setTrace(storMsgPtr->getTrace());
cmd->setTransportContext(std::unique_ptr<api::TransportContext>(new StorageTransportContext(std::move(storMsgPtr))));
- enqueue(cmd);
+ enqueue(std::move(cmd));
} else {
LOGBM(warning, "Received unsupported message type %d for protocol '%s'",
msg->getType(), msg->getProtocol().c_str());
@@ -473,11 +474,11 @@ CommunicationManager::process(const std::shared_ptr<api::StorageMessage>& msg)
}
void
-CommunicationManager::enqueue(const std::shared_ptr<api::StorageMessage> & msg)
+CommunicationManager::enqueue(std::shared_ptr<api::StorageMessage> msg)
{
- assert(msg.get());
+ assert(msg);
LOG(spam, "Enq storage message %s, priority %d", msg->toString().c_str(), msg->getPriority());
- _eventQueue.enqueue(msg);
+ _eventQueue.enqueue(std::move(msg));
}
bool
diff --git a/storage/src/vespa/storage/storageserver/communicationmanager.h b/storage/src/vespa/storage/storageserver/communicationmanager.h
index ff41e59846a..a29f3c8c3e3 100644
--- a/storage/src/vespa/storage/storageserver/communicationmanager.h
+++ b/storage/src/vespa/storage/storageserver/communicationmanager.h
@@ -45,7 +45,7 @@ class RPCRequestWrapper;
class Queue {
private:
- using QueueType = std::queue<api::StorageMessage::SP>;
+ using QueueType = std::queue<std::shared_ptr<api::StorageMessage>>;
QueueType _queue;
vespalib::Monitor _queueMonitor;
@@ -65,7 +65,7 @@ public:
/**
* Enqueue msg in FIFO order.
*/
- void enqueue(const std::shared_ptr<api::StorageMessage>& msg);
+ void enqueue(std::shared_ptr<api::StorageMessage> msg);
/** Signal queue monitor. */
void signal();
@@ -150,7 +150,7 @@ public:
const config::ConfigUri & configUri);
~CommunicationManager();
- void enqueue(const std::shared_ptr<api::StorageMessage> & msg);
+ void enqueue(std::shared_ptr<api::StorageMessage> msg);
mbus::RPCMessageBus& getMessageBus() { assert(_mbus.get()); return *_mbus; }
const PriorityConverter& getPriorityConverter() const { return _docApiConverter.getPriorityConverter(); }
diff --git a/storage/src/vespa/storage/storageserver/fnetlistener.cpp b/storage/src/vespa/storage/storageserver/fnetlistener.cpp
index a4ad8d68b2e..f53af6dc225 100644
--- a/storage/src/vespa/storage/storageserver/fnetlistener.cpp
+++ b/storage/src/vespa/storage/storageserver/fnetlistener.cpp
@@ -125,8 +125,7 @@ FNetListener::RPC_getNodeState2(FRT_RPCRequest *req)
vespalib::string expected(req->GetParams()->GetValue(0)._string._str,
req->GetParams()->GetValue(0)._string._len);
- std::shared_ptr<api::GetNodeStateCommand> cmd(
- new api::GetNodeStateCommand(expected != "unknown"
+ auto cmd(std::make_shared<api::GetNodeStateCommand>(expected != "unknown"
? std::make_unique<lib::NodeState>(expected)
: std::unique_ptr<lib::NodeState>()));
@@ -138,7 +137,7 @@ FNetListener::RPC_getNodeState2(FRT_RPCRequest *req)
// Create a request object to avoid needing a separate transport type
cmd->setTransportContext(std::make_unique<StorageTransportContext>(std::make_unique<RPCRequestWrapper>(req)));
req->Detach();
- _comManager.enqueue(cmd);
+ _comManager.enqueue(std::move(cmd));
}
void
@@ -153,13 +152,13 @@ FNetListener::RPC_setSystemState2(FRT_RPCRequest *req)
req->GetParams()->GetValue(0)._string._len);
lib::ClusterState systemState(systemStateStr);
- std::shared_ptr<api::SetSystemStateCommand> cmd(std::make_shared<api::SetSystemStateCommand>(systemState));
+ auto cmd(std::make_shared<api::SetSystemStateCommand>(systemState));
cmd->setPriority(api::StorageMessage::VERYHIGH);
// Create a request object to avoid needing a separate transport type
cmd->setTransportContext(std::make_unique<StorageTransportContext>(std::make_unique<RPCRequestWrapper>(req)));
req->Detach();
- _comManager.enqueue(cmd);
+ _comManager.enqueue(std::move(cmd));
}
}