summaryrefslogtreecommitdiff
path: root/src/mongo/db/ops/delete.cpp
diff options
context:
space:
mode:
authorEric Milkie <milkie@10gen.com>2015-07-30 09:46:03 -0400
committerEric Milkie <milkie@10gen.com>2015-07-30 09:46:03 -0400
commit20e224e7731a0670e813de3c2e67c53328ecc5fa (patch)
tree861abd1cf9cd7837470da90fd77f235034a22a11 /src/mongo/db/ops/delete.cpp
parent66119cae01218f6ac10c87333986bcb0ab9726e4 (diff)
downloadmongo-20e224e7731a0670e813de3c2e67c53328ecc5fa.tar.gz
SERVER-18522 permit replicated writes with deleteObjects() (used by sharding)
Diffstat (limited to 'src/mongo/db/ops/delete.cpp')
-rw-r--r--src/mongo/db/ops/delete.cpp12
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);
}