@@ -244,7 +244,10 @@ func (*AutoFailoverTask) Print(restclient *rest.RESTClient, namespace string) {
244244func (* 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
250253func (* 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