Skip to content

Commit a8efad5

Browse files
committed
K8SPSMDB-1339: Validate PiTR target before starting restore
1 parent c2f5bc1 commit a8efad5

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

pkg/controller/perconaservermongodbrestore/perconaservermongodbrestore_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func (r *ReconcilePerconaServerMongoDBRestore) Reconcile(ctx context.Context, re
188188
}
189189

190190
if cr.Status.State == psmdbv1.RestoreStateNew {
191-
err := r.validate(ctx, cr, cluster)
191+
err = r.validate(ctx, cr, cluster)
192192
if err != nil {
193193
if errors.Is(err, errWaitingPBM) {
194194
err = nil
@@ -209,7 +209,7 @@ func (r *ReconcilePerconaServerMongoDBRestore) Reconcile(ctx context.Context, re
209209
return rr, nil
210210
}
211211

212-
return rr, errors.Wrap(err, "failed to validate restore")
212+
return reconcile.Result{}, errors.Wrap(err, "failed to validate restore")
213213
}
214214

215215
if cluster.Spec.Sharding.Enabled {

pkg/controller/perconaservermongodbrestore/validate.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,21 @@ func (r *ReconcilePerconaServerMongoDBRestore) validate(ctx context.Context, cr
4949
return errors.Wrap(err, "failed to validate backup")
5050
}
5151

52+
if pitr := cr.Spec.PITR; pitr != nil {
53+
switch {
54+
case pitr.Type == psmdbv1.PITRestoreTypeDate && pitr.Date != nil:
55+
ts := pitr.Date.Unix()
56+
57+
if _, err := pbmc.GetPITRChunkContains(ctx, ts); err != nil {
58+
return err
59+
}
60+
case pitr.Type == psmdbv1.PITRestoreTypeLatest:
61+
_, err := pbmc.GetLatestTimelinePITR(ctx)
62+
if err != nil {
63+
return err
64+
}
65+
}
66+
}
67+
5268
return nil
5369
}

0 commit comments

Comments
 (0)