mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-14 02:10:21 +00:00
Cephfs: Use ceph kernel client if kernel version >= 4.17
Ceph kernel client is more performant than ceph fuse client. The kernel client has Quota support only in the kernel version >=4.17. Hence use ceph kernel client when the kernel version is >=4.17. Signed-off-by: Poornima G <pgurusid@redhat.com>
This commit is contained in:
parent
d03a352abf
commit
90c4d6a451
@ -50,9 +50,6 @@ type Driver struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// DefaultVolumeMounter for mounting volumes
|
|
||||||
DefaultVolumeMounter string
|
|
||||||
|
|
||||||
// CSIInstanceID is the instance ID that is unique to an instance of CSI, used when sharing
|
// CSIInstanceID is the instance ID that is unique to an instance of CSI, used when sharing
|
||||||
// ceph clusters across CSI instances, to differentiate omap names per CSI instance
|
// ceph clusters across CSI instances, to differentiate omap names per CSI instance
|
||||||
CSIInstanceID = "default"
|
CSIInstanceID = "default"
|
||||||
@ -103,18 +100,9 @@ func (fs *Driver) Run(conf *util.Config, cachePersister util.CachePersister) {
|
|||||||
if conf.VolumeMounter != "" {
|
if conf.VolumeMounter != "" {
|
||||||
if err := validateMounter(conf.VolumeMounter); err != nil {
|
if err := validateMounter(conf.VolumeMounter); err != nil {
|
||||||
klog.Fatalln(err)
|
klog.Fatalln(err)
|
||||||
} else {
|
|
||||||
DefaultVolumeMounter = conf.VolumeMounter
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Pick the first available mounter as the default one.
|
|
||||||
// The choice is biased towards "fuse" in case both
|
|
||||||
// ceph fuse and kernel mounters are available.
|
|
||||||
DefaultVolumeMounter = availableMounters[0]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
klog.Infof("cephfs: setting default volume mounter to %s", DefaultVolumeMounter)
|
|
||||||
|
|
||||||
if err := util.WriteCephConfig(); err != nil {
|
if err := util.WriteCephConfig(); err != nil {
|
||||||
klog.Fatalf("failed to write ceph configuration file: %v", err)
|
klog.Fatalf("failed to write ceph configuration file: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -55,12 +55,32 @@ func loadAvailableMounters() error {
|
|||||||
// #nosec
|
// #nosec
|
||||||
kernelMounterProbe := exec.Command("mount.ceph")
|
kernelMounterProbe := exec.Command("mount.ceph")
|
||||||
|
|
||||||
if fuseMounterProbe.Run() == nil {
|
err := kernelMounterProbe.Run()
|
||||||
availableMounters = append(availableMounters, volumeMounterFuse)
|
if err == nil {
|
||||||
|
kernelVersion, _, err := execCommand(context.TODO(), "uname", "-r")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
vers := strings.Split(string(kernelVersion), ".")
|
||||||
|
majorVers, err := strconv.Atoi(vers[0])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
minorVers, err := strconv.Atoi(vers[1])
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if majorVers >= 4 && minorVers >= 17 {
|
||||||
|
klog.Infof("loaded mounter: %s", volumeMounterKernel)
|
||||||
|
availableMounters = append(availableMounters, volumeMounterKernel)
|
||||||
|
} else {
|
||||||
|
klog.Infof("kernel version < 4.17 might not support quota feature, hence not loading kernel client")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if kernelMounterProbe.Run() == nil {
|
if fuseMounterProbe.Run() == nil {
|
||||||
availableMounters = append(availableMounters, volumeMounterKernel)
|
klog.Infof("loaded mounter: %s", volumeMounterFuse)
|
||||||
|
availableMounters = append(availableMounters, volumeMounterFuse)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(availableMounters) == 0 {
|
if len(availableMounters) == 0 {
|
||||||
@ -80,25 +100,21 @@ func newMounter(volOptions *volumeOptions) (volumeMounter, error) {
|
|||||||
|
|
||||||
wantMounter := volOptions.Mounter
|
wantMounter := volOptions.Mounter
|
||||||
|
|
||||||
if wantMounter == "" {
|
|
||||||
wantMounter = DefaultVolumeMounter
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify that it's available
|
// Verify that it's available
|
||||||
|
|
||||||
var chosenMounter string
|
var chosenMounter string
|
||||||
|
|
||||||
for _, availMounter := range availableMounters {
|
for _, availMounter := range availableMounters {
|
||||||
if chosenMounter == "" {
|
if availMounter == wantMounter {
|
||||||
if availMounter == wantMounter {
|
chosenMounter = wantMounter
|
||||||
chosenMounter = wantMounter
|
break
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if chosenMounter == "" {
|
if chosenMounter == "" {
|
||||||
// Otherwise pick whatever is left
|
// Otherwise pick whatever is left
|
||||||
chosenMounter = availableMounters[0]
|
chosenMounter = availableMounters[0]
|
||||||
|
klog.Infof("requested mounter: %s, chosen mounter: %s", wantMounter, chosenMounter)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the mounter
|
// Create the mounter
|
||||||
|
Loading…
Reference in New Issue
Block a user