@@ -18,11 +18,12 @@ package clustercontroller
1818
1919import (
2020 "fmt"
21+ "reflect"
2122 "sync"
2223 "time"
2324
2425 "github.com/golang/glog"
25- // "github.com/robfig /cron"
26+ "github.com/wgliang /cron"
2627 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2728 "k8s.io/apimachinery/pkg/util/wait"
2829
@@ -57,28 +58,42 @@ func (c *Controller) registerClusterInBackupCron(cluster *api.MysqlCluster) erro
5758 return nil
5859 }
5960
61+ schedule , err := cron .Parse (cluster .Spec .BackupSchedule )
62+ if err != nil {
63+ return fmt .Errorf ("fail to parse schedule: %s" , err )
64+ }
65+
6066 lockJobRegister .Lock ()
6167 defer lockJobRegister .Unlock ()
6268
6369 for _ , entry := range c .cron .Entries () {
6470 j , ok := entry .Job .(job )
6571 if ok && j .Name == cluster .Name && j .Namespace == cluster .Namespace {
6672 glog .V (3 ).Infof ("Cluster %s already added to cron." , cluster .Name )
73+ if ! reflect .DeepEqual (entry .Schedule , schedule ) {
74+ glog .Infof ("Update cluster '%s' scheduler to: %s" ,
75+ cluster .Name , cluster .Spec .BackupSchedule )
76+ c .cron .Remove (cluster .Name )
77+ break
78+ }
6779 return nil
6880 }
6981 }
7082
71- return c .cron .AddJob ( cluster . Spec . BackupSchedule , job {
83+ c .cron .Schedule ( schedule , job {
7284 Name : cluster .Name ,
7385 Namespace : cluster .Namespace ,
7486 myClient : c .myClient ,
7587 BackupRunning : new (bool ),
7688 lock : new (sync.Mutex ),
77- })
89+ }, cluster .Name )
90+
91+ return nil
7892}
7993
8094func (j job ) Run () {
8195 backupName := fmt .Sprintf ("%s-auto-backup-%s" , j .Name , time .Now ().Format ("2006-01-02t15-04-05" ))
96+ glog .Infof ("Schedul backup job started. Creating backup %s.." , backupName )
8297
8398 // Wrap backup creation to ensure that lock is released when backup is
8499 // created
0 commit comments