Skip to content

Commit e34f19b

Browse files
authored
update spec when updating status (zalando#2546)
* update spec when updating status * only setSpec of pg resource is not empty
1 parent 2af9cfa commit e34f19b

File tree

3 files changed

+32
-8
lines changed

3 files changed

+32
-8
lines changed

pkg/cluster/cluster.go

+22-4
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,17 @@ func (c *Cluster) Create() (err error) {
254254
)
255255

256256
defer func() {
257+
var pgUpdatedStatus *acidv1.Postgresql
257258
if err == nil {
258-
c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) //TODO: are you sure it's running?
259+
pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) //TODO: are you sure it's running?
259260
} else {
260-
c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusAddFailed)
261+
pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusAddFailed)
262+
}
263+
if err != nil {
264+
c.logger.Warningf("could not set cluster status: %v", err)
265+
}
266+
if pgUpdatedStatus != nil {
267+
c.setSpec(pgUpdatedStatus)
261268
}
262269
}()
263270

@@ -790,6 +797,7 @@ func (c *Cluster) addFinalizer() error {
790797

791798
// update the spec, maintaining the new resourceVersion
792799
c.setSpec(newSpec)
800+
793801
return nil
794802
}
795803

@@ -838,10 +846,20 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error {
838846
c.setSpec(newSpec)
839847

840848
defer func() {
849+
var (
850+
pgUpdatedStatus *acidv1.Postgresql
851+
err error
852+
)
841853
if updateFailed {
842-
c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusUpdateFailed)
854+
pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusUpdateFailed)
843855
} else {
844-
c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning)
856+
pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning)
857+
}
858+
if err != nil {
859+
c.logger.Warningf("could not set cluster status: %v", err)
860+
}
861+
if pgUpdatedStatus != nil {
862+
c.setSpec(pgUpdatedStatus)
845863
}
846864
}()
847865

pkg/cluster/sync.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,18 @@ func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error {
4141
c.setSpec(newSpec)
4242

4343
defer func() {
44+
var pgUpdatedStatus *acidv1.Postgresql
4445
if err != nil {
4546
c.logger.Warningf("error while syncing cluster state: %v", err)
46-
c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusSyncFailed)
47+
pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusSyncFailed)
4748
} else if !c.Status.Running() {
48-
c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning)
49+
pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning)
50+
}
51+
if err != nil {
52+
c.logger.Warningf("could not set cluster status: %v", err)
53+
}
54+
if pgUpdatedStatus != nil {
55+
c.setSpec(pgUpdatedStatus)
4956
}
5057
}()
5158

pkg/util/k8sutil/k8sutil.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,6 @@ func (client *KubernetesClient) SetPostgresCRDStatus(clusterName spec.Namespaced
209209
return pg, fmt.Errorf("could not update status: %v", err)
210210
}
211211

212-
// update the spec, maintaining the new resourceVersion.
213212
return pg, nil
214213
}
215214

@@ -220,7 +219,7 @@ func (client *KubernetesClient) SetFinalizer(clusterName spec.NamespacedName, pg
220219
patch []byte
221220
err error
222221
)
223-
pg.ObjectMeta.SetFinalizers(finalizers)
222+
pg.ObjectMeta.Finalizers = finalizers
224223

225224
if len(finalizers) > 0 {
226225
patch, err = json.Marshal(struct {

0 commit comments

Comments
 (0)