summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
authorA. Jesse Jiryu Davis <jesse@mongodb.com>2020-10-02 15:36:36 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-10-02 20:17:37 +0000
commit5726924e5c92e019a1730afb8b0724f0cb0e3473 (patch)
treea2279ee71a9296e57c46fa55da57914a9aa884d7 /src/mongo/db
parentae595c7a7845271b88f6969dd2100435cdc760b7 (diff)
downloadmongo-5726924e5c92e019a1730afb8b0724f0cb0e3473.tar.gz
Revert "SERVER-48518 Fix rollback via refetch anomaly"
This reverts commit 09c14216c0f4adae7d12c27dc034ffbf4e9b7001.
Diffstat (limited to 'src/mongo/db')
-rw-r--r--src/mongo/db/repl/rs_rollback.cpp14
-rw-r--r--src/mongo/db/repl/rs_rollback.h3
-rw-r--r--src/mongo/db/repl/sync_tail.cpp14
-rw-r--r--src/mongo/db/storage/kv/kv_engine.h7
-rw-r--r--src/mongo/db/storage/kv/kv_storage_engine.cpp5
-rw-r--r--src/mongo/db/storage/kv/kv_storage_engine.h3
-rw-r--r--src/mongo/db/storage/mmap_v1/mmap_v1_engine.h4
-rw-r--r--src/mongo/db/storage/storage_engine.h5
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp5
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h2
10 files changed, 2 insertions, 60 deletions
diff --git a/src/mongo/db/repl/rs_rollback.cpp b/src/mongo/db/repl/rs_rollback.cpp
index 812eb5ef81e..e95fcaf4044 100644
--- a/src/mongo/db/repl/rs_rollback.cpp
+++ b/src/mongo/db/repl/rs_rollback.cpp
@@ -892,7 +892,6 @@ Status _syncRollback(OperationContext* opCtx,
FixUpInfo how;
log() << "Starting rollback. Sync source: " << rollbackSource.getSource() << rsLog;
- how.localTopOfOplog = replCoord->getMyLastAppliedOpTime();
how.rbid = rollbackSource.getRollbackId();
uassert(
40506, "Upstream node rolled back. Need to retry our rollback.", how.rbid == requiredRBID);
@@ -1433,19 +1432,6 @@ void rollback_internal::syncFixUp(OperationContext* opCtx,
log() << "Rollback deleted " << deletes << " documents and updated " << updates
<< " documents.";
- // Rolling back via refetch, we set initialDataTimestamp to max(local oplog top, source's oplog
- // top), then roll back. Data is inconsistent until lastApplied >= initialDataTimestamp.
- auto syncSourceTopOfOplog =
- OpTime::parseFromOplogEntry(rollbackSource.getLastOperation()).getValue().getTimestamp();
-
- log() << "Setting initialDataTimestamp to the max of local top of oplog and sync source "
- "top of oplog. Local top of oplog: "
- << fixUpInfo.localTopOfOplog.getTimestamp()
- << ", sync source top of oplog: " << syncSourceTopOfOplog;
-
- opCtx->getServiceContext()->getStorageEngine()->setInitialDataTimestamp(
- std::max(fixUpInfo.localTopOfOplog.getTimestamp(), syncSourceTopOfOplog));
-
log() << "Truncating the oplog at " << fixUpInfo.commonPoint.toString() << " ("
<< fixUpInfo.commonPointOurDiskloc << "), non-inclusive";
diff --git a/src/mongo/db/repl/rs_rollback.h b/src/mongo/db/repl/rs_rollback.h
index f6c3ba4a729..3d8274421d0 100644
--- a/src/mongo/db/repl/rs_rollback.h
+++ b/src/mongo/db/repl/rs_rollback.h
@@ -286,9 +286,6 @@ struct FixUpInfo {
// after rollback the in-memory transaction table is cleared.
bool refetchTransactionDocs = false;
- // The local node's top of oplog prior to entering rollback.
- OpTime localTopOfOplog;
-
OpTime commonPoint;
RecordId commonPointOurDiskloc;
diff --git a/src/mongo/db/repl/sync_tail.cpp b/src/mongo/db/repl/sync_tail.cpp
index c0d5d5285f2..7a9e4b46d57 100644
--- a/src/mongo/db/repl/sync_tail.cpp
+++ b/src/mongo/db/repl/sync_tail.cpp
@@ -812,20 +812,6 @@ void tryToGoLiveAsASecondary(OperationContext* opCtx,
return;
}
- // Rolling back with eMRC false, we set initialDataTimestamp to max(local oplog top, source's
- // oplog top), then rollback via refetch. Data is inconsistent until lastApplied >=
- // initialDataTimestamp.
- auto initialTs = opCtx->getServiceContext()->getStorageEngine()->getInitialDataTimestamp();
- if (lastApplied.getTimestamp() < initialTs) {
- invariant(!serverGlobalParams.enableMajorityReadConcern);
- LOG(2) << "We cannot transition to SECONDARY state because our 'lastApplied' optime is "
- "less than the initial data timestamp and enableMajorityReadConcern = false. "
- "minValid optime: "
- << minValid << ", lastApplied optime: " << lastApplied
- << ", initialDataTimestamp: " << initialTs;
- return;
- }
-
// Execute the transition to SECONDARY.
auto status = replCoord->setFollowerMode(MemberState::RS_SECONDARY);
if (!status.isOK()) {
diff --git a/src/mongo/db/storage/kv/kv_engine.h b/src/mongo/db/storage/kv/kv_engine.h
index 848fe379c8c..ae3bdd04d64 100644
--- a/src/mongo/db/storage/kv/kv_engine.h
+++ b/src/mongo/db/storage/kv/kv_engine.h
@@ -296,13 +296,6 @@ public:
virtual void setInitialDataTimestamp(Timestamp initialDataTimestamp) {}
/**
- * See `StorageEngine::getInitialDataTimestamp`
- */
- virtual Timestamp getInitialDataTimestamp() const {
- return Timestamp();
- }
-
- /**
* See `StorageEngine::setOldestTimestamp`
*/
virtual void setOldestTimestamp(Timestamp oldestTimestamp, bool force) {}
diff --git a/src/mongo/db/storage/kv/kv_storage_engine.cpp b/src/mongo/db/storage/kv/kv_storage_engine.cpp
index e3dd6d5a319..1917e3b4807 100644
--- a/src/mongo/db/storage/kv/kv_storage_engine.cpp
+++ b/src/mongo/db/storage/kv/kv_storage_engine.cpp
@@ -634,13 +634,10 @@ void KVStorageEngine::setStableTimestamp(Timestamp stableTimestamp) {
}
void KVStorageEngine::setInitialDataTimestamp(Timestamp initialDataTimestamp) {
+ _initialDataTimestamp = initialDataTimestamp;
_engine->setInitialDataTimestamp(initialDataTimestamp);
}
-Timestamp KVStorageEngine::getInitialDataTimestamp() const {
- return _engine->getInitialDataTimestamp();
-}
-
void KVStorageEngine::setOldestTimestamp(Timestamp oldestTimestamp) {
const bool force = true;
_engine->setOldestTimestamp(oldestTimestamp, force);
diff --git a/src/mongo/db/storage/kv/kv_storage_engine.h b/src/mongo/db/storage/kv/kv_storage_engine.h
index 5ac73546bdf..e2054dd8d87 100644
--- a/src/mongo/db/storage/kv/kv_storage_engine.h
+++ b/src/mongo/db/storage/kv/kv_storage_engine.h
@@ -124,8 +124,6 @@ public:
virtual void setInitialDataTimestamp(Timestamp initialDataTimestamp) override;
- virtual Timestamp getInitialDataTimestamp() const override;
-
virtual void setOldestTimestamp(Timestamp oldestTimestamp) override;
virtual bool supportsRecoverToStableTimestamp() const override;
@@ -226,6 +224,7 @@ private:
const bool _supportsDocLocking;
const bool _supportsDBLocking;
const bool _supportsCappedCollections;
+ Timestamp _initialDataTimestamp = Timestamp::kAllowUnstableCheckpointsSentinel;
std::unique_ptr<RecordStore> _catalogRecordStore;
std::unique_ptr<KVCatalog> _catalog;
diff --git a/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h b/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h
index ea50f5c6022..4055c3f133d 100644
--- a/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h
+++ b/src/mongo/db/storage/mmap_v1/mmap_v1_engine.h
@@ -106,10 +106,6 @@ public:
void setJournalListener(JournalListener* jl) final;
- Timestamp getInitialDataTimestamp() const override {
- return Timestamp();
- }
-
Timestamp getAllCommittedTimestamp() const override {
MONGO_UNREACHABLE;
}
diff --git a/src/mongo/db/storage/storage_engine.h b/src/mongo/db/storage/storage_engine.h
index e63437f97b1..63ce23e4781 100644
--- a/src/mongo/db/storage/storage_engine.h
+++ b/src/mongo/db/storage/storage_engine.h
@@ -391,11 +391,6 @@ public:
virtual void setInitialDataTimestamp(Timestamp timestamp) {}
/**
- * Returns the initial data timestamp.
- */
- virtual Timestamp getInitialDataTimestamp() const = 0;
-
- /**
* Sets the oldest timestamp for which the storage engine must maintain snapshot history
* through. Additionally, all future writes must be newer or equal to this value.
*/
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
index 0e1fb9b1b43..e80512e63fc 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
@@ -1550,16 +1550,11 @@ void WiredTigerKVEngine::setOldestTimestamp(Timestamp oldestTimestamp, bool forc
}
void WiredTigerKVEngine::setInitialDataTimestamp(Timestamp initialDataTimestamp) {
- _initialDataTimestamp.store(initialDataTimestamp.asULL());
if (_checkpointThread) {
_checkpointThread->setInitialDataTimestamp(initialDataTimestamp);
}
}
-Timestamp WiredTigerKVEngine::getInitialDataTimestamp() const {
- return Timestamp(_initialDataTimestamp.load());
-}
-
bool WiredTigerKVEngine::supportsRecoverToStableTimestamp() const {
if (_ephemeral || !_keepDataHistory) {
return false;
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
index ad0b18a5c1f..ffd7a4f8fd7 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h
@@ -189,8 +189,6 @@ public:
virtual void setInitialDataTimestamp(Timestamp initialDataTimestamp) override;
- Timestamp getInitialDataTimestamp() const override;
-
/**
* This method will set the oldest timestamp and commit timestamp to the input value. Callers
* must be serialized along with `setStableTimestamp`. If force=false, this function does not