From e2769706463856bd53fc9e00352fbbb25d05131e Mon Sep 17 00:00:00 2001 From: Tiger Kaovilai Date: Mon, 17 Aug 2026 23:04:06 -0400 Subject: [PATCH] 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 --- pkg/exposer/csi_snapshot.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/exposer/csi_snapshot.go b/pkg/exposer/csi_snapshot.go index 535268a3d..247ae9003 100644 --- a/pkg/exposer/csi_snapshot.go +++ b/pkg/exposer/csi_snapshot.go @@ -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,