summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/write_commands/write_commands.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/commands/write_commands/write_commands.cpp')
-rw-r--r--src/mongo/db/commands/write_commands/write_commands.cpp64
1 files changed, 34 insertions, 30 deletions
diff --git a/src/mongo/db/commands/write_commands/write_commands.cpp b/src/mongo/db/commands/write_commands/write_commands.cpp
index 506709096b8..4093bcf083e 100644
--- a/src/mongo/db/commands/write_commands/write_commands.cpp
+++ b/src/mongo/db/commands/write_commands/write_commands.cpp
@@ -87,21 +87,21 @@ Status checkAuthForWriteCommand(Client* client,
return status;
}
-bool shouldSkipOutput(OperationContext* txn) {
- const WriteConcernOptions& writeConcern = txn->getWriteConcern();
+bool shouldSkipOutput(OperationContext* opCtx) {
+ const WriteConcernOptions& writeConcern = opCtx->getWriteConcern();
return writeConcern.wMode.empty() && writeConcern.wNumNodes == 0 &&
(writeConcern.syncMode == WriteConcernOptions::SyncMode::NONE ||
writeConcern.syncMode == WriteConcernOptions::SyncMode::UNSET);
}
enum class ReplyStyle { kUpdate, kNotUpdate }; // update has extra fields.
-void serializeReply(OperationContext* txn,
+void serializeReply(OperationContext* opCtx,
ReplyStyle replyStyle,
bool continueOnError,
size_t opsInBatch,
const WriteResult& result,
BSONObjBuilder* out) {
- if (shouldSkipOutput(txn))
+ if (shouldSkipOutput(opCtx))
return;
long long n = 0;
@@ -170,10 +170,10 @@ void serializeReply(OperationContext* txn,
{
// Undocumented repl fields that mongos depends on.
- auto* replCoord = repl::ReplicationCoordinator::get(txn->getServiceContext());
+ auto* replCoord = repl::ReplicationCoordinator::get(opCtx->getServiceContext());
const auto replMode = replCoord->getReplicationMode();
if (replMode != repl::ReplicationCoordinator::modeNone) {
- const auto lastOp = repl::ReplClientInfo::forClient(txn->getClient()).getLastOp();
+ const auto lastOp = repl::ReplClientInfo::forClient(opCtx->getClient()).getLastOp();
if (lastOp.getTerm() == repl::OpTime::kUninitializedTerm) {
out->append("opTime", lastOp.getTimestamp());
} else {
@@ -207,22 +207,22 @@ public:
return ReadWriteType::kWrite;
}
- bool run(OperationContext* txn,
+ bool run(OperationContext* opCtx,
const std::string& dbname,
BSONObj& cmdObj,
int options,
std::string& errmsg,
BSONObjBuilder& result) final {
try {
- runImpl(txn, dbname, cmdObj, result);
+ runImpl(opCtx, dbname, cmdObj, result);
return true;
} catch (const DBException& ex) {
- LastError::get(txn->getClient()).setLastError(ex.getCode(), ex.getInfo().msg);
+ LastError::get(opCtx->getClient()).setLastError(ex.getCode(), ex.getInfo().msg);
throw;
}
}
- virtual void runImpl(OperationContext* txn,
+ virtual void runImpl(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj,
BSONObjBuilder& result) = 0;
@@ -251,13 +251,13 @@ public:
cmdObj);
}
- void runImpl(OperationContext* txn,
+ void runImpl(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj,
BSONObjBuilder& result) final {
const auto batch = parseInsertCommand(dbname, cmdObj);
- const auto reply = performInserts(txn, batch);
- serializeReply(txn,
+ const auto reply = performInserts(opCtx, batch);
+ serializeReply(opCtx,
ReplyStyle::kNotUpdate,
batch.continueOnError,
batch.documents.size(),
@@ -287,17 +287,21 @@ public:
cmdObj);
}
- void runImpl(OperationContext* txn,
+ void runImpl(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj,
BSONObjBuilder& result) final {
const auto batch = parseUpdateCommand(dbname, cmdObj);
- const auto reply = performUpdates(txn, batch);
- serializeReply(
- txn, ReplyStyle::kUpdate, batch.continueOnError, batch.updates.size(), reply, &result);
+ const auto reply = performUpdates(opCtx, batch);
+ serializeReply(opCtx,
+ ReplyStyle::kUpdate,
+ batch.continueOnError,
+ batch.updates.size(),
+ reply,
+ &result);
}
- Status explain(OperationContext* txn,
+ Status explain(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj,
ExplainCommon::Verbosity verbosity,
@@ -319,16 +323,16 @@ public:
updateRequest.setYieldPolicy(PlanExecutor::YIELD_AUTO);
updateRequest.setExplain();
- ParsedUpdate parsedUpdate(txn, &updateRequest);
+ ParsedUpdate parsedUpdate(opCtx, &updateRequest);
uassertStatusOK(parsedUpdate.parseRequest());
// Explains of write commands are read-only, but we take write locks so that timing
// info is more accurate.
- ScopedTransaction scopedXact(txn, MODE_IX);
- AutoGetCollection collection(txn, batch.ns, MODE_IX);
+ ScopedTransaction scopedXact(opCtx, MODE_IX);
+ AutoGetCollection collection(opCtx, batch.ns, MODE_IX);
auto exec = uassertStatusOK(getExecutorUpdate(
- txn, &CurOp::get(txn)->debug(), collection.getCollection(), &parsedUpdate));
+ opCtx, &CurOp::get(opCtx)->debug(), collection.getCollection(), &parsedUpdate));
Explain::explainStages(exec.get(), collection.getCollection(), verbosity, out);
return Status::OK();
}
@@ -355,13 +359,13 @@ public:
cmdObj);
}
- void runImpl(OperationContext* txn,
+ void runImpl(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj,
BSONObjBuilder& result) final {
const auto batch = parseDeleteCommand(dbname, cmdObj);
- const auto reply = performDeletes(txn, batch);
- serializeReply(txn,
+ const auto reply = performDeletes(opCtx, batch);
+ serializeReply(opCtx,
ReplyStyle::kNotUpdate,
batch.continueOnError,
batch.deletes.size(),
@@ -369,7 +373,7 @@ public:
&result);
}
- Status explain(OperationContext* txn,
+ Status explain(OperationContext* opCtx,
const std::string& dbname,
const BSONObj& cmdObj,
ExplainCommon::Verbosity verbosity,
@@ -387,17 +391,17 @@ public:
deleteRequest.setYieldPolicy(PlanExecutor::YIELD_AUTO);
deleteRequest.setExplain();
- ParsedDelete parsedDelete(txn, &deleteRequest);
+ ParsedDelete parsedDelete(opCtx, &deleteRequest);
uassertStatusOK(parsedDelete.parseRequest());
// Explains of write commands are read-only, but we take write locks so that timing
// info is more accurate.
- ScopedTransaction scopedXact(txn, MODE_IX);
- AutoGetCollection collection(txn, batch.ns, MODE_IX);
+ ScopedTransaction scopedXact(opCtx, MODE_IX);
+ AutoGetCollection collection(opCtx, batch.ns, MODE_IX);
// Explain the plan tree.
auto exec = uassertStatusOK(getExecutorDelete(
- txn, &CurOp::get(txn)->debug(), collection.getCollection(), &parsedDelete));
+ opCtx, &CurOp::get(opCtx)->debug(), collection.getCollection(), &parsedDelete));
Explain::explainStages(exec.get(), collection.getCollection(), verbosity, out);
return Status::OK();
}