@@ -13,6 +13,7 @@ import (
13
13
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14
14
"k8s.io/apimachinery/pkg/runtime"
15
15
"k8s.io/apimachinery/pkg/types"
16
+ "k8s.io/apimachinery/pkg/util/wait"
16
17
"k8s.io/client-go/util/retry"
17
18
"sigs.k8s.io/controller-runtime/pkg/client"
18
19
"sigs.k8s.io/controller-runtime/pkg/controller"
@@ -236,7 +237,14 @@ func (r *ReconcilePerconaServerMongoDBRestore) getBackup(ctx context.Context, cr
236
237
}
237
238
238
239
func (r * ReconcilePerconaServerMongoDBRestore ) updateStatus (ctx context.Context , cr * psmdbv1.PerconaServerMongoDBRestore ) error {
239
- err := retry .RetryOnConflict (retry .DefaultRetry , func () error {
240
+ var backoff = wait.Backoff {
241
+ Steps : 5 ,
242
+ Duration : 500 * time .Millisecond ,
243
+ Factor : 5.0 ,
244
+ Jitter : 0.1 ,
245
+ }
246
+
247
+ err := retry .OnError (backoff , func (error ) bool { return true }, func () error {
240
248
c := & psmdbv1.PerconaServerMongoDBRestore {}
241
249
242
250
err := r .client .Get (ctx , types.NamespacedName {Name : cr .Name , Namespace : cr .Namespace }, c )
@@ -246,7 +254,23 @@ func (r *ReconcilePerconaServerMongoDBRestore) updateStatus(ctx context.Context,
246
254
247
255
c .Status = cr .Status
248
256
249
- return r .client .Status ().Update (ctx , c )
257
+ err = r .client .Status ().Update (ctx , c )
258
+ if err != nil {
259
+ return err
260
+ }
261
+
262
+ // ensure status is updated
263
+ c = & psmdbv1.PerconaServerMongoDBRestore {}
264
+ err = r .client .Get (ctx , types.NamespacedName {Name : cr .Name , Namespace : cr .Namespace }, c )
265
+ if err != nil {
266
+ return err
267
+ }
268
+
269
+ if c .Status .State != cr .Status .State {
270
+ return errors .New ("status not updated" )
271
+ }
272
+
273
+ return nil
250
274
})
251
275
252
276
if k8serrors .IsNotFound (err ) {
0 commit comments