diff options
author | Matthew Russotto <matthew.russotto@mongodb.com> | 2021-09-17 19:12:27 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-10-05 14:15:51 +0000 |
commit | b3cc5b18bda3cd24465126f1603fa54b2ea7926e (patch) | |
tree | 452183ff4b65e6169449ab87aff0cdc93d593f77 | |
parent | 3aae8cc5bc9d3d6b4476aebc63b67138375a81af (diff) | |
download | mongo-b3cc5b18bda3cd24465126f1603fa54b2ea7926e.tar.gz |
SERVER-59866 Stop FCV from waiting for majority when currentCommitted…
(cherry picked from commit 7e5e6088eaf3ff2e01740cb52efa16c1fb8d360b)
3 files changed, 15 insertions, 2 deletions
diff --git a/src/mongo/db/commands/feature_compatibility_version.cpp b/src/mongo/db/commands/feature_compatibility_version.cpp index b922e6f57e3..d7cfb0b21b0 100644 --- a/src/mongo/db/commands/feature_compatibility_version.cpp +++ b/src/mongo/db/commands/feature_compatibility_version.cpp @@ -265,8 +265,7 @@ void FeatureCompatibilityVersion::onReplicationRollback(OperationContext* opCtx) "oldVersion"_attr = FeatureCompatibilityVersionParser::toString(memoryFcv)); _setVersion(opCtx, diskFcv, boost::none); // The rollback FCV is already in the stable snapshot. - stdx::lock_guard lk(lastFCVUpdateTimestampMutex); - lastFCVUpdateTimestamp = Timestamp(); + clearLastFCVUpdateTimestamp(); } } } @@ -316,6 +315,11 @@ void FeatureCompatibilityVersion::_runUpdateCommand(OperationContext* opCtx, uassertStatusOK(getStatusFromWriteCommandReply(updateResult)); } +void FeatureCompatibilityVersion::clearLastFCVUpdateTimestamp() { + stdx::lock_guard lk(lastFCVUpdateTimestampMutex); + lastFCVUpdateTimestamp = Timestamp(); +} + /** * Read-only server parameter for featureCompatibilityVersion. */ diff --git a/src/mongo/db/commands/feature_compatibility_version.h b/src/mongo/db/commands/feature_compatibility_version.h index 04e84587e5d..0cc79203c00 100644 --- a/src/mongo/db/commands/feature_compatibility_version.h +++ b/src/mongo/db/commands/feature_compatibility_version.h @@ -104,6 +104,14 @@ public: */ static void onReplicationRollback(OperationContext* opCtx); + /** + * Used at rollback time. The rollback FCV is always in the majority snapshot, so it is safe to + * clear the lastFCVUpdateTimestamp then. + * + * Also used in rare cases when the replication coordinator majority snapshot is cleared. + */ + static void clearLastFCVUpdateTimestamp(); + private: /** * Validate version. Uasserts if invalid. diff --git a/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp b/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp index 834bd679109..f3193f6f178 100644 --- a/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp +++ b/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp @@ -967,6 +967,7 @@ void ReplicationCoordinatorExternalStateImpl::_dropAllTempCollections(OperationC void ReplicationCoordinatorExternalStateImpl::dropAllSnapshots() { if (auto manager = _service->getStorageEngine()->getSnapshotManager()) manager->dropAllSnapshots(); + FeatureCompatibilityVersion::clearLastFCVUpdateTimestamp(); } void ReplicationCoordinatorExternalStateImpl::updateCommittedSnapshot( |