Skip to content

Commit f7aebb5

Browse files
iPraveenPariharmergify[bot]
authored andcommitted
rbd: use StorageClass image features for temp clones and snapshots
Previously, temporary clone images (-temp) and snapshot backing images had their features hard-coded to only layering and deep-flatten. Inherit the image features from the parent volume (configured via StorageClass imageFeatures) while ensuring layering and deep-flatten are always enabled, as they are required for the flatten operation. Signed-off-by: Praveen M <m.praveen@ibm.com> (cherry picked from commit 28daf2e)
1 parent ad473d3 commit f7aebb5

3 files changed

Lines changed: 10 additions & 6 deletions

File tree

internal/rbd/clone.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,11 @@ func (rv *rbdVolume) checkCloneImage(ctx context.Context, parentVol *rbdVolume)
105105
func (rv *rbdVolume) generateTempClone() *rbdVolume {
106106
tempClone := rbdVolume{}
107107
tempClone.conn = rv.conn.Copy()
108-
// The temp clone image need to have deep flatten feature
108+
// Use the parent volume's image features (from StorageClass) and ensure
109+
// that layering and deep-flatten are always enabled, as these are
110+
// required for the flatten operation on the temporary clone.
109111
f := []string{librbd.FeatureNameLayering, librbd.FeatureNameDeepFlatten}
110-
tempClone.ImageFeatureSet = librbd.FeatureSetFromNames(f)
112+
tempClone.ImageFeatureSet = rv.ImageFeatureSet | librbd.FeatureSetFromNames(f)
111113
tempClone.ClusterID = rv.ClusterID
112114
tempClone.Monitors = rv.Monitors
113115
tempClone.Pool = rv.Pool

internal/rbd/controllerserver.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,9 +1391,10 @@ func (cs *ControllerServer) doSnapshotClone(
13911391
// generate cloned volume details from snapshot
13921392
cloneRbd := rbdSnap.toVolume()
13931393
defer cloneRbd.Destroy(ctx)
1394-
// add image feature for cloneRbd
1394+
// Use the parent volume's image features and ensure that layering and
1395+
// deep-flatten are always enabled for the snapshot backing image.
13951396
f := []string{librbd.FeatureNameLayering, librbd.FeatureNameDeepFlatten}
1396-
cloneRbd.ImageFeatureSet = librbd.FeatureSetFromNames(f)
1397+
cloneRbd.ImageFeatureSet = parentVol.ImageFeatureSet | librbd.FeatureSetFromNames(f)
13971398

13981399
err := cloneRbd.Connect(cr)
13991400
if err != nil {

internal/rbd/snapshot.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,10 @@ func (rv *rbdVolume) NewSnapshotByID(
292292
return nil, err
293293
}
294294

295-
// set the features for the clone image.
295+
// Use the parent volume's image features and ensure that layering and
296+
// deep-flatten are always enabled for the snapshot backing image.
296297
f := []string{librbd.FeatureNameLayering, librbd.FeatureNameDeepFlatten}
297-
rv.ImageFeatureSet = librbd.FeatureSetFromNames(f)
298+
rv.ImageFeatureSet |= librbd.FeatureSetFromNames(f)
298299

299300
options, err := rv.constructImageOptions(ctx)
300301
if err != nil {

0 commit comments

Comments
 (0)