Note why Case 2 storages require inherited Retain, not just permit it

For a Case 2 driver (design/block-data-mover/block-data-mover.md), such
as Ceph RBD, rbd snap diff needs the base and target snapshots in the
same clone chain. Delete destroys the base as soon as the backup
completes, so the next incremental's delta query fails and degrades to
an allocated-blocks backup (or a full whole-device transfer without
that fix). Inheriting Retain there isn't an optional nicety, it's what
makes incrementals possible at all.

Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
This commit is contained in:
Tiger Kaovilai
2026-08-27 12:57:20 -04:00
parent eff2522eac
commit e276970646
+8
View File
@@ -585,6 +585,14 @@ func (e *csiSnapshotExposer) createBackupVSC(ctx context.Context, ownerObject co
// of forcing Delete, otherwise a user who configured Retain on the
// VolumeSnapshotClass still loses the snapshot when the backup VSC
// is cleaned up.
//
// For Case 2 storages per the design (design/block-data-mover/block-data-mover.md,
// e.g. Ceph RBD), inheriting Retain is not just an option but a requirement for
// incrementals to work at all: rbd snap diff needs the base and target snapshots
// in the same clone chain, so Delete destroys the base as soon as this backup
// completes. The next incremental's delta query then fails and degrades to an
// allocated-blocks backup (see the CBT tier ladder) or, without that fix, a full
// whole-device transfer.
DeletionPolicy: snapshotVSC.Spec.DeletionPolicy,
Driver: snapshotVSC.Spec.Driver,
VolumeSnapshotClassName: snapshotVSC.Spec.VolumeSnapshotClassName,