add e2e test and pas switchover targets to recreatePods

This commit is contained in:
Felix Kunde
2021-02-05 09:00:13 +01:00
parent f69a1e0245
commit b892dc49b8
5 changed files with 54 additions and 14 deletions
+4 -5
View File
@@ -373,15 +373,14 @@ func (c *Cluster) isSafeToRecreatePods(pods []v1.Pod) bool {
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 i, pod := range pods {
for _, pod := range pods {
c.logger.Debugf("name=%s phase=%s ip=%s", pod.Name, pod.Status.Phase, pod.Status.PodIP)
var state string
err := retryutil.Retry(1*time.Second, 5*time.Second,
func() (bool, error) {
var err error
state, err = c.patroni.GetPatroniMemberState(&pods[i])
state, err = c.patroni.GetPatroniMemberState(&pod)
if err != nil {
return false, err
}
@@ -400,7 +399,7 @@ func (c *Cluster) isSafeToRecreatePods(pods []v1.Pod) bool {
return true
}
func (c *Cluster) recreatePods(pods []v1.Pod) error {
func (c *Cluster) recreatePods(pods []v1.Pod, switchoverCandidates []spec.NamespacedName) error {
c.setProcessName("starting to recreate pods")
c.logger.Infof("there are %d pods in the cluster to recreate", len(pods))
@@ -411,7 +410,7 @@ func (c *Cluster) recreatePods(pods []v1.Pod) error {
var (
masterPod, newMasterPod *v1.Pod
)
replicas := make([]spec.NamespacedName, 0)
replicas := switchoverCandidates
for i, pod := range pods {
role := PostgresRole(pod.Labels[c.OpConfig.PodRoleLabel])
+8 -2
View File
@@ -277,7 +277,9 @@ func (c *Cluster) mustUpdatePodsAfterLazyUpdate(desiredSset *appsv1.StatefulSet)
}
func (c *Cluster) syncStatefulSet() error {
var podsToRecreate []v1.Pod
podsToRecreate := make([]v1.Pod, 0)
switchoverCandidates := make([]spec.NamespacedName, 0)
pods, err := c.listPods()
if err != nil {
@@ -318,6 +320,8 @@ func (c *Cluster) syncStatefulSet() error {
for _, pod := range pods {
if c.getRollingUpdateFlagFromPod(&pod) {
podsToRecreate = append(podsToRecreate, pod)
} else {
switchoverCandidates = append(switchoverCandidates, util.NameFromMeta(pod.ObjectMeta))
}
}
@@ -376,6 +380,8 @@ func (c *Cluster) syncStatefulSet() error {
c.logger.Warnf("updating rolling update flag failed for pod %q: %v", pod.Name, err)
}
podsToRecreate = append(podsToRecreate, pod)
} else {
switchoverCandidates = append(switchoverCandidates, util.NameFromMeta(pod.ObjectMeta))
}
}
}
@@ -393,7 +399,7 @@ func (c *Cluster) syncStatefulSet() error {
if len(podsToRecreate) > 0 {
c.logger.Debugln("performing rolling update")
c.eventRecorder.Event(c.GetReference(), v1.EventTypeNormal, "Update", "Performing rolling update")
if err := c.recreatePods(podsToRecreate); err != nil {
if err := c.recreatePods(podsToRecreate, switchoverCandidates); err != nil {
return fmt.Errorf("could not recreate pods: %v", err)
}
c.eventRecorder.Event(c.GetReference(), v1.EventTypeNormal, "Update", "Rolling update done - pods have been recreated")