Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions operator/pkg/helper/patroni_core_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import (

var (
pHelper *PatroniHelper = nil

secretFilePath = "/var/run/secrets/postgresql/"
replicatorPasswordPath = secretFilePath + "replicator-credentials/"
)
Expand Down Expand Up @@ -663,17 +663,13 @@ func (ph *PatroniHelper) GetPGVersionFromPod(podName string) string {
}
return strings.TrimSpace(version)
}
func (ph *PatroniHelper) GetLocaleVersion(podName string) string {
func (ph *PatroniHelper) EnsureLocaleVersion(podName string) string {

versionCM, err := util.FindCmInNamespaceByName(namespace, "deployment-info")
if err != nil || versionCM.Data["locale-version"] == "" {
version := ph.GetLocaleVersionFromPod(podName)
if version != "" {
versionCM.Data["locale-version"] = version
_, err := ph.CreateOrUpdateConfigMap(versionCM)
if err != nil {
logger.Error("Failed to create or update config map deployment-info", zap.Error(err))
}
ph.StoreDataToCM("locale-version", version)
}
return version
}
Expand Down
35 changes: 28 additions & 7 deletions operator/pkg/reconciler/patroni.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,33 @@ func (r *PatroniReconciler) Reconcile() error {
isStandbyClusterPresent := patroni.IsStandbyClusterConfigurationExist(cr)
isPgbackrestUsed := cr.Spec.PgBackRest != nil

masterPod, err := r.helper.GetPodsByLabel(r.cluster.PatroniMasterSelectors)
if err != nil && !errors.IsNotFound(err) {
return err
}

if len(masterPod.Items) != 0 {
// save locale version to config map
r.helper.EnsureLocaleVersion(masterPod.Items[0].Name)
}

if cr.Upgrade != nil && cr.Upgrade.Enabled {
logger.Info("Starting an upgrade procedure")
time.Sleep(30 * time.Second)
if err := r.upgrade.ProceedUpgrade(cr, r.cluster); err != nil {
logger.Error("Cannot upgrade patroni", zap.Error(err))
return err
if len(masterPod.Items) == 0 {
logger.Info("Skipping upgrade procedure: master pod is not available")
return fmt.Errorf("master pod is not available, cannot perform major upgrade")
} else if !r.upgrade.CheckUpgrade(cr, r.cluster) {
logger.Info("Major upgrade is enabled but PostgreSQL version is not changed, skipping upgrade procedure")
if err := r.upgrade.UpdateUpgradeToDone(); err != nil {
logger.Error("Cannot reset upgrade flag", zap.Error(err))
return err
}
} else {
logger.Info("Starting an upgrade procedure")
time.Sleep(30 * time.Second)
if err := r.upgrade.ProceedUpgrade(cr, r.cluster); err != nil {
logger.Error("Cannot upgrade patroni", zap.Error(err))
return err
}
}
}

Expand Down Expand Up @@ -138,7 +159,7 @@ func (r *PatroniReconciler) Reconcile() error {

// find possible deployments by pods
// try to get master pod
masterPod, err := r.helper.GetPodsByLabel(r.cluster.PatroniMasterSelectors)
masterPod, err = r.helper.GetPodsByLabel(r.cluster.PatroniMasterSelectors)
if err != nil {
if !errors.IsNotFound(err) {
return err
Expand Down Expand Up @@ -192,7 +213,7 @@ func (r *PatroniReconciler) Reconcile() error {
if _, err := r.helper.IsHealthyWithTimeoutDuringUpdate(3*time.Minute, r.cluster.PatroniUrl, r.cluster.PgHost, statefulCount); err == nil {

// check locale version, because different versions can affect postgres data
localeVersion := r.helper.GetLocaleVersion(masterPod.Items[0].Name)
localeVersion := r.helper.EnsureLocaleVersion(masterPod.Items[0].Name)

replicaPods, err := r.helper.GetPodsByLabel(r.cluster.PatroniReplicasSelector)
if err != nil {
Expand Down
Loading