diff options
author | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2019-03-13 16:18:53 -0400 |
---|---|---|
committer | Siyuan Zhou <siyuan.zhou@mongodb.com> | 2019-03-20 18:49:14 -0400 |
commit | 01d8fbb1f0373f0fcca7b2d602f1e593cdc5a379 (patch) | |
tree | f880af50abfb9f085ec31d6fe412befa89fcf739 /src/mongo/db/catalog_raii.cpp | |
parent | 86dbecd63275678e08e42765278394f562c81207 (diff) | |
download | mongo-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.cpp | 20 |
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 |