@@ -92,9 +92,13 @@ func (r *ReconcilePerconaServerMongoDBRestore) reconcilePhysicalRestore(
92
92
}
93
93
94
94
status .State = psmdbv1 .RestoreStateWaiting
95
+ return status , nil
95
96
}
96
97
97
- if cr .Status .State == psmdbv1 .RestoreStateWaiting || status .State == psmdbv1 .RestoreStateWaiting {
98
+ stdoutBuf := & bytes.Buffer {}
99
+ stderrBuf := & bytes.Buffer {}
100
+
101
+ if cr .Status .State == psmdbv1 .RestoreStateWaiting {
98
102
if err := r .prepareStatefulSetsForPhysicalRestore (ctx , cluster ); err != nil {
99
103
return status , errors .Wrap (err , "prepare statefulsets for physical restore" )
100
104
}
@@ -104,12 +108,12 @@ func (r *ReconcilePerconaServerMongoDBRestore) reconcilePhysicalRestore(
104
108
return status , errors .Wrap (err , "check if statefulsets are ready for physical restore" )
105
109
}
106
110
107
- if ( ! sfsReady && cr . Status . State != psmdbv1 . RestoreStateRunning ) || cr . Status . State == psmdbv1 . RestoreStateNew {
111
+ if ! sfsReady {
108
112
log .Info ("Waiting for statefulsets to be ready before restore" , "ready" , sfsReady )
109
113
return status , nil
110
114
}
111
115
112
- if sfsReady && cr .Spec .PITR != nil {
116
+ if cr .Spec .PITR != nil {
113
117
rsReady , err := r .checkIfReplsetsAreReadyForPhysicalRestore (ctx , cluster )
114
118
if err != nil {
115
119
return status , errors .Wrap (err , "check if replsets are ready for physical restore" )
@@ -124,12 +128,7 @@ func (r *ReconcilePerconaServerMongoDBRestore) reconcilePhysicalRestore(
124
128
return status , nil
125
129
}
126
130
}
127
- }
128
131
129
- stdoutBuf := & bytes.Buffer {}
130
- stderrBuf := & bytes.Buffer {}
131
-
132
- if cr .Status .State == psmdbv1 .RestoreStateWaiting {
133
132
rs := replsets [0 ]
134
133
135
134
pbmAgentsReady , err := r .checkIfPBMAgentsReadyForPhysicalRestore (ctx , cluster )
@@ -198,8 +197,11 @@ func (r *ReconcilePerconaServerMongoDBRestore) reconcilePhysicalRestore(
198
197
}
199
198
return status , errors .Wrap (err , "get pod" )
200
199
}
200
+ if ! pod .DeletionTimestamp .IsZero () {
201
+ return status , nil
202
+ }
201
203
202
- if pod .Spec .Containers [ 0 ]. Name == naming .ContainerBackupAgent && pod . DeletionTimestamp == nil {
204
+ if ! hasContainerName ( pod .Spec .Containers , naming .ContainerBackupAgent ) {
203
205
meta := backup.BackupMeta {}
204
206
notFound := false
205
207
@@ -266,7 +268,6 @@ func (r *ReconcilePerconaServerMongoDBRestore) reconcilePhysicalRestore(
266
268
return status , nil
267
269
}
268
270
269
- // status.State = psmdbv1.RestoreStateReady
270
271
restoreIsDone = true
271
272
}
272
273
@@ -296,20 +297,17 @@ func (r *ReconcilePerconaServerMongoDBRestore) reconcilePhysicalRestore(
296
297
status .State = psmdbv1 .RestoreStateReady
297
298
298
299
err = retry .RetryOnConflict (retry .DefaultBackoff , func () error {
299
- c := & psmdbv1.PerconaServerMongoDB {}
300
- err := r .client .Get (ctx , types.NamespacedName {Name : cluster .Name , Namespace : cluster .Namespace }, c )
301
- if err != nil {
300
+ c := new (psmdbv1.PerconaServerMongoDB )
301
+ if err := r .client .Get (ctx , client .ObjectKeyFromObject (cluster ), c ); err != nil {
302
302
return err
303
303
}
304
304
305
- orig := c .DeepCopy ()
306
-
307
305
if c .Annotations == nil {
308
306
c .Annotations = make (map [string ]string )
309
307
}
310
308
c .Annotations [psmdbv1 .AnnotationResyncPBM ] = "true"
311
309
312
- return r .client .Patch (ctx , c , client . MergeFrom ( orig ) )
310
+ return r .client .Update (ctx , c )
313
311
})
314
312
if err != nil {
315
313
return status , errors .Wrapf (err , "annotate psmdb/%s for PBM resync" , cluster .Name )
@@ -318,12 +316,27 @@ func (r *ReconcilePerconaServerMongoDBRestore) reconcilePhysicalRestore(
318
316
return status , nil
319
317
}
320
318
319
+ func hasContainerName (containers []corev1.Container , name string ) bool {
320
+ for _ , c := range containers {
321
+ if c .Name == name {
322
+ return true
323
+ }
324
+ }
325
+ return false
326
+ }
327
+
321
328
func (r * ReconcilePerconaServerMongoDBRestore ) finishPhysicalRestore (ctx context.Context , cluster * api.PerconaServerMongoDB ) (bool , error ) {
322
329
stsIsUpdated := true
323
330
if err := r .updateMongodSts (ctx , cluster , func (sts * appsv1.StatefulSet ) error {
324
- if sts .Spec .Template .Spec .Containers [0 ].Name == naming .ContainerBackupAgent {
325
- stsIsUpdated = false
326
- } else if sts .Annotations [psmdbv1 .AnnotationRestoreInProgress ] != "true" {
331
+ if ! sts .DeletionTimestamp .IsZero () {
332
+ return nil
333
+ }
334
+
335
+ if ! hasContainerName (sts .Spec .Template .Spec .Containers , naming .ContainerBackupAgent ) {
336
+ return errors .Errorf ("statefulsets weren't deleted" )
337
+ }
338
+
339
+ if sts .Annotations [psmdbv1 .AnnotationRestoreInProgress ] != "true" {
327
340
stsIsUpdated = false
328
341
sts .Annotations [psmdbv1 .AnnotationRestoreInProgress ] = "true"
329
342
}
0 commit comments