@@ -89,10 +89,20 @@ func (r *BackupCronReconciler) Reconcile(ctx context.Context, req ctrl.Request)
89
89
if err = instance .Validate (); err != nil {
90
90
return ctrl.Result {}, err
91
91
}
92
+
93
+ if * instance .Spec .Replicas == 0 {
94
+ if err := r .Cron .Remove (instance .Name + "auto" ); err == nil {
95
+ log .V (1 ).Info ("remove cronjob from cluster" , "name" , instance .Name )
96
+ }
97
+ // without bothS3NFs, clear all
98
+ if err := r .ClearBothS3NFS (ctx , instance .Unwrap (), log ); err != nil {
99
+ return reconcile.Result {}, fmt .Errorf ("failed to clear cronjob: %s" , err )
100
+ }
101
+
102
+ }
92
103
// if spec.backupScheduler is not set then don't do anything
93
- if instance .Spec .BothS3NFS == nil &&
94
- (len (instance .Spec .BackupSchedule ) == 0 || * instance .Spec .Replicas == 0 ) {
95
- if err := r .Cron .Remove (instance .Name ); err == nil {
104
+ if len (instance .Spec .BackupSchedule ) == 0 && instance .Spec .BothS3NFS == nil {
105
+ if err := r .Cron .Remove (instance .Name + "auto" ); err == nil {
96
106
log .V (1 ).Info ("remove cronjob from cluster" , "name" , instance .Name )
97
107
}
98
108
@@ -120,14 +130,16 @@ func (r *BackupCronReconciler) Reconcile(ctx context.Context, req ctrl.Request)
120
130
}
121
131
return ctrl.Result {}, nil
122
132
} else {
133
+ // without bothS3NFs, clear all
134
+ if err := r .ClearBothS3NFS (ctx , instance .Unwrap (), log ); err != nil {
135
+ return reconcile.Result {}, fmt .Errorf ("failed to clear cronjob: %s" , err )
136
+ }
123
137
schedule , err := cron .Parse (instance .Spec .BackupSchedule )
124
138
if err != nil {
125
139
return reconcile.Result {}, fmt .Errorf ("failed to parse schedule: %s" , err )
126
140
}
127
141
128
- log .V (1 ).Info ("register cluster in cronjob" , "key" , instance , "schedule" , schedule )
129
-
130
- return ctrl.Result {}, r .updateClusterSchedule (ctx , instance .Unwrap (), schedule , "" , log )
142
+ return ctrl.Result {}, r .updateClusterSchedule (ctx , instance .Unwrap (), schedule , "auto" , log )
131
143
}
132
144
133
145
}
@@ -149,7 +161,7 @@ func (r *BackupCronReconciler) updateClusterSchedule(ctx context.Context, cluste
149
161
log .Info ("update cluster scheduler" , "key" , cluster ,
150
162
"scheduler" , schedule )
151
163
152
- if err := r .Cron .Remove (cluster .Name ); err != nil {
164
+ if err := r .Cron .Remove (cluster .Name + BackupType ); err != nil {
153
165
return err
154
166
}
155
167
break
@@ -165,7 +177,7 @@ func (r *BackupCronReconciler) updateClusterSchedule(ctx context.Context, cluste
165
177
if BackupType == "nfs" {
166
178
nfsServerAddress = cluster .Spec .NFSServerAddress
167
179
}
168
-
180
+ log . V ( 1 ). Info ( "register cluster in cronjob" , "key" , cluster . Name + BackupType , "schedule" , schedule )
169
181
r .Cron .Schedule (schedule , & backup.CronJob {
170
182
ClusterName : cluster .Name ,
171
183
Namespace : cluster .Namespace ,
@@ -175,7 +187,29 @@ func (r *BackupCronReconciler) updateClusterSchedule(ctx context.Context, cluste
175
187
NFSServerAddress : nfsServerAddress ,
176
188
BackupType : BackupType ,
177
189
Log : log ,
178
- }, cluster .Name )
190
+ }, cluster .Name + BackupType )
191
+
192
+ return nil
193
+ }
194
+
195
+ // Clear all nfs and s3 cronjob
196
+ func (r * BackupCronReconciler ) ClearBothS3NFS (ctx context.Context , cluster * apiv1alpha1.MysqlCluster , log logr.Logger ) error {
197
+ r .LockJobRegister .Lock ()
198
+ defer r .LockJobRegister .Unlock ()
199
+
200
+ for _ , entry := range r .Cron .Entries () {
201
+ j , ok := entry .Job .(* backup.CronJob )
202
+ if ok && j .ClusterName == cluster .Name &&
203
+ j .Namespace == cluster .Namespace &&
204
+ (j .BackupType == "nfs" || j .BackupType == "s3" ) {
205
+ log .V (1 ).Info ("find s3 or nfs cron." , "key" , cluster )
206
+
207
+ if err := r .Cron .Remove (cluster .Name + j .BackupType ); err != nil {
208
+ return err
209
+ }
210
+ break
211
+ }
212
+ }
179
213
180
214
return nil
181
215
}
0 commit comments