diff options
author | Henning Baldersheim <balder@oath.com> | 2018-01-30 22:25:32 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-01-30 22:25:32 +0100 |
commit | 3f165b09c9672b520bf49f4d3d98715644d92a97 (patch) | |
tree | 45586ee184770216b1d5786a2dcf826df6fdda13 /storage | |
parent | 7923c31a91388782f6f6b169358a6cecdf63d2fc (diff) |
Move the shared_ptr into the Q and if necessary take the copy cost outside of the lock.
Diffstat (limited to 'storage')
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)); } } |