Skip to content

Commit cc79146

Browse files
author
jmccormick2001
committed
fix autofail when doing multiple autofails
1 parent e645359 commit cc79146

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

controller/taskcontroller.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ func (c *PgtaskController) onAdd(obj interface{}) {
155155
case crv1.PgtaskBackrestRestore:
156156
log.Info("backrest restore task added")
157157
backrestoperator.Restore(task.ObjectMeta.Namespace, c.PgtaskClientset, task)
158+
case crv1.PgtaskAutoFailover:
159+
log.Infof("autofailover task added %s", task.ObjectMeta.Name)
158160
default:
159161
log.Info("unknown task type on pgtask added")
160162
}

operator/cluster/autofailover.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,10 @@ func (*AutoFailoverTask) Print(restclient *rest.RESTClient, namespace string) {
244244
func (*AutoFailoverTask) Clear(restclient *rest.RESTClient, clusterName, namespace string) {
245245

246246
taskName := clusterName + "-" + util.LABEL_AUTOFAIL
247-
kubeapi.Deletepgtask(restclient, taskName, namespace)
247+
err := kubeapi.Deletepgtask(restclient, taskName, namespace)
248+
if err != nil {
249+
log.Error(err)
250+
}
248251
}
249252

250253
func (*AutoFailoverTask) GetEvents(restclient *rest.RESTClient, clusterName, namespace string) (string, map[string]string) {
@@ -345,7 +348,29 @@ func (s *StateMachine) triggerFailover() {
345348

346349
spec := crv1.PgtaskSpec{}
347350
spec.Name = s.ClusterName + "-" + util.LABEL_FAILOVER
348-
kubeapi.Deletepgtask(s.RESTClient, s.ClusterName, s.Namespace)
351+
352+
//see if task is already present (e.g. a prior failover)
353+
priorTask := crv1.Pgtask{}
354+
var found bool
355+
found, err = kubeapi.Getpgtask(s.RESTClient, &priorTask, spec.Name, s.Namespace)
356+
if found {
357+
//kubeapi.Deletepgtask(s.RESTClient, s.ClusterName, s.Namespace)
358+
log.Debugf("deleting pgtask %s", spec.Name)
359+
err = kubeapi.Deletepgtask(s.RESTClient, spec.Name, s.Namespace)
360+
if err != nil {
361+
log.Errorf("error removing pgtask %s failover is not able to proceed", spec.Name)
362+
return
363+
}
364+
//give time to delete the pgtask before recreating it
365+
time.Sleep(time.Second * time.Duration(1))
366+
} else if !found {
367+
log.Debugf("pgtask %s not found, no need to delete it", spec.Name)
368+
} else if err != nil {
369+
log.Error(err)
370+
log.Error("problem removing pgtask in failover logic, %s", spec.Name)
371+
return
372+
}
373+
349374
spec.TaskType = crv1.PgtaskFailover
350375
spec.Parameters = make(map[string]string)
351376
spec.Parameters[s.ClusterName] = s.ClusterName

0 commit comments

Comments
 (0)