summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/operation_context.cpp13
-rw-r--r--src/mongo/db/operation_context.h13
-rw-r--r--src/mongo/db/operation_context_impl.cpp18
-rw-r--r--src/mongo/db/operation_context_impl.h8
-rw-r--r--src/mongo/db/operation_context_noop.h20
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;
};