Skip to content

Commit

Permalink
cephfs: use new 'ceph fs resize' command when available
Browse files Browse the repository at this point in the history
Use ceph fs resize command when its available
in the cluster.if its not available fallback to
old style of resizing the subvolume

ceph change log:https://docs.ceph.com/docs/master/releases/nautilus/#v14-2-8-nautilus

Fixes #1002

Signed-off-by: Madhu Rajanna <[email protected]>
(cherry picked from commit b065726)
  • Loading branch information
Madhu-1 authored and humblec committed May 12, 2020
1 parent d503729 commit 9022d89
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pkg/cephfs/controllerserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ func (cs *ControllerServer) ControllerExpandVolume(ctx context.Context, req *csi

RoundOffSize := util.RoundOffBytes(req.GetCapacityRange().GetRequiredBytes())

if err = createVolume(ctx, volOptions, cr, volumeID(volIdentifier.FsSubvolName), RoundOffSize); err != nil {
if err = resizeVolume(ctx, volOptions, cr, volumeID(volIdentifier.FsSubvolName), RoundOffSize); err != nil {
klog.Errorf(util.Log(ctx, "failed to expand volume %s: %v"), volumeID(volIdentifier.FsSubvolName), err)
return nil, status.Error(codes.Internal, err.Error())
}
Expand Down
48 changes: 48 additions & 0 deletions pkg/cephfs/volume.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ var (
// Subvolume group create gets called every time the plugin loads, though it doesn't result in error
// its unnecessary
cephfsInit = false

// resizeSupportedList stores the mapping for clusterID and resize is
// supported in the particular cluster
resizeSupportedList = make(map[string]bool)

inValidCommmand = "no valid command found"
)

func getCephRootVolumePathLocalDeprecated(volID volumeID) string {
Expand Down Expand Up @@ -138,6 +144,48 @@ func createVolume(ctx context.Context, volOptions *volumeOptions, cr *util.Crede
return nil
}

// resizeVolume will try to use ceph fs subvolume resize command to resize the
// subvolume. If the command is not available as a fallback it will use
// CreateVolume to resize the subvolume.
func resizeVolume(ctx context.Context, volOptions *volumeOptions, cr *util.Credentials, volID volumeID, bytesQuota int64) error {
supported := false
ok := false

if supported, ok = resizeSupportedList[volOptions.ClusterID]; supported || !ok {
args := []string{
"fs",
"subvolume",
"resize",
volOptions.FsName,
string(volID),
strconv.FormatInt(bytesQuota, 10),
"--group_name",
csiSubvolumeGroup,
"-m", volOptions.Monitors,
"-c", util.CephConfigPath,
"-n", cephEntityClientPrefix + cr.ID,
"--keyfile=" + cr.KeyFile,
}

err := execCommandErr(
ctx,
"ceph",
args[:]...)

if err == nil {
resizeSupportedList[volOptions.ClusterID] = true
return nil
}
// Incase the error is other than invalid command return error to the caller.
if !strings.Contains(err.Error(), inValidCommmand) {
klog.Errorf(util.Log(ctx, "failed to resize subvolume %s(%s) in fs %s"), string(volID), err, volOptions.FsName)
return err
}
}
resizeSupportedList[volOptions.ClusterID] = false
return createVolume(ctx, volOptions, cr, volID, bytesQuota)
}

func mountCephRoot(ctx context.Context, volID volumeID, volOptions *volumeOptions, adminCr *util.Credentials) error {
cephRoot := getCephRootPathLocalDeprecated(volID)

Expand Down

0 comments on commit 9022d89

Please sign in to comment.