summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Russotto <matthew.russotto@mongodb.com>2021-09-17 19:12:27 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-10-05 14:15:51 +0000
commitb3cc5b18bda3cd24465126f1603fa54b2ea7926e (patch)
tree452183ff4b65e6169449ab87aff0cdc93d593f77
parent3aae8cc5bc9d3d6b4476aebc63b67138375a81af (diff)
downloadmongo-b3cc5b18bda3cd24465126f1603fa54b2ea7926e.tar.gz
SERVER-59866 Stop FCV from waiting for majority when currentCommitted…
(cherry picked from commit 7e5e6088eaf3ff2e01740cb52efa16c1fb8d360b)
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.cpp8
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.h8
-rw-r--r--src/mongo/db/repl/replication_coordinator_external_state_impl.cpp1
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(