summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_out.h
diff options
context:
space:
mode:
authorLingzhi Deng <lingzhi.deng@mongodb.com>2019-05-20 00:49:33 -0400
committerLingzhi Deng <lingzhi.deng@mongodb.com>2019-05-23 16:46:30 -0400
commit8a89b076d28a904c200e491698ef1169dd8a7254 (patch)
treedc32fa3bdc62cdd9f8b9b84777f0df8f03f43cec /src/mongo/db/pipeline/document_source_out.h
parent47d4eca3fcdfa8eed0f1bef28021c8603452dec3 (diff)
downloadmongo-8a89b076d28a904c200e491698ef1169dd8a7254.tar.gz
SERVER-40938: disallow afterClusterTime and ignore prepare conflicts for dbhash and map-reduce
Diffstat (limited to 'src/mongo/db/pipeline/document_source_out.h')
-rw-r--r--src/mongo/db/pipeline/document_source_out.h9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/mongo/db/pipeline/document_source_out.h b/src/mongo/db/pipeline/document_source_out.h
index 674aea38657..ce9e4282b14 100644
--- a/src/mongo/db/pipeline/document_source_out.h
+++ b/src/mongo/db/pipeline/document_source_out.h
@@ -29,6 +29,7 @@
#pragma once
+#include "mongo/db/db_raii.h"
#include "mongo/db/pipeline/document_source.h"
#include "mongo/db/pipeline/document_source_out_gen.h"
#include "mongo/db/write_concern_options.h"
@@ -46,23 +47,21 @@ class OutStageWriteBlock {
OperationContext* _opCtx;
repl::ReadConcernArgs _originalArgs;
RecoveryUnit::ReadSource _originalSource;
- bool _originalIgnorePrepared;
+ EnforcePrepareConflictsBlock _enforcePrepareConflictsBlock;
public:
- OutStageWriteBlock(OperationContext* opCtx) : _opCtx(opCtx) {
+ OutStageWriteBlock(OperationContext* opCtx)
+ : _opCtx(opCtx), _enforcePrepareConflictsBlock(opCtx) {
_originalArgs = repl::ReadConcernArgs::get(_opCtx);
_originalSource = _opCtx->recoveryUnit()->getTimestampReadSource();
- _originalIgnorePrepared = _opCtx->recoveryUnit()->getIgnorePrepared();
repl::ReadConcernArgs::get(_opCtx) = repl::ReadConcernArgs();
_opCtx->recoveryUnit()->setTimestampReadSource(RecoveryUnit::kUnset);
- _opCtx->recoveryUnit()->setIgnorePrepared(false);
}
~OutStageWriteBlock() {
repl::ReadConcernArgs::get(_opCtx) = _originalArgs;
_opCtx->recoveryUnit()->setTimestampReadSource(_originalSource);
- _opCtx->recoveryUnit()->setIgnorePrepared(_originalIgnorePrepared);
}
};