diff options
author | Esha Maharishi <esha.maharishi@mongodb.com> | 2017-03-02 14:19:29 -0500 |
---|---|---|
committer | Esha Maharishi <esha.maharishi@mongodb.com> | 2017-03-06 11:14:56 -0500 |
commit | a88165fb9f7e038b8ba0a30408a47d312a8cfb43 (patch) | |
tree | 414dc299c4ac368ba911c18767bcf12dfa226567 /src/mongo/s/async_requests_sender.cpp | |
parent | 5a3082bc52cdcf8769021aa9256daabd43162a53 (diff) | |
download | mongo-a88165fb9f7e038b8ba0a30408a47d312a8cfb43.tar.gz |
SERVER-28163 make cluster_get_last_error_cmd.cpp use ARS instead of DBClientMultiCommand
Diffstat (limited to 'src/mongo/s/async_requests_sender.cpp')
-rw-r--r-- | src/mongo/s/async_requests_sender.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/mongo/s/async_requests_sender.cpp b/src/mongo/s/async_requests_sender.cpp index a3163050208..3c3cd194f78 100644 --- a/src/mongo/s/async_requests_sender.cpp +++ b/src/mongo/s/async_requests_sender.cpp @@ -53,7 +53,7 @@ const int kMaxNumFailedHostRetryAttempts = 3; AsyncRequestsSender::AsyncRequestsSender(OperationContext* txn, executor::TaskExecutor* executor, - std::string db, + StringData db, const std::vector<AsyncRequestsSender::Request>& requests, const ReadPreferenceSetting& readPreference, bool allowPartialResults) @@ -82,6 +82,8 @@ AsyncRequestsSender::~AsyncRequestsSender() { std::vector<AsyncRequestsSender::Response> AsyncRequestsSender::waitForResponses( OperationContext* txn) { + invariant(!_remotes.empty()); + // Until all remotes have received a response or error, keep scheduling retries and waiting on // outstanding requests. while (!_done()) { @@ -98,11 +100,16 @@ std::vector<AsyncRequestsSender::Response> AsyncRequestsSender::waitForResponses invariant(remote.swResponse); if (remote.swResponse->isOK()) { invariant(remote.shardHostAndPort); - responses.emplace_back(remote.swResponse->getValue(), *remote.shardHostAndPort); + responses.emplace_back(std::move(remote.swResponse->getValue()), + std::move(*remote.shardHostAndPort)); } else { - responses.emplace_back(remote.swResponse->getStatus()); + responses.emplace_back(std::move(remote.swResponse->getStatus()), + std::move(remote.shardHostAndPort)); } } + + _remotes.clear(); + return responses; } @@ -196,7 +203,7 @@ Status AsyncRequestsSender::_scheduleRequest_inlock(OperationContext* txn, size_ } executor::RemoteCommandRequest request( - remote.getTargetHost(), _db, remote.cmdObj, _metadataObj, txn); + remote.getTargetHost(), _db.toString(), remote.cmdObj, _metadataObj, txn); auto callbackStatus = _executor->scheduleRemoteCommand( request, @@ -298,9 +305,10 @@ AsyncRequestsSender::Request::Request(ShardId shardId, BSONObj cmdObj) : shardId(shardId), cmdObj(cmdObj) {} AsyncRequestsSender::Response::Response(executor::RemoteCommandResponse response, HostAndPort hp) - : swResponse(response), shardHostAndPort(hp) {} + : swResponse(std::move(response)), shardHostAndPort(std::move(hp)) {} -AsyncRequestsSender::Response::Response(Status status) : swResponse(status) {} +AsyncRequestsSender::Response::Response(Status status, boost::optional<HostAndPort> hp) + : swResponse(std::move(status)), shardHostAndPort(std::move(hp)) {} AsyncRequestsSender::RemoteData::RemoteData(ShardId shardId, BSONObj cmdObj) : shardId(std::move(shardId)), cmdObj(std::move(cmdObj)) {} |