diff options
author | A. Jesse Jiryu Davis <jesse@mongodb.com> | 2020-10-02 15:36:36 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-10-02 20:17:37 +0000 |
commit | 5726924e5c92e019a1730afb8b0724f0cb0e3473 (patch) | |
tree | a2279ee71a9296e57c46fa55da57914a9aa884d7 /src/mongo/db | |
parent | ae595c7a7845271b88f6969dd2100435cdc760b7 (diff) | |
download | mongo-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.cpp | 14 | ||||
-rw-r--r-- | src/mongo/db/repl/rs_rollback.h | 3 | ||||
-rw-r--r-- | src/mongo/db/repl/sync_tail.cpp | 14 | ||||
-rw-r--r-- | src/mongo/db/storage/kv/kv_engine.h | 7 | ||||
-rw-r--r-- | src/mongo/db/storage/kv/kv_storage_engine.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/storage/kv/kv_storage_engine.h | 3 | ||||
-rw-r--r-- | src/mongo/db/storage/mmap_v1/mmap_v1_engine.h | 4 | ||||
-rw-r--r-- | src/mongo/db/storage/storage_engine.h | 5 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h | 2 |
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 |