wait only after restart not every sync
This commit is contained in:
parent
0b32b42f0b
commit
4174cd6639
|
|
@ -273,10 +273,9 @@ func (c *Cluster) syncPodDisruptionBudget(isUpdate bool) error {
|
||||||
|
|
||||||
func (c *Cluster) syncStatefulSet() error {
|
func (c *Cluster) syncStatefulSet() error {
|
||||||
var (
|
var (
|
||||||
restartTTL uint32
|
restartWait uint32
|
||||||
restartMasterFirst bool
|
restartMasterFirst bool
|
||||||
)
|
)
|
||||||
|
|
||||||
podsToRecreate := make([]v1.Pod, 0)
|
podsToRecreate := make([]v1.Pod, 0)
|
||||||
switchoverCandidates := make([]spec.NamespacedName, 0)
|
switchoverCandidates := make([]spec.NamespacedName, 0)
|
||||||
|
|
||||||
|
|
@ -410,6 +409,7 @@ func (c *Cluster) syncStatefulSet() error {
|
||||||
c.logger.Warningf("could not get Postgres config from pod %s: %v", podName, err)
|
c.logger.Warningf("could not get Postgres config from pod %s: %v", podName, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
restartWait = patroniConfig.LoopWait
|
||||||
|
|
||||||
// empty config probably means cluster is not fully initialized yet, e.g. restoring from backup
|
// empty config probably means cluster is not fully initialized yet, e.g. restoring from backup
|
||||||
// do not attempt a restart
|
// do not attempt a restart
|
||||||
|
|
@ -420,8 +420,7 @@ func (c *Cluster) syncStatefulSet() error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// it could take up to LoopWait to apply the config
|
// it could take up to LoopWait to apply the config
|
||||||
time.Sleep(time.Duration(patroniConfig.LoopWait)*time.Second + time.Second*2)
|
time.Sleep(time.Duration(restartWait)*time.Second + time.Second*2)
|
||||||
restartTTL = patroniConfig.TTL
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -438,19 +437,13 @@ func (c *Cluster) syncStatefulSet() error {
|
||||||
remainingPods = append(remainingPods, &pods[i])
|
remainingPods = append(remainingPods, &pods[i])
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
c.restartInstance(&pod)
|
c.restartInstance(&pod, restartWait)
|
||||||
if len(pods) > 1 {
|
|
||||||
time.Sleep(time.Duration(restartTTL) * time.Second)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// in most cases only the master should be left to restart
|
// in most cases only the master should be left to restart
|
||||||
if len(remainingPods) > 0 {
|
if len(remainingPods) > 0 {
|
||||||
for _, remainingPod := range remainingPods {
|
for _, remainingPod := range remainingPods {
|
||||||
c.restartInstance(remainingPod)
|
c.restartInstance(remainingPod, restartWait)
|
||||||
if len(remainingPods) > 1 {
|
|
||||||
time.Sleep(time.Duration(restartTTL) * time.Second)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -467,7 +460,7 @@ func (c *Cluster) syncStatefulSet() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cluster) restartInstance(pod *v1.Pod) {
|
func (c *Cluster) restartInstance(pod *v1.Pod, restartWait uint32) {
|
||||||
podName := util.NameFromMeta(pod.ObjectMeta)
|
podName := util.NameFromMeta(pod.ObjectMeta)
|
||||||
role := PostgresRole(pod.Labels[c.OpConfig.PodRoleLabel])
|
role := PostgresRole(pod.Labels[c.OpConfig.PodRoleLabel])
|
||||||
|
|
||||||
|
|
@ -485,6 +478,7 @@ func (c *Cluster) restartInstance(pod *v1.Pod) {
|
||||||
c.logger.Warningf("could not restart Postgres server within %s pod %s: %v", role, podName, err)
|
c.logger.Warningf("could not restart Postgres server within %s pod %s: %v", role, podName, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
time.Sleep(time.Duration(restartWait) * time.Second)
|
||||||
c.eventRecorder.Event(c.GetReference(), v1.EventTypeNormal, "Update", fmt.Sprintf("Postgres server restart done for %s pod %s", role, pod.Name))
|
c.eventRecorder.Event(c.GetReference(), v1.EventTypeNormal, "Update", fmt.Sprintf("Postgres server restart done for %s pod %s", role, pod.Name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue