Pooler sync fix (#1811)
* always sync pooler objects * do not capitalize log messages in Go * stretch pooler e2e test
This commit is contained in:
		
							parent
							
								
									69254abeba
								
							
						
					
					
						commit
						6ba05fee22
					
				|  | @ -479,8 +479,6 @@ class EndToEndTestCase(unittest.TestCase): | ||||||
|                 'spec': { |                 'spec': { | ||||||
|                     'enableConnectionPooler': True, |                     'enableConnectionPooler': True, | ||||||
|                     'enableReplicaConnectionPooler': True, |                     'enableReplicaConnectionPooler': True, | ||||||
|                     'enableMasterPoolerLoadBalancer': True, |  | ||||||
|                     'enableReplicaPoolerLoadBalancer': True, |  | ||||||
|                 } |                 } | ||||||
|             }) |             }) | ||||||
|         self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync") |         self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync") | ||||||
|  | @ -490,6 +488,17 @@ class EndToEndTestCase(unittest.TestCase): | ||||||
|         self.eventuallyEqual(lambda: k8s.count_running_pods(replica_pooler_label), 2, "No pooler replica pods found") |         self.eventuallyEqual(lambda: k8s.count_running_pods(replica_pooler_label), 2, "No pooler replica pods found") | ||||||
|         self.eventuallyEqual(lambda: k8s.count_services_with_label(pooler_label), 2, "No pooler service found") |         self.eventuallyEqual(lambda: k8s.count_services_with_label(pooler_label), 2, "No pooler service found") | ||||||
|         self.eventuallyEqual(lambda: k8s.count_secrets_with_label(pooler_label), 1, "Pooler secret not created") |         self.eventuallyEqual(lambda: k8s.count_secrets_with_label(pooler_label), 1, "Pooler secret not created") | ||||||
|  | 
 | ||||||
