summaryrefslogtreecommitdiff
path: root/src/mongo/s/async_requests_sender.cpp
diff options
context:
space:
mode:
authorEsha Maharishi <esha.maharishi@mongodb.com>2017-03-02 14:19:29 -0500
committerEsha Maharishi <esha.maharishi@mongodb.com>2017-03-06 11:14:56 -0500
commita88165fb9f7e038b8ba0a30408a47d312a8cfb43 (patch)
tree414dc299c4ac368ba911c18767bcf12dfa226567 /src/mongo/s/async_requests_sender.cpp
parent5a3082bc52cdcf8769021aa9256daabd43162a53 (diff)
downloadmongo-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.cpp20
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)) {}