skip creation after new cluster object
This commit is contained in:
		
							parent
							
								
									7e6e316c3b
								
							
						
					
					
						commit
						0691ce8255
					
				|  | @ -183,7 +183,7 @@ func (c *Cluster) GetReference() *v1.ObjectReference { | |||
| 
 | ||||
| // SetStatus of Postgres cluster
 | ||||
| // TODO: eventually switch to updateStatus() for kubernetes 1.11 and above
 | ||||
| func (c *Cluster) setStatus(status string) { | ||||
| func (c *Cluster) SetStatus(status string) { | ||||
| 	var pgStatus acidv1.PostgresStatus | ||||
| 	pgStatus.PostgresClusterStatus = status | ||||
| 
 | ||||
|  | @ -257,13 +257,13 @@ func (c *Cluster) Create() error { | |||
| 
 | ||||
| 	defer func() { | ||||
| 		if err == nil { | ||||
| 			c.setStatus(acidv1.ClusterStatusRunning) //TODO: are you sure it's running?
 | ||||
| 			c.SetStatus(acidv1.ClusterStatusRunning) //TODO: are you sure it's running?
 | ||||
| 		} else { | ||||
| 			c.setStatus(acidv1.ClusterStatusAddFailed) | ||||
| 			c.SetStatus(acidv1.ClusterStatusAddFailed) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	c.setStatus(acidv1.ClusterStatusCreating) | ||||
| 	c.SetStatus(acidv1.ClusterStatusCreating) | ||||
| 	c.eventRecorder.Event(c.GetReference(), v1.EventTypeNormal, "Create", "Started creation of new cluster resources") | ||||
| 
 | ||||
| 	if err = c.enforceMinResourceLimits(&c.Spec); err != nil { | ||||
|  | @ -630,14 +630,14 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { | |||
| 	c.mu.Lock() | ||||
| 	defer c.mu.Unlock() | ||||
| 
 | ||||
| 	c.setStatus(acidv1.ClusterStatusUpdating) | ||||
| 	c.SetStatus(acidv1.ClusterStatusUpdating) | ||||
| 	c.setSpec(newSpec) | ||||
| 
 | ||||
| 	defer func() { | ||||
| 		if updateFailed { | ||||
| 			c.setStatus(acidv1.ClusterStatusUpdateFailed) | ||||
| 			c.SetStatus(acidv1.ClusterStatusUpdateFailed) | ||||
| 		} else { | ||||
| 			c.setStatus(acidv1.ClusterStatusRunning) | ||||
| 			c.SetStatus(acidv1.ClusterStatusRunning) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,9 +32,9 @@ func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error { | |||
| 	defer func() { | ||||
| 		if err != nil { | ||||
| 			c.logger.Warningf("error while syncing cluster state: %v", err) | ||||
| 			c.setStatus(acidv1.ClusterStatusSyncFailed) | ||||
| 			c.SetStatus(acidv1.ClusterStatusSyncFailed) | ||||
| 		} else if !c.Status.Running() { | ||||
| 			c.setStatus(acidv1.ClusterStatusRunning) | ||||
| 			c.SetStatus(acidv1.ClusterStatusRunning) | ||||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,9 +14,7 @@ import ( | |||
| 	v1 "k8s.io/api/core/v1" | ||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||
| 	"k8s.io/apimachinery/pkg/types" | ||||
| 	"k8s.io/client-go/kubernetes/scheme" | ||||
| 	"k8s.io/client-go/tools/cache" | ||||
| 	"k8s.io/client-go/tools/reference" | ||||
| 
 | ||||
| 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||
| 	"github.com/zalando/postgres-operator/pkg/cluster" | ||||
|  | @ -236,6 +234,15 @@ func (c *Controller) processEvent(event ClusterEvent) { | |||
| 
 | ||||
| 		c.curWorkerCluster.Store(event.WorkerID, cl) | ||||
| 
 | ||||
| 		// if there are already issues skip creation
 | ||||
| 		if cl.Error != "" { | ||||
| 			cl.SetStatus(acidv1.ClusterStatusInvalid) | ||||
| 			lg.Errorf("could not create cluster: %v", cl.Error) | ||||
| 			c.eventRecorder.Eventf(cl.GetReference(), v1.EventTypeWarning, "Create", "%v", cl.Error) | ||||
| 
 | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		if err := cl.Create(); err != nil { | ||||
| 			cl.Error = fmt.Sprintf("could not create cluster: %v", err) | ||||
| 			lg.Error(cl.Error) | ||||
|  | @ -422,16 +429,10 @@ func (c *Controller) queueClusterEvent(informerOldSpec, informerNewSpec *acidv1. | |||
| 		clusterError = informerNewSpec.Error | ||||
| 	} | ||||
| 
 | ||||
| 	workerID := c.clusterWorkerID(clusterName) | ||||
| 	lg := c.logger.WithField("worker", workerID).WithField("cluster-name", clusterName) | ||||
| 
 | ||||
| 	if clusterError != "" && eventType != EventDelete { | ||||
| 		lg.Errorf("skipping %q event for the invalid cluster: %s", eventType, clusterError) | ||||
| 		ref, err := reference.GetReference(scheme.Scheme, informerNewSpec) | ||||
| 		if err != nil { | ||||
| 			lg.Errorf("could not get reference for Postgresql CR %v/%v: %v", informerNewSpec.Namespace, informerNewSpec.Name, err) | ||||
| 		} | ||||
| 		c.eventRecorder.Eventf(ref, v1.EventTypeWarning, strings.Title(strings.ToLower(string(eventType))), "%v", clusterError) | ||||
| 	if clusterError != "" && eventType != EventDelete && eventType != EventAdd { | ||||
| 		c.logger. | ||||
| 			WithField("cluster-name", clusterName). | ||||
| 			Debugf("skipping %q event for the invalid cluster: %s", eventType, clusterError) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
|  | @ -439,6 +440,7 @@ func (c *Controller) queueClusterEvent(informerOldSpec, informerNewSpec *acidv1. | |||
| 	// in the informer internal state, making it incoherent with the actual Kubernetes object (and, as a side
 | ||||
| 	// effect, the modified state will be returned together with subsequent events).
 | ||||
| 
 | ||||
| 	workerID := c.clusterWorkerID(clusterName) | ||||
| 	clusterEvent := ClusterEvent{ | ||||
| 		EventTime: time.Now(), | ||||
| 		EventType: eventType, | ||||
|  | @ -448,6 +450,7 @@ func (c *Controller) queueClusterEvent(informerOldSpec, informerNewSpec *acidv1. | |||
| 		WorkerID:  workerID, | ||||
| 	} | ||||
| 
 | ||||
| 	lg := c.logger.WithField("worker", workerID).WithField("cluster-name", clusterName) | ||||
| 	if err := c.clusterEventQueues[workerID].Add(clusterEvent); err != nil { | ||||
| 		lg.Errorf("error while queueing cluster event: %v", clusterEvent) | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue