refactor into single method
This commit is contained in:
		
							parent
							
								
									1182c17963
								
							
						
					
					
						commit
						38417b589b
					
				|  | @ -9,7 +9,6 @@ import ( | |||
| 	"fmt" | ||||
| 	"reflect" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| 
 | ||||
|  | @ -680,24 +679,7 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { | |||
| 	}() | ||||
| 
 | ||||
| 	if c.OpConfig.EnableUnusedPVCDeletion && oldSpec.Spec.NumberOfInstances > newSpec.Spec.NumberOfInstances { | ||||
| 		c.logger.Debug("deleting pvc of shut down pods") | ||||
| 
 | ||||
| 		for i := oldSpec.Spec.NumberOfInstances - 1; i >= newSpec.Spec.NumberOfInstances; i-- { | ||||
| 
 | ||||
| 			// Scaling down to 0 replicas is not cluster deletion so keep the last pvc.
 | ||||
| 			// Operator will remove it only when explicit "kubectl pg delete" is issued
 | ||||
| 			if i == 0 { | ||||
| 				c.logger.Info("cluster scaled down to 0 pods; skipping deletion of the last pvc") | ||||
| 				break | ||||
| 			} | ||||
| 
 | ||||
| 			podIndex := strconv.Itoa(int(i)) | ||||
| 			pvcName := "pgdata-" + c.Name + "-" + podIndex | ||||
| 			if err := c.KubeClient.PersistentVolumeClaims(c.Namespace).Delete(context.TODO(), pvcName, c.deleteOptions); err != nil { | ||||
| 				c.logger.Warningf("could not delete PersistentVolumeClaim: %v", err) | ||||
| 				// failing to delete pvc does not fail the update; Sync() may also delete unused PVCs later
 | ||||
| 			} | ||||
| 		} | ||||
| 		c.deleteUnusedPersistentVolumeClaims() | ||||
| 	} | ||||
| 
 | ||||
| 	// pod disruption budget
 | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ package cluster | |||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	batchv1beta1 "k8s.io/api/batch/v1beta1" | ||||
| 	v1 "k8s.io/api/core/v1" | ||||
|  | @ -114,20 +113,7 @@ func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error { | |||
| 	// remove unused PVCs in case deleting them during scale down failed; see Update()
 | ||||
| 	// the last pvc stays until the cluster is explicitly deleted as opposed to being scaled down to 0 pods
 | ||||
| 	if c.OpConfig.EnableUnusedPVCDeletion && c.getNumberOfInstances(&c.Spec) > 0 { | ||||
| 
 | ||||
| 		// XXX that also deletes PVC of pods shut down before this change is deployed
 | ||||
| 		for i := c.getNumberOfInstances(&c.Spec); ; i++ { | ||||
| 			podIndex := strconv.Itoa(int(i)) | ||||
| 			pvcName := "pgdata-" + c.Name + "-" + podIndex | ||||
| 			if err := c.KubeClient.PersistentVolumeClaims(c.Namespace).Delete(context.TODO(), pvcName, c.deleteOptions); err != nil { | ||||
| 				if k8sutil.ResourceNotFound(err) { | ||||
| 					// no more pvcs to delete
 | ||||
| 					break | ||||
| 				} | ||||
| 				c.logger.Warningf("could not delete PersistentVolumeClaim: %v", err) | ||||
| 				// next Sync() or Update() will retry
 | ||||
| 			} | ||||
| 		} | ||||
| 		c.deleteUnusedPersistentVolumeClaims() | ||||
| 	} | ||||
| 
 | ||||
| 	// sync connection pooler
 | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ import ( | |||
| 	"github.com/zalando/postgres-operator/pkg/util" | ||||
| 	"github.com/zalando/postgres-operator/pkg/util/constants" | ||||
| 	"github.com/zalando/postgres-operator/pkg/util/filesystems" | ||||
| 	"github.com/zalando/postgres-operator/pkg/util/k8sutil" | ||||
| 	"github.com/zalando/postgres-operator/pkg/util/volumes" | ||||
| ) | ||||
| 
 | ||||
|  | @ -52,6 +53,33 @@ func (c *Cluster) deletePersistentVolumeClaims() error { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c *Cluster) deleteUnusedPersistentVolumeClaims() { | ||||
| 
 | ||||
| 	c.logger.Debug("deleting pvc of shut down pods") | ||||
| 
 | ||||
| 	// Scaling down to 0 replicas is not cluster deletion so keep the last pvc.
 | ||||
| 	// Operator will remove it only when explicit "kubectl pg delete" is issued
 | ||||
| 	if c.getNumberOfInstances(&c.Spec) == 0 { | ||||
| 		c.logger.Info("cluster scaled down to 0 pods; skipping deletion of the last pvc") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// XXX that also deletes PVC of pods shut down before this change is deployed
 | ||||
| 	for i := c.getNumberOfInstances(&c.Spec); ; i++ { | ||||
| 		podIndex := strconv.Itoa(int(i)) | ||||
| 		pvcName := "pgdata-" + c.Name + "-" + podIndex | ||||
| 		if err := c.KubeClient.PersistentVolumeClaims(c.Namespace).Delete(context.TODO(), pvcName, c.deleteOptions); err != nil { | ||||
| 			if k8sutil.ResourceNotFound(err) { | ||||
| 				// no more pvcs to delete
 | ||||
| 				break | ||||
| 			} | ||||
| 			c.logger.Warningf("could not delete PersistentVolumeClaim: %v", err) | ||||
| 			// next Sync() or Update() will retry
 | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func (c *Cluster) listPersistentVolumes() ([]*v1.PersistentVolume, error) { | ||||
| 	result := make([]*v1.PersistentVolume, 0) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue