Skip to content

Commit 3b32265

Browse files
authored
Set status of the cluster on sync fail/success
1 parent cec695d commit 3b32265

File tree

3 files changed

+38
-20
lines changed

3 files changed

+38
-20
lines changed

pkg/cluster/sync.go

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,45 @@ import (
1111

1212
// Sync syncs the cluster, making sure the actual Kubernetes objects correspond to what is defined in the manifest.
1313
// Unlike the update, sync does not error out if some objects do not exist and takes care of creating them.
14-
func (c *Cluster) Sync() error {
14+
func (c *Cluster) Sync(newSpec *spec.Postgresql) (err error) {
1515
c.mu.Lock()
1616
defer c.mu.Unlock()
1717

18-
err := c.loadResources()
18+
c.Postgresql = *newSpec
19+
20+
err = c.loadResources()
1921
if err != nil {
2022
c.logger.Errorf("could not load resources: %v", err)
2123
}
2224

25+
defer func() {
26+
if err != nil {
27+
c.setStatus(spec.ClusterStatusSyncFailed)
28+
} else if c.Status != spec.ClusterStatusRunning {
29+
c.setStatus(spec.ClusterStatusRunning)
30+
}
31+
}()
32+
2333
if err = c.initUsers(); err != nil {
24-
return err
34+
err = fmt.Errorf("could not init users: %v", err)
35+
return
2536
}
2637

2738
c.logger.Debugf("syncing secrets")
2839

2940
//TODO: mind the secrets of the deleted/new users
30-
if err := c.applySecrets(); err != nil {
41+
if err = c.applySecrets(); err != nil {
3142
if !k8sutil.ResourceAlreadyExists(err) {
32-
return fmt.Errorf("could not sync secrets: %v", err)
43+
err = fmt.Errorf("could not sync secrets: %v", err)
44+
return
3345
}
3446
}
3547

3648
c.logger.Debugf("syncing endpoints")
37-
if err := c.syncEndpoint(); err != nil {
49+
if err = c.syncEndpoint(); err != nil {
3850
if !k8sutil.ResourceAlreadyExists(err) {
39-
return fmt.Errorf("could not sync endpoints: %v", err)
51+
err = fmt.Errorf("could not sync endpoints: %v", err)
52+
return
4053
}
4154
}
4255

@@ -45,39 +58,44 @@ func (c *Cluster) Sync() error {
4558
if role == Replica && !c.Spec.ReplicaLoadBalancer {
4659
if c.Services[role] != nil {
4760
// delete the left over replica service
48-
if err := c.deleteService(role); err != nil {
49-
return fmt.Errorf("could not delete obsolete %s service: %v", role, err)
61+
if err = c.deleteService(role); err != nil {
62+
err = fmt.Errorf("could not delete obsolete %s service: %v", role, err)
63+
return
5064
}
5165
}
5266
continue
5367
}
54-
if err := c.syncService(role); err != nil {
68+
if err = c.syncService(role); err != nil {
5569
if !k8sutil.ResourceAlreadyExists(err) {
56-
return fmt.Errorf("coud not sync %s service: %v", role, err)
70+
err = fmt.Errorf("coud not sync %s service: %v", role, err)
71+
return
5772
}
5873
}
5974
}
6075

6176
c.logger.Debugf("syncing statefulsets")
62-
if err := c.syncStatefulSet(); err != nil {
77+
if err = c.syncStatefulSet(); err != nil {
6378
if !k8sutil.ResourceAlreadyExists(err) {
64-
return fmt.Errorf("could not sync statefulsets: %v", err)
79+
err = fmt.Errorf("could not sync statefulsets: %v", err)
80+
return
6581
}
6682
}
6783

6884
if !c.databaseAccessDisabled() {
6985
c.logger.Debugf("syncing roles")
70-
if err := c.syncRoles(true); err != nil {
71-
return fmt.Errorf("could not sync roles: %v", err)
86+
if err = c.syncRoles(true); err != nil {
87+
err = fmt.Errorf("could not sync roles: %v", err)
88+
return
7289
}
7390
}
7491

7592
c.logger.Debugf("syncing persistent volumes")
76-
if err := c.syncVolumes(); err != nil {
77-
return fmt.Errorf("could not sync persistent volumes: %v", err)
93+
if err = c.syncVolumes(); err != nil {
94+
err = fmt.Errorf("could not sync persistent volumes: %v", err)
95+
return
7896
}
7997

80-
return nil
98+
return
8199
}
82100

83101
func (c *Cluster) syncService(role PostgresRole) error {

pkg/controller/postgresql.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ func (c *Controller) clusterListFunc(options metav1.ListOptions) (runtime.Object
5757
err = json.Unmarshal(b, &list)
5858

5959
if time.Now().Unix()-atomic.LoadInt64(&c.lastClusterSyncTime) <= int64(c.opConfig.ResyncPeriod.Seconds()) {
60-
c.logger.Debugln("skipping resync of clusters")
6160
return &list, err
6261
}
6362

@@ -249,7 +248,7 @@ func (c *Controller) processEvent(event spec.ClusterEvent) {
249248
}
250249

251250
c.curWorkerCluster.Store(event.WorkerID, cl)
252-
if err := cl.Sync(); err != nil {
251+
if err := cl.Sync(event.NewSpec); err != nil {
253252
cl.Error = fmt.Errorf("could not sync cluster: %v", err)
254253
lg.Error(cl.Error)
255254
return

pkg/spec/postgresql.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ const (
6868
ClusterStatusCreating PostgresStatus = "Creating"
6969
ClusterStatusUpdating PostgresStatus = "Updating"
7070
ClusterStatusUpdateFailed PostgresStatus = "UpdateFailed"
71+
ClusterStatusSyncFailed PostgresStatus = "SyncFailed"
7172
ClusterStatusAddFailed PostgresStatus = "CreateFailed"
7273
ClusterStatusRunning PostgresStatus = "Running"
7374
ClusterStatusInvalid PostgresStatus = "Invalid"

0 commit comments

Comments
 (0)