From e34f19be01c1c8c0eb045c9b74726e70034fb844 Mon Sep 17 00:00:00 2001 From: Felix Kunde Date: Tue, 20 Feb 2024 10:24:24 +0100 Subject: [PATCH] update spec when updating status (#2546) * update spec when updating status * only setSpec of pg resource is not empty --- pkg/cluster/cluster.go | 26 ++++++++++++++++++++++---- pkg/cluster/sync.go | 11 +++++++++-- pkg/util/k8sutil/k8sutil.go | 3 +-- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index b00d4b6b7..ec5b61dd2 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -254,10 +254,17 @@ func (c *Cluster) Create() (err error) { ) defer func() { + var pgUpdatedStatus *acidv1.Postgresql if err == nil { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) //TODO: are you sure it's running? + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) //TODO: are you sure it's running? } else { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusAddFailed) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusAddFailed) + } + if err != nil { + c.logger.Warningf("could not set cluster status: %v", err) + } + if pgUpdatedStatus != nil { + c.setSpec(pgUpdatedStatus) } }() @@ -790,6 +797,7 @@ func (c *Cluster) addFinalizer() error { // update the spec, maintaining the new resourceVersion c.setSpec(newSpec) + return nil } @@ -838,10 +846,20 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { c.setSpec(newSpec) defer func() { + var ( + pgUpdatedStatus *acidv1.Postgresql + err error + ) if updateFailed { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusUpdateFailed) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusUpdateFailed) } else { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + } + if err != nil { + c.logger.Warningf("could not set cluster status: %v", err) + } + if pgUpdatedStatus != nil { + c.setSpec(pgUpdatedStatus) } }() diff --git a/pkg/cluster/sync.go b/pkg/cluster/sync.go index 723f6a455..19aab1e51 100644 --- a/pkg/cluster/sync.go +++ b/pkg/cluster/sync.go @@ -41,11 +41,18 @@ func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error { c.setSpec(newSpec) defer func() { + var pgUpdatedStatus *acidv1.Postgresql if err != nil { c.logger.Warningf("error while syncing cluster state: %v", err) - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusSyncFailed) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusSyncFailed) } else if !c.Status.Running() { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + } + if err != nil { + c.logger.Warningf("could not set cluster status: %v", err) + } + if pgUpdatedStatus != nil { + c.setSpec(pgUpdatedStatus) } }() diff --git a/pkg/util/k8sutil/k8sutil.go b/pkg/util/k8sutil/k8sutil.go index 575766f76..44608856e 100644 --- a/pkg/util/k8sutil/k8sutil.go +++ b/pkg/util/k8sutil/k8sutil.go @@ -209,7 +209,6 @@ func (client *KubernetesClient) SetPostgresCRDStatus(clusterName spec.Namespaced return pg, fmt.Errorf("could not update status: %v", err) } - // update the spec, maintaining the new resourceVersion. return pg, nil } @@ -220,7 +219,7 @@ func (client *KubernetesClient) SetFinalizer(clusterName spec.NamespacedName, pg patch []byte err error ) - pg.ObjectMeta.SetFinalizers(finalizers) + pg.ObjectMeta.Finalizers = finalizers if len(finalizers) > 0 { patch, err = json.Marshal(struct {