|  |         k8s.api.custom_objects_api.patch_namespaced_custom_object( | ||||||
|  |             'acid.zalan.do', 'v1', 'default', | ||||||
|  |             'postgresqls', 'acid-minimal-cluster', | ||||||
|  |             { | ||||||
|  |                 'spec': { | ||||||
|  |                     'enableMasterPoolerLoadBalancer': True, | ||||||
|  |                     'enableReplicaPoolerLoadBalancer': True, | ||||||
|  |                 } | ||||||
|  |             }) | ||||||
|  |         self.eventuallyEqual(lambda: k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync") | ||||||
|         self.eventuallyEqual(lambda: k8s.get_service_type(master_pooler_label+","+pooler_label), |         self.eventuallyEqual(lambda: k8s.get_service_type(master_pooler_label+","+pooler_label), | ||||||
|                              'LoadBalancer', |                              'LoadBalancer', | ||||||
|                              "Expected LoadBalancer service type for master pooler pod, found {}") |                              "Expected LoadBalancer service type for master pooler pod, found {}") | ||||||
|  |  | ||||||
|  | @ -3,7 +3,6 @@ package cluster | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"reflect" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 
 | ||||||
| 	"github.com/r3labs/diff" | 	"github.com/r3labs/diff" | ||||||
|  | @ -344,7 +343,7 @@ func (c *Cluster) generateConnectionPoolerDeployment(connectionPooler *Connectio | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if *numberOfInstances < constants.ConnectionPoolerMinInstances { | 	if *numberOfInstances < constants.ConnectionPoolerMinInstances { | ||||||
| 		msg := "Adjusted number of connection pooler instances from %d to %d" | 		msg := "adjusted number of connection pooler instances from %d to %d" | ||||||
| 		c.logger.Warningf(msg, *numberOfInstances, constants.ConnectionPoolerMinInstances) | 		c.logger.Warningf(msg, *numberOfInstances, constants.ConnectionPoolerMinInstances) | ||||||
| 
 | 
 | ||||||
| 		*numberOfInstances = constants.ConnectionPoolerMinInstances | 		*numberOfInstances = constants.ConnectionPoolerMinInstances | ||||||
|  | @ -614,7 +613,7 @@ func (c *Cluster) needSyncConnectionPoolerDefaults(Config *Config, spec *acidv1. | ||||||
| 		*deployment.Spec.Replicas != *config.NumberOfInstances { | 		*deployment.Spec.Replicas != *config.NumberOfInstances { | ||||||
| 
 | 
 | ||||||
| 		sync = true | 		sync = true | ||||||
| 		msg := fmt.Sprintf("NumberOfInstances is different (having %d, required %d)", | 		msg := fmt.Sprintf("numberOfInstances is different (having %d, required %d)", | ||||||
| 			*deployment.Spec.Replicas, *config.NumberOfInstances) | 			*deployment.Spec.Replicas, *config.NumberOfInstances) | ||||||
| 		reasons = append(reasons, msg) | 		reasons = append(reasons, msg) | ||||||
| 	} | 	} | ||||||
|  | @ -623,7 +622,7 @@ func (c *Cluster) needSyncConnectionPoolerDefaults(Config *Config, spec *acidv1. | ||||||
| 		poolerContainer.Image != config.Image { | 		poolerContainer.Image != config.Image { | ||||||
| 
 | 
 | ||||||
| 		sync = true | 		sync = true | ||||||
| 		msg := fmt.Sprintf("DockerImage is different (having %s, required %s)", | 		msg := fmt.Sprintf("dockerImage is different (having %s, required %s)", | ||||||
| 			poolerContainer.Image, config.Image) | 			poolerContainer.Image, config.Image) | ||||||
| 		reasons = append(reasons, msg) | 		reasons = append(reasons, msg) | ||||||
| 	} | 	} | ||||||
|  | @ -637,7 +636,7 @@ func (c *Cluster) needSyncConnectionPoolerDefaults(Config *Config, spec *acidv1. | ||||||
| 	// updates for new resource values).
 | 	// updates for new resource values).
 | ||||||
| 	if err == nil && syncResources(&poolerContainer.Resources, expectedResources) { | 	if err == nil && syncResources(&poolerContainer.Resources, expectedResources) { | ||||||
| 		sync = true | 		sync = true | ||||||
| 		msg := fmt.Sprintf("Resources are different (having %+v, required %+v)", | 		msg := fmt.Sprintf("resources are different (having %+v, required %+v)", | ||||||
| 			poolerContainer.Resources, expectedResources) | 			poolerContainer.Resources, expectedResources) | ||||||
| 		reasons = append(reasons, msg) | 		reasons = append(reasons, msg) | ||||||
| 	} | 	} | ||||||
|  | @ -722,29 +721,6 @@ func (c *Cluster) syncConnectionPooler(oldSpec, newSpec *acidv1.Postgresql, Look | ||||||
| 	var err error | 	var err error | ||||||
| 	var connectionPoolerNeeded bool | 	var connectionPoolerNeeded bool | ||||||
| 
 | 
 | ||||||
| 	needSync := !reflect.DeepEqual(oldSpec.Spec.ConnectionPooler, newSpec.Spec.ConnectionPooler) |  | ||||||
| 	masterChanges, err := diff.Diff(oldSpec.Spec.EnableConnectionPooler, newSpec.Spec.EnableConnectionPooler) |  | ||||||
| 	if err != nil { |  | ||||||
| 		c.logger.Error("Error in getting diff of master connection pooler changes") |  | ||||||
| 	} |  | ||||||
| 	replicaChanges, err := diff.Diff(oldSpec.Spec.EnableReplicaConnectionPooler, newSpec.Spec.EnableReplicaConnectionPooler) |  | ||||||
| 	if err != nil { |  | ||||||
| 		c.logger.Error("Error in getting diff of replica connection pooler changes") |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// skip pooler sync when theres no diff or it's deactivated
 |  | ||||||
| 	// but, handling the case when connectionPooler is not there but it is required
 |  | ||||||
| 	// as per spec, hence do not skip syncing in that case, even though there
 |  | ||||||
| 	// is no diff in specs
 |  | ||||||
| 	if (!needSync && len(masterChanges) <= 0 && len(replicaChanges) <= 0) && |  | ||||||
| 		((!needConnectionPooler(&newSpec.Spec) && (c.ConnectionPooler == nil || !needConnectionPooler(&oldSpec.Spec))) || |  | ||||||
| 			(c.ConnectionPooler != nil && needConnectionPooler(&newSpec.Spec) && |  | ||||||
| 				((c.ConnectionPooler[Master] != nil && c.ConnectionPooler[Master].LookupFunction) || |  | ||||||
| 					(c.ConnectionPooler[Replica] != nil && c.ConnectionPooler[Replica].LookupFunction)))) { |  | ||||||
| 		c.logger.Debugln("syncing pooler is not required") |  | ||||||
| 		return nil, nil |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	logPoolerEssentials(c.logger, oldSpec, newSpec) | 	logPoolerEssentials(c.logger, oldSpec, newSpec) | ||||||
| 
 | 
 | ||||||
| 	// Check and perform the sync requirements for each of the roles.
 | 	// Check and perform the sync requirements for each of the roles.
 | ||||||
|  | @ -781,7 +757,8 @@ func (c *Cluster) syncConnectionPooler(oldSpec, newSpec *acidv1.Postgresql, Look | ||||||
| 			// in between
 | 			// in between
 | ||||||
| 
 | 
 | ||||||
| 			// in this case also do not forget to install lookup function
 | 			// in this case also do not forget to install lookup function
 | ||||||
| 			if !c.ConnectionPooler[role].LookupFunction { | 			// skip installation in standby clusters, since they are read-only
 | ||||||
|  | 			if !c.ConnectionPooler[role].LookupFunction && c.Spec.StandbyCluster == nil { | ||||||
| 				connectionPooler := c.Spec.ConnectionPooler | 				connectionPooler := c.Spec.ConnectionPooler | ||||||
| 				specSchema := "" | 				specSchema := "" | ||||||
| 				specUser := "" | 				specUser := "" | ||||||
|  | @ -838,32 +815,37 @@ func (c *Cluster) syncConnectionPooler(oldSpec, newSpec *acidv1.Postgresql, Look | ||||||
| func (c *Cluster) syncConnectionPoolerWorker(oldSpec, newSpec *acidv1.Postgresql, role PostgresRole) ( | func (c *Cluster) syncConnectionPoolerWorker(oldSpec, newSpec *acidv1.Postgresql, role PostgresRole) ( | ||||||
| 	SyncReason, error) { | 	SyncReason, error) { | ||||||
| 
 | 
 | ||||||
|  | 	var ( | ||||||
|  | 		deployment    *appsv1.Deployment | ||||||
|  | 		newDeployment *appsv1.Deployment | ||||||
|  | 		service       *v1.Service | ||||||
|  | 		newService    *v1.Service | ||||||
|  | 		err           error | ||||||
|  | 	) | ||||||
|  | 
 | ||||||
| 	syncReason := make([]string, 0) | 	syncReason := make([]string, 0) | ||||||
| 	deployment, err := c.KubeClient. | 	deployment, err = c.KubeClient. | ||||||
| 		Deployments(c.Namespace). | 		Deployments(c.Namespace). | ||||||
| 		Get(context.TODO(), c.connectionPoolerName(role), metav1.GetOptions{}) | 		Get(context.TODO(), c.connectionPoolerName(role), metav1.GetOptions{}) | ||||||
| 
 | 
 | ||||||
| 	if err != nil && k8sutil.ResourceNotFound(err) { | 	if err != nil && k8sutil.ResourceNotFound(err) { | ||||||
| 		msg := "deployment %s for connection pooler synchronization is not found, create it" | 		c.logger.Warningf("deployment %s for connection pooler synchronization is not found, create it", c.connectionPoolerName(role)) | ||||||
| 		c.logger.Warningf(msg, c.connectionPoolerName(role)) |  | ||||||
| 
 | 
 | ||||||
| 		deploymentSpec, err := c.generateConnectionPoolerDeployment(c.ConnectionPooler[role]) | 		newDeployment, err = c.generateConnectionPoolerDeployment(c.ConnectionPooler[role]) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			msg = "could not generate deployment for connection pooler: %v" | 			return NoSync, fmt.Errorf("could not generate deployment for connection pooler: %v", err) | ||||||
| 			return NoSync, fmt.Errorf(msg, err) |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		deployment, err := c.KubeClient. | 		deployment, err = c.KubeClient. | ||||||
| 			Deployments(deploymentSpec.Namespace). | 			Deployments(newDeployment.Namespace). | ||||||
| 			Create(context.TODO(), deploymentSpec, metav1.CreateOptions{}) | 			Create(context.TODO(), newDeployment, metav1.CreateOptions{}) | ||||||
| 
 | 
 | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return NoSync, err | 			return NoSync, err | ||||||
| 		} | 		} | ||||||
| 		c.ConnectionPooler[role].Deployment = deployment | 		c.ConnectionPooler[role].Deployment = deployment | ||||||
| 	} else if err != nil { | 	} else if err != nil { | ||||||
| 		msg := "could not get connection pooler deployment to sync: %v" | 		return NoSync, fmt.Errorf("could not get connection pooler deployment to sync: %v", err) | ||||||
| 		return NoSync, fmt.Errorf(msg, err) |  | ||||||
| 	} else { | 	} else { | ||||||
| 		c.ConnectionPooler[role].Deployment = deployment | 		c.ConnectionPooler[role].Deployment = deployment | ||||||
| 		// actual synchronization
 | 		// actual synchronization
 | ||||||
|  | @ -900,16 +882,14 @@ func (c *Cluster) syncConnectionPoolerWorker(oldSpec, newSpec *acidv1.Postgresql | ||||||
| 		syncReason = append(syncReason, defaultsReason...) | 		syncReason = append(syncReason, defaultsReason...) | ||||||
| 
 | 
 | ||||||
| 		if specSync || defaultsSync { | 		if specSync || defaultsSync { | ||||||
| 			c.logger.Infof("Update connection pooler deployment %s, reason: %+v", | 			c.logger.Infof("update connection pooler deployment %s, reason: %+v", | ||||||
| 				c.connectionPoolerName(role), syncReason) | 				c.connectionPoolerName(role), syncReason) | ||||||
| 			newDeploymentSpec, err := c.generateConnectionPoolerDeployment(c.ConnectionPooler[role]) | 			newDeployment, err = c.generateConnectionPoolerDeployment(c.ConnectionPooler[role]) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				msg := "could not generate deployment for connection pooler: %v" | 				return syncReason, fmt.Errorf("could not generate deployment for connection pooler: %v", err) | ||||||
| 				return syncReason, fmt.Errorf(msg, err) |  | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			deployment, err := updateConnectionPoolerDeployment(c.KubeClient, | 			deployment, err = updateConnectionPoolerDeployment(c.KubeClient, newDeployment) | ||||||
| 				newDeploymentSpec) |  | ||||||
| 
 | 
 | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return syncReason, err | 				return syncReason, err | ||||||
|  | @ -927,40 +907,38 @@ func (c *Cluster) syncConnectionPoolerWorker(oldSpec, newSpec *acidv1.Postgresql | ||||||
| 		c.ConnectionPooler[role].Deployment = deployment | 		c.ConnectionPooler[role].Deployment = deployment | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if svc, err := c.KubeClient.Services(c.Namespace).Get(context.TODO(), c.connectionPoolerName(role), metav1.GetOptions{}); err == nil { | 	if service, err = c.KubeClient.Services(c.Namespace).Get(context.TODO(), c.connectionPoolerName(role), metav1.GetOptions{}); err == nil { | ||||||
| 		c.ConnectionPooler[role].Service = svc | 		c.ConnectionPooler[role].Service = service | ||||||
| 		desiredSvc := c.generateConnectionPoolerService(c.ConnectionPooler[role]) | 		desiredSvc := c.generateConnectionPoolerService(c.ConnectionPooler[role]) | ||||||
| 		if match, reason := k8sutil.SameService(svc, desiredSvc); !match { | 		if match, reason := k8sutil.SameService(service, desiredSvc); !match { | ||||||
| 			syncReason = append(syncReason, reason) | 			syncReason = append(syncReason, reason) | ||||||
| 			c.logServiceChanges(role, svc, desiredSvc, false, reason) | 			c.logServiceChanges(role, service, desiredSvc, false, reason) | ||||||
| 			updatedService, err := c.updateService(role, svc, desiredSvc) | 			newService, err = c.updateService(role, service, desiredSvc) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return syncReason, fmt.Errorf("could not update %s service to match desired state: %v", role, err) | 				return syncReason, fmt.Errorf("could not update %s service to match desired state: %v", role, err) | ||||||
| 			} | 			} | ||||||
| 			c.ConnectionPooler[role].Service = updatedService | 			c.ConnectionPooler[role].Service = newService | ||||||
| 			c.logger.Infof("%s service %q is in the desired state now", role, util.NameFromMeta(desiredSvc.ObjectMeta)) | 			c.logger.Infof("%s service %q is in the desired state now", role, util.NameFromMeta(desiredSvc.ObjectMeta)) | ||||||
| 		} | 		} | ||||||
| 		return NoSync, nil | 		return NoSync, nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if !k8sutil.ResourceNotFound(err) { | 	if !k8sutil.ResourceNotFound(err) { | ||||||
| 		msg := "could not get connection pooler service to sync: %v" | 		return NoSync, fmt.Errorf("could not get connection pooler service to sync: %v", err) | ||||||
| 		return NoSync, fmt.Errorf(msg, err) |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	c.ConnectionPooler[role].Service = nil | 	c.ConnectionPooler[role].Service = nil | ||||||
| 	msg := "Service %s for connection pooler synchronization is not found, create it" | 	c.logger.Warningf("service %s for connection pooler synchronization is not found, create it", c.connectionPoolerName(role)) | ||||||
| 	c.logger.Warningf(msg, c.connectionPoolerName(role)) |  | ||||||
| 
 | 
 | ||||||
| 	serviceSpec := c.generateConnectionPoolerService(c.ConnectionPooler[role]) | 	serviceSpec := c.generateConnectionPoolerService(c.ConnectionPooler[role]) | ||||||
| 	service, err := c.KubeClient. | 	newService, err = c.KubeClient. | ||||||
| 		Services(serviceSpec.Namespace). | 		Services(serviceSpec.Namespace). | ||||||
| 		Create(context.TODO(), serviceSpec, metav1.CreateOptions{}) | 		Create(context.TODO(), serviceSpec, metav1.CreateOptions{}) | ||||||
| 
 | 
 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return NoSync, err | 		return NoSync, err | ||||||
| 	} | 	} | ||||||
| 	c.ConnectionPooler[role].Service = service | 	c.ConnectionPooler[role].Service = newService | ||||||
| 
 | 
 | ||||||
| 	return NoSync, nil | 	return NoSync, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1100,7 +1100,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef | ||||||
| 
 | 
 | ||||||
| 	// backward compatible check for InitContainers
 | 	// backward compatible check for InitContainers
 | ||||||
| 	if spec.InitContainersOld != nil { | 	if spec.InitContainersOld != nil { | ||||||
| 		msg := "Manifest parameter init_containers is deprecated." | 		msg := "manifest parameter init_containers is deprecated." | ||||||
| 		if spec.InitContainers == nil { | 		if spec.InitContainers == nil { | ||||||
| 			c.logger.Warningf("%s Consider using initContainers instead.", msg) | 			c.logger.Warningf("%s Consider using initContainers instead.", msg) | ||||||
| 			spec.InitContainers = spec.InitContainersOld | 			spec.InitContainers = spec.InitContainersOld | ||||||
|  | @ -1111,7 +1111,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef | ||||||
| 
 | 
 | ||||||
| 	// backward compatible check for PodPriorityClassName
 | 	// backward compatible check for PodPriorityClassName
 | ||||||
| 	if spec.PodPriorityClassNameOld != "" { | 	if spec.PodPriorityClassNameOld != "" { | ||||||
| 		msg := "Manifest parameter pod_priority_class_name is deprecated." | 		msg := "manifest parameter pod_priority_class_name is deprecated." | ||||||
| 		if spec.PodPriorityClassName == "" { | 		if spec.PodPriorityClassName == "" { | ||||||
| 			c.logger.Warningf("%s Consider using podPriorityClassName instead.", msg) | 			c.logger.Warningf("%s Consider using podPriorityClassName instead.", msg) | ||||||
| 			spec.PodPriorityClassName = spec.PodPriorityClassNameOld | 			spec.PodPriorityClassName = spec.PodPriorityClassNameOld | ||||||
|  | @ -1504,13 +1504,13 @@ func (c *Cluster) addAdditionalVolumes(podSpec *v1.PodSpec, | ||||||
| 	mountPaths := map[string]acidv1.AdditionalVolume{} | 	mountPaths := map[string]acidv1.AdditionalVolume{} | ||||||
| 	for i, additionalVolume := range additionalVolumes { | 	for i, additionalVolume := range additionalVolumes { | ||||||
| 		if previousVolume, exist := mountPaths[additionalVolume.MountPath]; exist { | 		if previousVolume, exist := mountPaths[additionalVolume.MountPath]; exist { | ||||||
| 			msg := "Volume %+v cannot be mounted to the same path as %+v" | 			msg := "volume %+v cannot be mounted to the same path as %+v" | ||||||
| 			c.logger.Warningf(msg, additionalVolume, previousVolume) | 			c.logger.Warningf(msg, additionalVolume, previousVolume) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if additionalVolume.MountPath == constants.PostgresDataMount { | 		if additionalVolume.MountPath == constants.PostgresDataMount { | ||||||
| 			msg := "Cannot mount volume on postgresql data directory, %+v" | 			msg := "cannot mount volume on postgresql data directory, %+v" | ||||||
| 			c.logger.Warningf(msg, additionalVolume) | 			c.logger.Warningf(msg, additionalVolume) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  | @ -1523,7 +1523,7 @@ func (c *Cluster) addAdditionalVolumes(podSpec *v1.PodSpec, | ||||||
| 
 | 
 | ||||||
| 		for _, target := range additionalVolume.TargetContainers { | 		for _, target := range additionalVolume.TargetContainers { | ||||||
| 			if target == "all" && len(additionalVolume.TargetContainers) != 1 { | 			if target == "all" && len(additionalVolume.TargetContainers) != 1 { | ||||||
| 				msg := `Target containers could be either "all" or a list | 				msg := `target containers could be either "all" or a list | ||||||
| 						of containers, mixing those is not allowed, %+v` | 						of containers, mixing those is not allowed, %+v` | ||||||
| 				c.logger.Warningf(msg, additionalVolume) | 				c.logger.Warningf(msg, additionalVolume) | ||||||
| 				continue | 				continue | ||||||
|  | @ -1813,11 +1813,11 @@ func (c *Cluster) generateCloneEnvironment(description *acidv1.CloneDescription) | ||||||
| 			}) | 			}) | ||||||
| 	} else { | 	} else { | ||||||
| 		// cloning with S3, find out the bucket to clone
 | 		// cloning with S3, find out the bucket to clone
 | ||||||
| 		msg := "Clone from S3 bucket" | 		msg := "clone from S3 bucket" | ||||||
| 		c.logger.Info(msg, description.S3WalPath) | 		c.logger.Info(msg, description.S3WalPath) | ||||||
| 
 | 
 | ||||||
| 		if description.S3WalPath == "" { | 		if description.S3WalPath == "" { | ||||||
| 			msg := "Figure out which S3 bucket to use from env" | 			msg := "figure out which S3 bucket to use from env" | ||||||
| 			c.logger.Info(msg, description.S3WalPath) | 			c.logger.Info(msg, description.S3WalPath) | ||||||
| 
 | 
 | ||||||
| 			if c.OpConfig.WALES3Bucket != "" { | 			if c.OpConfig.WALES3Bucket != "" { | ||||||
|  | @ -1861,7 +1861,7 @@ func (c *Cluster) generateCloneEnvironment(description *acidv1.CloneDescription) | ||||||
| 
 | 
 | ||||||
| 			result = append(result, envs...) | 			result = append(result, envs...) | ||||||
| 		} else { | 		} else { | ||||||
| 			msg := "Use custom parsed S3WalPath %s from the manifest" | 			msg := "use custom parsed S3WalPath %s from the manifest" | ||||||
| 			c.logger.Warningf(msg, description.S3WalPath) | 			c.logger.Warningf(msg, description.S3WalPath) | ||||||
| 
 | 
 | ||||||
| 			result = append(result, v1.EnvVar{ | 			result = append(result, v1.EnvVar{ | ||||||
|  | @ -1910,7 +1910,7 @@ func (c *Cluster) generateStandbyEnvironment(description *acidv1.StandbyDescript | ||||||
| 
 | 
 | ||||||
| 	if description.S3WalPath != "" { | 	if description.S3WalPath != "" { | ||||||
| 		// standby with S3, find out the bucket to setup standby
 | 		// standby with S3, find out the bucket to setup standby
 | ||||||
| 		msg := "Standby from S3 bucket using custom parsed S3WalPath from the manifest %s " | 		msg := "standby from S3 bucket using custom parsed S3WalPath from the manifest %s " | ||||||
| 		c.logger.Infof(msg, description.S3WalPath) | 		c.logger.Infof(msg, description.S3WalPath) | ||||||
| 
 | 
 | ||||||
| 		result = append(result, v1.EnvVar{ | 		result = append(result, v1.EnvVar{ | ||||||
|  | @ -1918,7 +1918,7 @@ func (c *Cluster) generateStandbyEnvironment(description *acidv1.StandbyDescript | ||||||
| 			Value: description.S3WalPath, | 			Value: description.S3WalPath, | ||||||
| 		}) | 		}) | ||||||
| 	} else if description.GSWalPath != "" { | 	} else if description.GSWalPath != "" { | ||||||
| 		msg := "Standby from GS bucket using custom parsed GSWalPath from the manifest %s " | 		msg := "standby from GS bucket using custom parsed GSWalPath from the manifest %s " | ||||||
| 		c.logger.Infof(msg, description.GSWalPath) | 		c.logger.Infof(msg, description.GSWalPath) | ||||||
| 
 | 
 | ||||||
| 		envs := []v1.EnvVar{ | 		envs := []v1.EnvVar{ | ||||||
|  |  | ||||||
|  | @ -228,7 +228,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 		constants.ConnectionPoolerUserName) | 		constants.ConnectionPoolerUserName) | ||||||
| 
 | 
 | ||||||
| 	if result.ConnectionPooler.User == result.SuperUsername { | 	if result.ConnectionPooler.User == result.SuperUsername { | ||||||
| 		msg := "Connection pool user is not allowed to be the same as super user, username: %s" | 		msg := "connection pool user is not allowed to be the same as super user, username: %s" | ||||||
| 		panic(fmt.Errorf(msg, result.ConnectionPooler.User)) | 		panic(fmt.Errorf(msg, result.ConnectionPooler.User)) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -292,7 +292,7 @@ func validate(cfg *Config) (err error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if cfg.ConnectionPooler.User == cfg.SuperUsername { | 	if cfg.ConnectionPooler.User == cfg.SuperUsername { | ||||||
| 		msg := "Connection pool user is not allowed to be the same as super user, username: %s" | 		msg := "connection pool user is not allowed to be the same as super user, username: %s" | ||||||
| 		err = fmt.Errorf(msg, cfg.ConnectionPooler.User) | 		err = fmt.Errorf(msg, cfg.ConnectionPooler.User) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue