From 466bdf97b23102a0f035425b1ab59ea89916f436 Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Tue, 24 May 2022 19:36:52 +0530 Subject: [PATCH] cephfs: set metadata on restart of provisioner pod Make sure to set metadata when subvolume exist, i.e. if the provisioner pod is restarted while createVolume is in progress, say it created the subvolume but didn't yet set the metadata. Signed-off-by: Prasanna Kumar Kalever --- internal/cephfs/controllerserver.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/cephfs/controllerserver.go b/internal/cephfs/controllerserver.go index 298b09598..14d3db153 100644 --- a/internal/cephfs/controllerserver.go +++ b/internal/cephfs/controllerserver.go @@ -287,9 +287,10 @@ func (cs *ControllerServer) CreateVolume( } // TODO return error message if requested vol size greater than found volume return error + metadata := k8s.GetVolumeMetadata(req.GetParameters()) if vID != nil { + volClient := core.NewSubVolume(volOptions.GetConnection(), &volOptions.SubVolume, volOptions.ClusterID) if sID != nil || pvID != nil && !volOptions.BackingSnapshot { - volClient := core.NewSubVolume(volOptions.GetConnection(), &volOptions.SubVolume, volOptions.ClusterID) err = volClient.ExpandVolume(ctx, volOptions.Size) if err != nil { purgeErr := volClient.PurgeVolume(ctx, false) @@ -311,6 +312,14 @@ func (cs *ControllerServer) CreateVolume( } } + if !volOptions.BackingSnapshot { + // Set metadata on restart of provisioner pod when subvolume exist + err = volClient.SetAllMetadata(metadata) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + } + // remove kubernetes csi prefixed parameters. volumeContext := k8s.RemoveCSIPrefixedParameters(req.GetParameters()) volumeContext["subvolumeName"] = vID.FsSubvolName @@ -388,7 +397,6 @@ func (cs *ControllerServer) CreateVolume( } // Set Metadata on PV Create - metadata := k8s.GetVolumeMetadata(req.GetParameters()) err = volClient.SetAllMetadata(metadata) if err != nil { return nil, status.Error(codes.Internal, err.Error())