From e04b91d8af79a14d12027609d839890c404f61c3 Mon Sep 17 00:00:00 2001
From: Polina Bungina <27892524+hughcapet@users.noreply.github.com>
Date: Fri, 17 Jan 2025 16:29:52 +0300
Subject: [PATCH] Only check maintenance window for upgrade after pg version
 recheck (#2842)

This way we avoid misleading "skipping major version upgrade, not in maintenance window" log line when c.currentMajorVersion is not initialized (==0)
---
 pkg/cluster/majorversionupgrade.go | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/pkg/cluster/majorversionupgrade.go b/pkg/cluster/majorversionupgrade.go
index e7f9f4f0..b75702bc 100644
--- a/pkg/cluster/majorversionupgrade.go
+++ b/pkg/cluster/majorversionupgrade.go
@@ -129,17 +129,13 @@ func (c *Cluster) majorVersionUpgrade() error {
 		return nil
 	}
 
-	if !isInMaintenanceWindow(c.Spec.MaintenanceWindows) {
-		c.logger.Infof("skipping major version upgrade, not in maintenance window")
-		return nil
-	}
-
 	pods, err := c.listPods()
 	if err != nil {
 		return err
 	}
 
 	allRunning := true
+	isStandbyCluster := false
 
 	var masterPod *v1.Pod
 
@@ -147,8 +143,9 @@ func (c *Cluster) majorVersionUpgrade() error {
 		ps, _ := c.patroni.GetMemberData(&pod)
 
 		if ps.Role == "standby_leader" {
-			c.logger.Errorf("skipping major version upgrade for %s/%s standby cluster. Re-deploy standby cluster with the required Postgres version specified", c.Namespace, c.Name)
-			return nil
+			isStandbyCluster = true
+			c.currentMajorVersion = ps.ServerVersion
+			break
 		}
 
 		if ps.State != "running" {
@@ -175,6 +172,9 @@ func (c *Cluster) majorVersionUpgrade() error {
 		}
 		c.logger.Infof("recheck cluster version is already up to date. current: %d, min desired: %d", c.currentMajorVersion, desiredVersion)
 		return nil
+	} else if isStandbyCluster {
+		c.logger.Warnf("skipping major version upgrade for %s/%s standby cluster. Re-deploy standby cluster with the required Postgres version specified", c.Namespace, c.Name)
+		return nil
 	}
 
 	if _, exists := c.ObjectMeta.Annotations[majorVersionUpgradeFailureAnnotation]; exists {
@@ -182,6 +182,11 @@ func (c *Cluster) majorVersionUpgrade() error {
 		return nil
 	}
 
+	if !isInMaintenanceWindow(c.Spec.MaintenanceWindows) {
+		c.logger.Infof("skipping major version upgrade, not in maintenance window")
+		return nil
+	}
+
 	members, err := c.patroni.GetClusterMembers(masterPod)
 	if err != nil {
 		c.logger.Error("could not get cluster members data from Patroni API, skipping major version upgrade")
-- 
GitLab