summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/rollback_impl_test.cpp
diff options
context:
space:
mode:
authorWilliam Schultz <william.schultz@mongodb.com>2017-08-23 13:12:17 -0400
committerWilliam Schultz <william.schultz@mongodb.com>2017-08-23 13:27:17 -0400
commit8097b23bb419708202b5306133cb57a545d0825b (patch)
tree1556dcbc854d7f11810803618d310ff52328355b /src/mongo/db/repl/rollback_impl_test.cpp
parentce094a604ba1e11ea220a47c0e6626e18103601a (diff)
downloadmongo-8097b23bb419708202b5306133cb57a545d0825b.tar.gz
SERVER-29899 Call recovery logic in rollback
Diffstat (limited to 'src/mongo/db/repl/rollback_impl_test.cpp')
-rw-r--r--src/mongo/db/repl/rollback_impl_test.cpp53
1 files changed, 50 insertions, 3 deletions
diff --git a/src/mongo/db/repl/rollback_impl_test.cpp b/src/mongo/db/repl/rollback_impl_test.cpp
index 07db1736d3b..4b0b8640a53 100644
--- a/src/mongo/db/repl/rollback_impl_test.cpp
+++ b/src/mongo/db/repl/rollback_impl_test.cpp
@@ -122,6 +122,14 @@ protected:
bool _transitionedToRollback = false;
stdx::function<void()> _onTransitionToRollbackFn = [this]() { _transitionedToRollback = true; };
+ bool _recoveredToStableTimestamp = false;
+ stdx::function<void()> _onRecoverToStableTimestampFn = [this]() {
+ _recoveredToStableTimestamp = true;
+ };
+
+ bool _recoveredFromOplog = false;
+ stdx::function<void()> _onRecoverFromOplogFn = [this]() { _recoveredFromOplog = true; };
+
Timestamp _commonPointFound;
stdx::function<void(Timestamp commonPoint)> _onCommonPointFoundFn =
[this](Timestamp commonPoint) { _commonPointFound = commonPoint; };
@@ -158,14 +166,22 @@ class RollbackImplTest::Listener : public RollbackImpl::Listener {
public:
Listener(RollbackImplTest* test) : _test(test) {}
- void onTransitionToRollback() {
+ void onTransitionToRollback() noexcept {
_test->_onTransitionToRollbackFn();
}
- void onCommonPointFound(Timestamp commonPoint) {
+ void onCommonPointFound(Timestamp commonPoint) noexcept {
_test->_onCommonPointFoundFn(commonPoint);
}
+ void onRecoverToStableTimestamp() noexcept {
+ _test->_onRecoverToStableTimestampFn();
+ }
+
+ void onRecoverFromOplog() noexcept {
+ _test->_onRecoverFromOplogFn();
+ }
+
private:
RollbackImplTest* _test;
};
@@ -236,7 +252,7 @@ TEST_F(RollbackImplTest, RollbackPersistsCommonPointToOplogTruncateAfterPoint) {
_remoteOplog->setOperations({makeOpAndRecordId(2)});
_localOplog->setOperations({makeOpAndRecordId(2)});
- ASSERT_EQUALS(Status::OK(), _rollback->runRollback(_opCtx.get()));
+ ASSERT_OK(_rollback->runRollback(_opCtx.get()));
// Check that the common point was saved.
auto truncateAfterPoint =
@@ -324,6 +340,37 @@ TEST_F(RollbackImplTest, RollbackReturnsBadStatusIfIncrementRollbackIDFails) {
ASSERT_EQUALS(ErrorCodes::NamespaceNotFound, status.code());
}
+TEST_F(RollbackImplTest, RollbackCallsRecoverFromOplog) {
+ auto op = makeOpAndRecordId(1);
+ _remoteOplog->setOperations({op});
+ _localOplog->setOperations({op});
+
+ // Run rollback.
+ ASSERT_OK(_rollback->runRollback(_opCtx.get()));
+
+ // Make sure oplog recovery was executed.
+ ASSERT(_recoveredFromOplog);
+}
+
+TEST_F(RollbackImplTest, RollbackSkipsRecoverFromOplogWhenShutdownEarly) {
+ auto op = makeOpAndRecordId(1);
+ _remoteOplog->setOperations({op});
+ _localOplog->setOperations({op});
+
+ _onRecoverToStableTimestampFn = [this]() {
+ _recoveredToStableTimestamp = true;
+ _rollback->shutdown();
+ };
+
+ // Run rollback.
+ auto status = _rollback->runRollback(_opCtx.get());
+
+ // Make sure shutdown occurred before oplog recovery.
+ ASSERT_EQUALS(ErrorCodes::ShutdownInProgress, _rollback->runRollback(_opCtx.get()));
+ ASSERT(_recoveredToStableTimestamp);
+ ASSERT_FALSE(_recoveredFromOplog);
+}
+
TEST_F(RollbackImplTest, RollbackSucceeds) {
auto op = makeOpAndRecordId(1);
_remoteOplog->setOperations({op});