summaryrefslogtreecommitdiff
path: root/src/mongo/s/query/async_results_merger.cpp
diff options
context:
space:
mode:
authorJack Mulrow <jack.mulrow@mongodb.com>2018-03-20 14:00:27 -0400
committerJack Mulrow <jack.mulrow@mongodb.com>2018-04-23 14:20:43 -0400
commit8941fac630e0ac31649a1e32b0ea54c3930bdfec (patch)
treedb0a5f7fe34198d7b3974263e4a47f29a626b749 /src/mongo/s/query/async_results_merger.cpp
parentfc8096229e6ba7745431f77ec985eb65ee0541af (diff)
downloadmongo-8941fac630e0ac31649a1e32b0ea54c3930bdfec.tar.gz
SERVER-33991 Pass txnNumber in getMore requests through mongos
Diffstat (limited to 'src/mongo/s/query/async_results_merger.cpp')
-rw-r--r--src/mongo/s/query/async_results_merger.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/mongo/s/query/async_results_merger.cpp b/src/mongo/s/query/async_results_merger.cpp
index 45403399e8c..3e41a36c089 100644
--- a/src/mongo/s/query/async_results_merger.cpp
+++ b/src/mongo/s/query/async_results_merger.cpp
@@ -94,6 +94,10 @@ AsyncResultsMerger::AsyncResultsMerger(OperationContext* opCtx,
_mergeQueue(MergingComparator(_remotes,
_params.getSort() ? *_params.getSort() : BSONObj(),
_params.getCompareWholeSortKey())) {
+ if (params.getTxnNumber()) {
+ invariant(params.getSessionId());
+ }
+
size_t remoteIndex = 0;
for (const auto& remote : _params.getRemotes()) {
_remotes.emplace_back(remote.getHostAndPort(),
@@ -352,6 +356,20 @@ Status AsyncResultsMerger::_askForNextBatch(WithLock, size_t remoteIndex) {
boost::none)
.toBSON();
+ if (_params.getSessionId()) {
+ BSONObjBuilder newCmdBob(std::move(cmdObj));
+
+ BSONObjBuilder lsidBob(newCmdBob.subobjStart(OperationSessionInfo::kSessionIdFieldName));
+ _params.getSessionId()->serialize(&lsidBob);
+ lsidBob.doneFast();
+
+ if (_params.getTxnNumber()) {
+ newCmdBob.append(OperationSessionInfo::kTxnNumberFieldName, *_params.getTxnNumber());
+ }
+
+ cmdObj = newCmdBob.obj();
+ }
+
executor::RemoteCommandRequest request(
remote.getTargetHost(), _params.getNss().db().toString(), cmdObj, _opCtx);