diff options
author | Henning Baldersheim <balder@oath.com> | 2018-06-14 13:25:17 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-06-15 13:53:09 +0200 |
commit | f94ea4ac173c3477bb3c1069df97b666c36065db (patch) | |
tree | 29d0c3ade7080900145939132d2ef778ff9d0092 | |
parent | 712c85caee3720d81e095528a2ba86355b9589b2 (diff) |
Use multiple threads for handling requests, if allowed.
-rw-r--r-- | messagebus/src/vespa/messagebus/network/rpcsend.cpp | 22 | ||||
-rw-r--r-- | messagebus/src/vespa/messagebus/network/rpcsend.h | 2 |
2 files changed, 16 insertions, 8 deletions
diff --git a/messagebus/src/vespa/messagebus/network/rpcsend.cpp b/messagebus/src/vespa/messagebus/network/rpcsend.cpp index e23f4dc29d9..ba6523da340 100644 --- a/messagebus/src/vespa/messagebus/network/rpcsend.cpp +++ b/messagebus/src/vespa/messagebus/network/rpcsend.cpp @@ -61,7 +61,7 @@ RPCSend::RPCSend() : _serverIdent("server") { } -RPCSend::~RPCSend() {} +RPCSend::~RPCSend() = default; void RPCSend::attach(RPCNetwork &net) @@ -256,12 +256,6 @@ void RPCSend::invoke(FRT_RPCRequest *req) { req->Detach(); - doRequest(req); -} - -void -RPCSend::doRequest(FRT_RPCRequest *req) -{ FRT_Values &args = *req->GetParams(); std::unique_ptr<Params> params = toParams(args); @@ -272,6 +266,20 @@ RPCSend::doRequest(FRT_RPCRequest *req) make_string("Protocol '%s' is not known by %s.", params->getProtocol().c_str(), _serverIdent.c_str()))); return; } + if (protocol->requireSequencing()) { + doRequest(req, protocol, std::move(params)); + } else { + auto rejected = _net->getExecutor().execute(makeLambdaTask([this, req, protocol, params = std::move(params)]() mutable { + doRequest(req, protocol, std::move(params)); + })); + assert (!rejected); + } +} + +void +RPCSend::doRequest(FRT_RPCRequest *req, const IProtocol * protocol, std::unique_ptr<Params> params) +{ + Routable::UP routable = protocol->decode(params->getVersion(), params->getPayload()); req->DiscardBlobs(); if ( ! routable ) { diff --git a/messagebus/src/vespa/messagebus/network/rpcsend.h b/messagebus/src/vespa/messagebus/network/rpcsend.h index 11a042b91c0..cfc1d72418a 100644 --- a/messagebus/src/vespa/messagebus/network/rpcsend.h +++ b/messagebus/src/vespa/messagebus/network/rpcsend.h @@ -83,7 +83,7 @@ public: void invoke(FRT_RPCRequest *req); private: - void doRequest(FRT_RPCRequest *req); + void doRequest(FRT_RPCRequest *req, const IProtocol * protocol, std::unique_ptr<Params> params); void doRequestDone(FRT_RPCRequest *req); void doHandleReply(const IProtocol * protocol, std::unique_ptr<Reply> reply); void attach(RPCNetwork &net) final override; |