diff options
author | Eric Milkie <milkie@10gen.com> | 2015-07-30 09:46:03 -0400 |
---|---|---|
committer | Eric Milkie <milkie@10gen.com> | 2015-07-30 09:46:03 -0400 |
commit | 20e224e7731a0670e813de3c2e67c53328ecc5fa (patch) | |
tree | 861abd1cf9cd7837470da90fd77f235034a22a11 /src/mongo | |
parent | 66119cae01218f6ac10c87333986bcb0ab9726e4 (diff) | |
download | mongo-20e224e7731a0670e813de3c2e67c53328ecc5fa.tar.gz |
SERVER-18522 permit replicated writes with deleteObjects() (used by sharding)
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/ops/delete.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mongo/db/ops/delete.cpp b/src/mongo/db/ops/delete.cpp index 4cc01162bdd..325b0d36bc0 100644 --- a/src/mongo/db/ops/delete.cpp +++ b/src/mongo/db/ops/delete.cpp @@ -35,6 +35,7 @@ #include "mongo/db/ops/delete_request.h" #include "mongo/db/ops/parsed_delete.h" #include "mongo/db/query/get_executor.h" +#include "mongo/db/repl/repl_client_info.h" namespace mongo { @@ -67,14 +68,19 @@ long long deleteObjects(OperationContext* txn, ParsedDelete parsedDelete(txn, &request); uassertStatusOK(parsedDelete.parseRequest()); - // Replicated writes are disallowed with deleteObjects, as we are not properly setting - // lastOp for no-op deletes. - fassert(22001, !txn->writesAreReplicated()); + auto client = txn->getClient(); + auto lastOpAtOperationStart = repl::ReplClientInfo::forClient(client).getLastOp(); std::unique_ptr<PlanExecutor> exec = uassertStatusOK(getExecutorDelete(txn, collection, &parsedDelete)); uassertStatusOK(exec->executePlan()); + + // No-ops need to reset lastOp in the client, for write concern. + if (repl::ReplClientInfo::forClient(client).getLastOp() == lastOpAtOperationStart) { + repl::ReplClientInfo::forClient(client).setLastOpToSystemLastOpTime(txn); + } + return DeleteStage::getNumDeleted(*exec); } |