summaryrefslogtreecommitdiff
path: root/src/mongo/s/write_ops/batch_write_op.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-06-07 13:56:30 +0300
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-07-06 18:05:57 -0400
commite09a21c0d849878792e647d2326d6fde865ac458 (patch)
treeb3cd6c002db115e73fa8151609467a4ec7ce3d0d /src/mongo/s/write_ops/batch_write_op.cpp
parent1447d3db59804752e6c2882a6a8a4a14d7ae71ad (diff)
downloadmongo-e09a21c0d849878792e647d2326d6fde865ac458.tar.gz
SERVER-28752 Use IDL for write commands parsing
Diffstat (limited to 'src/mongo/s/write_ops/batch_write_op.cpp')
-rw-r--r--src/mongo/s/write_ops/batch_write_op.cpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/mongo/s/write_ops/batch_write_op.cpp b/src/mongo/s/write_ops/batch_write_op.cpp
index 440f4a4b40b..cece9d771d6 100644
--- a/src/mongo/s/write_ops/batch_write_op.cpp
+++ b/src/mongo/s/write_ops/batch_write_op.cpp
@@ -213,8 +213,8 @@ void trackErrors(const ShardEndpoint& endpoint,
} // namespace
-BatchWriteOp::BatchWriteOp(const BatchedCommandRequest& clientRequest)
- : _clientRequest(clientRequest) {
+BatchWriteOp::BatchWriteOp(OperationContext* opCtx, const BatchedCommandRequest& clientRequest)
+ : _opCtx(opCtx), _clientRequest(clientRequest) {
_writeOps.reserve(_clientRequest.sizeWriteOps());
for (size_t i = 0; i < _clientRequest.sizeWriteOps(); ++i) {
@@ -227,8 +227,7 @@ BatchWriteOp::~BatchWriteOp() {
invariant(_targeted.empty());
}
-Status BatchWriteOp::targetBatch(OperationContext* opCtx,
- const NSTargeter& targeter,
+Status BatchWriteOp::targetBatch(const NSTargeter& targeter,
bool recordTargetErrors,
std::map<ShardId, TargetedWriteBatch*>* targetedBatches) {
//
@@ -288,7 +287,7 @@ Status BatchWriteOp::targetBatch(OperationContext* opCtx,
OwnedPointerVector<TargetedWrite> writesOwned;
vector<TargetedWrite*>& writes = writesOwned.mutableVector();
- Status targetStatus = writeOp.targetWrites(opCtx, targeter, &writes);
+ Status targetStatus = writeOp.targetWrites(_opCtx, targeter, &writes);
if (!targetStatus.isOK()) {
WriteErrorDetail targetError;
@@ -406,7 +405,7 @@ void BatchWriteOp::buildBatchRequest(const TargetedWriteBatch& targetedBatch,
request->setShouldBypassValidation(_clientRequest.shouldBypassValidation());
const auto batchType = _clientRequest.getBatchType();
- const auto batchTxnNum = _clientRequest.getTxnNum();
+ const auto batchTxnNum = _opCtx->getTxnNumber();
boost::optional<std::vector<int32_t>> stmtIdsForOp;
if (batchTxnNum) {
@@ -437,7 +436,8 @@ void BatchWriteOp::buildBatchRequest(const TargetedWriteBatch& targetedBatch,
}
if (stmtIdsForOp) {
- stmtIdsForOp->push_back(_clientRequest.getStmtIdForWriteAt(writeOpRef.first));
+ stmtIdsForOp->push_back(write_ops::getStmtIdForWriteAt(
+ _clientRequest.getWriteCommandBase(), writeOpRef.first));
}
// TODO: We can add logic here to allow aborting individual ops
@@ -457,14 +457,10 @@ void BatchWriteOp::buildBatchRequest(const TargetedWriteBatch& targetedBatch,
}
}
- if (!request->isOrderedSet()) {
- request->setOrdered(_clientRequest.getOrdered());
- }
-
+ request->setOrdered(_clientRequest.getOrdered());
request->setShardVersion(targetedBatch.getEndpoint().shardVersion);
if (batchTxnNum) {
- request->setTxnNum(batchTxnNum);
request->setStmtIds(std::move(stmtIdsForOp));
}
}