summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog_raii.cpp
diff options
context:
space:
mode:
authorSiyuan Zhou <siyuan.zhou@mongodb.com>2019-03-13 16:18:53 -0400
committerSiyuan Zhou <siyuan.zhou@mongodb.com>2019-03-20 18:49:14 -0400
commit01d8fbb1f0373f0fcca7b2d602f1e593cdc5a379 (patch)
treef880af50abfb9f085ec31d6fe412befa89fcf739 /src/mongo/db/catalog_raii.cpp
parent86dbecd63275678e08e42765278394f562c81207 (diff)
downloadmongo-01d8fbb1f0373f0fcca7b2d602f1e593cdc5a379.tar.gz
SERVER-40053 Add an RAII type to change and restore the timestamp read source
Diffstat (limited to 'src/mongo/db/catalog_raii.cpp')
-rw-r--r--src/mongo/db/catalog_raii.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mongo/db/catalog_raii.cpp b/src/mongo/db/catalog_raii.cpp
index b3fafde57a8..d67b2cbc520 100644
--- a/src/mongo/db/catalog_raii.cpp
+++ b/src/mongo/db/catalog_raii.cpp
@@ -193,4 +193,24 @@ ConcealUUIDCatalogChangesBlock::~ConcealUUIDCatalogChangesBlock() {
UUIDCatalog::get(_opCtx).onOpenCatalog(_opCtx);
}
+ReadSourceScope::ReadSourceScope(OperationContext* opCtx)
+ : _opCtx(opCtx), _originalReadSource(opCtx->recoveryUnit()->getTimestampReadSource()) {
+
+ if (_originalReadSource == RecoveryUnit::ReadSource::kProvided) {
+ _originalReadTimestamp = *_opCtx->recoveryUnit()->getPointInTimeReadTimestamp();
+ }
+
+ _opCtx->recoveryUnit()->abandonSnapshot();
+ _opCtx->recoveryUnit()->setTimestampReadSource(RecoveryUnit::ReadSource::kUnset);
+}
+
+ReadSourceScope::~ReadSourceScope() {
+ _opCtx->recoveryUnit()->abandonSnapshot();
+ if (_originalReadSource == RecoveryUnit::ReadSource::kProvided) {
+ _opCtx->recoveryUnit()->setTimestampReadSource(_originalReadSource, _originalReadTimestamp);
+ } else {
+ _opCtx->recoveryUnit()->setTimestampReadSource(_originalReadSource);
+ }
+}
+
} // namespace mongo