add comments
This commit is contained in:
		
							parent
							
								
									8811dfd278
								
							
						
					
					
						commit
						af30a55efa
					
				| 
						 | 
					@ -296,10 +296,18 @@ func (c *Cluster) recreatePod(podName spec.NamespacedName) (*v1.Pod, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Cluster) isSafeToRecreatePods(pods *v1.PodList) bool {
 | 
					func (c *Cluster) isSafeToRecreatePods(pods *v1.PodList) bool {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 Operator should not re-create pods if there is at least one replica being bootstrapped
 | 
				
			||||||
 | 
						 because Patroni might use other replicas to take basebackup from (see Patroni's "clonefrom" tag).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						 XXX operator cannot forbid replica re-init, so we might still fail if re-init is started
 | 
				
			||||||
 | 
						 after this check succeeds but before a pod is re-created
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, pod := range pods.Items {
 | 
						for _, pod := range pods.Items {
 | 
				
			||||||
		state, err := c.patroni.GetNodeState(&pod)
 | 
							state, err := c.patroni.GetNodeState(&pod)
 | 
				
			||||||
		if err != nil || state != "running" {
 | 
							if err != nil || state != "running" {
 | 
				
			||||||
			c.logger.Warningf("cannot re-create pod %s: patroni not in 'running' state", pod.Name)
 | 
								c.logger.Warningf("cannot re-create pod %s: patroni in %s state", pod.Name, state)
 | 
				
			||||||
			return false
 | 
								return false
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -323,7 +331,7 @@ func (c *Cluster) recreatePods() error {
 | 
				
			||||||
	c.logger.Infof("there are %d pods in the cluster to recreate", len(pods.Items))
 | 
						c.logger.Infof("there are %d pods in the cluster to recreate", len(pods.Items))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !c.isSafeToRecreatePods(pods) {
 | 
						if !c.isSafeToRecreatePods(pods) {
 | 
				
			||||||
		return fmt.Errorf("postpone pod recreation until next Sync: some pods are being initilalized and recreation is unsafe")
 | 
							return fmt.Errorf("postpone pod recreation until next Sync: recreation is unsafe because pods are being initilalized")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,18 +38,18 @@ type HttpGetResponse struct {
 | 
				
			||||||
	Timeline                 int    `json:"type,omitempty"`
 | 
						Timeline                 int    `json:"type,omitempty"`
 | 
				
			||||||
	Xlog                     Xlog   `json:"type,omitempty"`
 | 
						Xlog                     Xlog   `json:"type,omitempty"`
 | 
				
			||||||
	DatabaseSystemIdentifier string `json:"type,omitempty"`
 | 
						DatabaseSystemIdentifier string `json:"type,omitempty"`
 | 
				
			||||||
	patroniInfo              Info   `json:"type,omitempty"`
 | 
						PatroniInfo              Info   `json:"type,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Xlog contains wal locaiton
 | 
					// Xlog contains wal locaiton
 | 
				
			||||||
type Xlog struct {
 | 
					type Xlog struct {
 | 
				
			||||||
	location int `json:"type,omitempty"`
 | 
						Location int `json:"type,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Info cotains Patroni version and cluser scope
 | 
					// Info cotains Patroni version and cluser scope
 | 
				
			||||||
type Info struct {
 | 
					type Info struct {
 | 
				
			||||||
	version string `json:"type,omitempty"`
 | 
						Version string `json:"type,omitempty"`
 | 
				
			||||||
	scope   string `json:"type,omitempty"`
 | 
						Scope   string `json:"type,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Patroni API client
 | 
					// Patroni API client
 | 
				
			||||||
| 
						 | 
					@ -170,6 +170,7 @@ func (p *Patroni) GetNodeState(server *v1.Pod) (string, error) {
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return "", fmt.Errorf("could not unmarshal response: %v", err)
 | 
							return "", fmt.Errorf("could not unmarshal response: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						p.logger.Infof("http get response: %s", pResponse)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return pResponse.State, nil
 | 
						return pResponse.State, nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue