From 685e0c533e82639d798e7c438725f9c4d8454ffd Mon Sep 17 00:00:00 2001 From: Murat Kabilov <murat.kabilov@zalando.de> Date: Fri, 9 Jun 2017 16:02:29 +0200 Subject: [PATCH] introduce cluster interface; remove cluster types separate file --- pkg/cluster/cluster.go | 22 ++++++++++++++++++++++ pkg/cluster/types.go | 8 -------- pkg/controller/controller.go | 4 ++-- pkg/controller/postgresql.go | 19 +++++++++++-------- 4 files changed, 35 insertions(+), 18 deletions(-) delete mode 100644 pkg/cluster/types.go diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 5627b7b6..fa307b96 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -28,6 +28,24 @@ import ( "github.com/zalando-incubator/postgres-operator/pkg/util/volumes" ) +type Interface interface { + Create() error + Delete() error + ExecCommand(podName *spec.NamespacedName, command ...string) (string, error) + ReceivePodEvent(event spec.PodEvent) + Run(stopCh <-chan struct{}) + Sync() error + Update(newSpec *spec.Postgresql) error + SetFailed(err error) +} + +type PostgresRole string + +const ( + Master PostgresRole = "master" + Replica PostgresRole = "replica" +) + // Config contains operator-wide clients and configuration used from a cluster. TODO: remove struct duplication. type Config struct { KubeClient *kubernetes.Clientset //TODO: move clients to the better place? @@ -630,3 +648,7 @@ func (c *Cluster) initInfrastructureRoles() error { } return nil } + +func (c *Cluster) SetFailed(err error) { + c.Error = err +} diff --git a/pkg/cluster/types.go b/pkg/cluster/types.go deleted file mode 100644 index 5091e532..00000000 --- a/pkg/cluster/types.go +++ /dev/null @@ -1,8 +0,0 @@ -package cluster - -type PostgresRole string - -const ( - Master PostgresRole = "master" - Replica PostgresRole = "replica" -) diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index b0e0962b..b3eb242d 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -31,7 +31,7 @@ type Controller struct { logger *logrus.Entry clustersMu sync.RWMutex - clusters map[spec.NamespacedName]*cluster.Cluster + clusters map[spec.NamespacedName]cluster.Interface stopChs map[spec.NamespacedName]chan struct{} postgresqlInformer cache.SharedIndexInformer @@ -56,7 +56,7 @@ func New(controllerConfig *Config, operatorConfig *config.Config) *Controller { Config: *controllerConfig, opConfig: operatorConfig, logger: logger.WithField("pkg", "controller"), - clusters: make(map[spec.NamespacedName]*cluster.Cluster), + clusters: make(map[spec.NamespacedName]cluster.Interface), stopChs: make(map[spec.NamespacedName]chan struct{}), podCh: make(chan spec.PodEvent), } diff --git a/pkg/controller/postgresql.go b/pkg/controller/postgresql.go index 14997c37..1f94053a 100644 --- a/pkg/controller/postgresql.go +++ b/pkg/controller/postgresql.go @@ -134,8 +134,9 @@ func (c *Controller) processEvent(obj interface{}) error { c.clustersMu.Unlock() if err := cl.Create(); err != nil { - cl.Error = fmt.Errorf("could not create cluster: %v", err) - logger.Errorf("%v", cl.Error) + err = fmt.Errorf("could not create cluster: %v", err) + logger.Errorf("%v", err) + cl.SetFailed(err) return nil } @@ -149,12 +150,13 @@ func (c *Controller) processEvent(obj interface{}) error { return nil } if err := cl.Update(event.NewSpec); err != nil { - cl.Error = fmt.Errorf("could not update cluster: %s", err) - logger.Errorf("%v", cl.Error) + err = fmt.Errorf("could not update cluster: %s", err) + logger.Errorf("%v", err) + cl.SetFailed(err) return nil } - cl.Error = nil + cl.SetFailed(nil) logger.Infof("Cluster '%s' has been updated", clusterName) case spec.EventDelete: logger.Infof("Deletion of the '%s' cluster started", clusterName) @@ -191,11 +193,12 @@ func (c *Controller) processEvent(obj interface{}) error { } if err := cl.Sync(); err != nil { - cl.Error = fmt.Errorf("could not sync cluster '%s': %v", clusterName, err) - logger.Errorf("%v", cl.Error) + err = fmt.Errorf("could not sync cluster '%s': %v", clusterName, err) + logger.Errorf("%v", err) + cl.SetFailed(err) return nil } - cl.Error = nil + cl.SetFailed(nil) logger.Infof("Cluster '%s' has been synced", clusterName) } -- GitLab