@@ -26,6 +26,7 @@ import (
26
26
"github.com/percona/percona-backup-mongodb/pbm/storage"
27
27
"github.com/percona/percona-backup-mongodb/pbm/storage/azure"
28
28
"github.com/percona/percona-backup-mongodb/pbm/storage/s3"
29
+
29
30
"github.com/percona/percona-server-mongodb-operator/clientcmd"
30
31
psmdbv1 "github.com/percona/percona-server-mongodb-operator/pkg/apis/psmdb/v1"
31
32
"github.com/percona/percona-server-mongodb-operator/pkg/naming"
@@ -169,9 +170,16 @@ func (r *ReconcilePerconaServerMongoDBBackup) Reconcile(ctx context.Context, req
169
170
}
170
171
}
171
172
172
- bcp , err := r .newBackup (ctx , cluster )
173
- if err != nil {
174
- return rr , errors .Wrap (err , "create backup object" )
173
+ var bcp * Backup
174
+ if err = retry .OnError (defaultBackoff , func (err error ) bool { return err != nil }, func () error {
175
+ var err error
176
+ bcp , err = r .newBackup (ctx , cluster )
177
+ if err != nil {
178
+ return errors .Wrap (err , "create backup object" )
179
+ }
180
+ return nil
181
+ }); err != nil {
182
+ return rr , err
175
183
}
176
184
defer bcp .Close (ctx )
177
185
@@ -209,26 +217,37 @@ func (r *ReconcilePerconaServerMongoDBBackup) reconcile(
209
217
return status , errors .Wrap (err , "failed to run backup" )
210
218
}
211
219
212
- cjobs , err := backup .HasActiveJobs (ctx , r .newPBMFunc , r .client , cluster , backup .NewBackupJob (cr .Name ), backup .NotPITRLock )
213
- if err != nil {
214
- return status , errors .Wrap (err , "check for concurrent jobs" )
215
- }
216
-
217
- if cjobs {
218
- if cr .Status .State != psmdbv1 .BackupStateWaiting {
219
- log .Info ("Waiting to finish another backup/restore." )
220
- }
221
- status .State = psmdbv1 .BackupStateWaiting
222
- return status , nil
223
- }
224
-
225
- if cr .Status .State == psmdbv1 .BackupStateNew || cr .Status .State == psmdbv1 .BackupStateWaiting {
220
+ switch cr .Status .State {
221
+ case psmdbv1 .BackupStateNew , psmdbv1 .BackupStateWaiting :
226
222
time .Sleep (10 * time .Second )
227
223
return bcp .Start (ctx , r .client , cluster , cr )
224
+ case psmdbv1 .BackupStateRunning :
225
+ default :
226
+ cjobs , err := backup .HasActiveJobs (ctx , r .newPBMFunc , r .client , cluster , backup .NewBackupJob (cr .Name ), backup .NotPITRLock )
227
+ if err != nil {
228
+ return status , errors .Wrap (err , "check for concurrent jobs" )
229
+ }
230
+
231
+ if cjobs {
232
+ if cr .Status .State != psmdbv1 .BackupStateWaiting {
233
+ log .Info ("Waiting to finish another backup/restore." )
234
+ }
235
+ status .State = psmdbv1 .BackupStateWaiting
236
+ return status , nil
237
+ }
228
238
}
229
239
230
240
time .Sleep (5 * time .Second )
231
- return bcp .Status (ctx , cr )
241
+
242
+ err := retry .OnError (defaultBackoff , func (err error ) bool { return err != nil }, func () error {
243
+ updatedStatus , err := bcp .Status (ctx , cr )
244
+ if err == nil {
245
+ status = updatedStatus
246
+ }
247
+ return err
248
+ })
249
+
250
+ return status , err
232
251
}
233
252
234
253
func (r * ReconcilePerconaServerMongoDBBackup ) getPBMStorage (ctx context.Context , cluster * psmdbv1.PerconaServerMongoDB , cr * psmdbv1.PerconaServerMongoDBBackup ) (storage.Storage , error ) {
0 commit comments