diff options
-rw-r--r-- | src/mongo/db/operation_context.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/operation_context.h | 13 | ||||
-rw-r--r-- | src/mongo/db/operation_context_impl.cpp | 18 | ||||
-rw-r--r-- | src/mongo/db/operation_context_impl.h | 8 | ||||
-rw-r--r-- | src/mongo/db/operation_context_noop.h | 20 |
5 files changed, 24 insertions, 48 deletions
diff --git a/src/mongo/db/operation_context.cpp b/src/mongo/db/operation_context.cpp index 1b20493235b..93cb2604b2b 100644 --- a/src/mongo/db/operation_context.cpp +++ b/src/mongo/db/operation_context.cpp @@ -203,4 +203,17 @@ Status OperationContext::checkForInterruptNoAssert() { return Status::OK(); } + +RecoveryUnit* OperationContext::releaseRecoveryUnit() { + return _recoveryUnit.release(); +} + +OperationContext::RecoveryUnitState OperationContext::setRecoveryUnit(RecoveryUnit* unit, + RecoveryUnitState state) { + _recoveryUnit.reset(unit); + RecoveryUnitState oldState = _ruState; + _ruState = state; + return oldState; +} + } // namespace mongo diff --git a/src/mongo/db/operation_context.h b/src/mongo/db/operation_context.h index f84b896f73f..409d329733f 100644 --- a/src/mongo/db/operation_context.h +++ b/src/mongo/db/operation_context.h @@ -79,7 +79,9 @@ public: /** * Interface for durability. Caller DOES NOT own pointer. */ - virtual RecoveryUnit* recoveryUnit() const = 0; + RecoveryUnit* recoveryUnit() const { + return _recoveryUnit.get(); + } /** * Returns the RecoveryUnit (same return value as recoveryUnit()) but the caller takes @@ -93,7 +95,7 @@ public: * We rely on active cursors being killed when collections or databases are dropped, * or when collection metadata changes. */ - virtual RecoveryUnit* releaseRecoveryUnit() = 0; + RecoveryUnit* releaseRecoveryUnit(); /** * Associates the OperatingContext with a different RecoveryUnit for getMore or @@ -101,7 +103,7 @@ public: * returned separately even though the state logically belongs to the RecoveryUnit, * as it is managed by the OperationContext. */ - virtual RecoveryUnitState setRecoveryUnit(RecoveryUnit* unit, RecoveryUnitState state) = 0; + RecoveryUnitState setRecoveryUnit(RecoveryUnit* unit, RecoveryUnitState state); /** * Interface for locking. Caller DOES NOT own pointer. @@ -281,8 +283,6 @@ public: protected: OperationContext(Client* client, unsigned int opId, Locker* locker); - RecoveryUnitState _ruState = kNotInUnitOfWork; - private: /** * Returns true if this operation has a deadline and it has passed according to the fast clock @@ -303,6 +303,9 @@ private: // Not owned. Locker* const _locker; + std::unique_ptr<RecoveryUnit> _recoveryUnit; + RecoveryUnitState _ruState = kNotInUnitOfWork; + // Follows the values of ErrorCodes::Error. The default value is 0 (OK), which means the // operation is not killed. If killed, it will contain a specific code. This value changes only // once from OK to some kill code. diff --git a/src/mongo/db/operation_context_impl.cpp b/src/mongo/db/operation_context_impl.cpp index 3451dfbecbe..fec4cff0957 100644 --- a/src/mongo/db/operation_context_impl.cpp +++ b/src/mongo/db/operation_context_impl.cpp @@ -74,7 +74,7 @@ OperationContextImpl::OperationContextImpl() : OperationContext( &cc(), nextOpId.fetchAndAdd(1), clientOperationInfoDecoration(cc()).getLocker()) { StorageEngine* storageEngine = getServiceContext()->getGlobalStorageEngine(); - _recovery.reset(storageEngine->newRecoveryUnit()); + setRecoveryUnit(storageEngine->newRecoveryUnit(), kNotInUnitOfWork); auto client = getClient(); stdx::lock_guard<Client> lk(*client); @@ -88,22 +88,6 @@ OperationContextImpl::~OperationContextImpl() { client->resetOperationContext(); } -RecoveryUnit* OperationContextImpl::recoveryUnit() const { - return _recovery.get(); -} - -RecoveryUnit* OperationContextImpl::releaseRecoveryUnit() { - return _recovery.release(); -} - -OperationContext::RecoveryUnitState OperationContextImpl::setRecoveryUnit(RecoveryUnit* unit, - RecoveryUnitState state) { - _recovery.reset(unit); - RecoveryUnitState oldState = _ruState; - _ruState = state; - return oldState; -} - ProgressMeter* OperationContextImpl::setMessage_inlock(const char* msg, const std::string& name, unsigned long long progressMeterTotal, diff --git a/src/mongo/db/operation_context_impl.h b/src/mongo/db/operation_context_impl.h index 86f458a268b..de60127c6dd 100644 --- a/src/mongo/db/operation_context_impl.h +++ b/src/mongo/db/operation_context_impl.h @@ -37,12 +37,6 @@ class OperationContextImpl final : public OperationContext { public: virtual ~OperationContextImpl(); - virtual RecoveryUnit* recoveryUnit() const override; - - virtual RecoveryUnit* releaseRecoveryUnit() override; - - virtual RecoveryUnitState setRecoveryUnit(RecoveryUnit* unit, RecoveryUnitState state) override; - virtual ProgressMeter* setMessage_inlock(const char* msg, const std::string& name, unsigned long long progressMeterTotal, @@ -56,8 +50,6 @@ private: friend class ServiceContextMongoD; OperationContextImpl(); - - std::unique_ptr<RecoveryUnit> _recovery; }; } // namespace mongo diff --git a/src/mongo/db/operation_context_noop.h b/src/mongo/db/operation_context_noop.h index 1a462c891b8..84d2eb2f4ec 100644 --- a/src/mongo/db/operation_context_noop.h +++ b/src/mongo/db/operation_context_noop.h @@ -52,7 +52,8 @@ public: : OperationContextNoop(client, opId, locker, new RecoveryUnitNoop()) {} OperationContextNoop(Client* client, unsigned int opId, Locker* locker, RecoveryUnit* ru) - : OperationContext(client, opId, locker), _recoveryUnit(ru) { + : OperationContext(client, opId, locker) { + setRecoveryUnit(ru, kNotInUnitOfWork); _locker.reset(lockState()); if (client) { @@ -69,22 +70,6 @@ public: } } - virtual RecoveryUnit* recoveryUnit() const override { - return _recoveryUnit.get(); - } - - virtual RecoveryUnit* releaseRecoveryUnit() override { - return _recoveryUnit.release(); - } - - virtual RecoveryUnitState setRecoveryUnit(RecoveryUnit* unit, - RecoveryUnitState state) override { - RecoveryUnitState oldState = _ruState; - _recoveryUnit.reset(unit); - _ruState = state; - return oldState; - } - virtual ProgressMeter* setMessage_inlock(const char* msg, const std::string& name, unsigned long long progressMeterTotal, @@ -101,7 +86,6 @@ public: }; private: - std::unique_ptr<RecoveryUnit> _recoveryUnit; std::unique_ptr<Locker> _locker; ProgressMeter _pm; }; |