diff --git a/controllers/bounce_processes.go b/controllers/bounce_processes.go index 77406e37a..fc316d465 100644 --- a/controllers/bounce_processes.go +++ b/controllers/bounce_processes.go @@ -255,9 +255,13 @@ func getAddressesForUpgrade(logger logr.Logger, r *FoundationDBClusterReconciler return nil, &requeue{curError: err} } - if !internal.HasDesiredFaultToleranceFromStatus(logger, databaseStatus, cluster) { - r.Recorder.Event(cluster, corev1.EventTypeNormal, "UpgradeRequeued", "Database is unavailable or doesn't have expected fault tolerance") - return nil, &requeue{message: "Deferring upgrade until database is available or expected fault tolerance is met"} + // We don't want to check for fault tolerance here to make sure the operator is able to restart processes if some + // processes where restarted before the operator issued the cluster wide restart. For version incompatible upgrades + // that would mean that the processes restarted earlier are not part of the cluster anymore leading to a fault tolerance + // drop. + if !databaseStatus.Client.DatabaseStatus.Available { + r.Recorder.Event(cluster, corev1.EventTypeNormal, "UpgradeRequeued", "Database is unavailable") + return nil, &requeue{message: "Deferring upgrade until database is available"} } notReadyProcesses := make([]string, 0)