ScaleIO: use a fresh mounter for every SetUp/TearDown

A volume plugin should not cache Mounter for a long time, it can get a
different one with each SetUp/TearDown call.
This commit is contained in:
Jan Safranek 2017-08-22 13:25:09 +02:00
parent 07dea6b447
commit dbaf41e92a
3 changed files with 6 additions and 10 deletions

View File

@ -23,7 +23,6 @@ import (
api "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/kubernetes/pkg/util/keymutex"
"k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume"
)
@ -35,7 +34,6 @@ const (
type sioPlugin struct {
host volume.VolumeHost
mounter mount.Interface
volumeMtx keymutex.KeyMutex
}
@ -53,7 +51,6 @@ var _ volume.VolumePlugin = &sioPlugin{}
func (p *sioPlugin) Init(host volume.VolumeHost) error {
p.host = host
p.mounter = host.GetMounter(p.GetPluginName())
p.volumeMtx = keymutex.NewKeyMutex()
return nil
}

View File

@ -93,7 +93,8 @@ func (v *sioVolume) SetUpAt(dir string, fsGroup *int64) error {
return err
}
notDevMnt, err := v.plugin.mounter.IsLikelyNotMountPoint(dir)
mounter := v.plugin.host.GetMounter(v.plugin.GetPluginName())
notDevMnt, err := mounter.IsLikelyNotMountPoint(dir)
if err != nil && !os.IsNotExist(err) {
glog.Error(log("IsLikelyNotMountPoint test failed for dir %v", dir))
return err
@ -186,21 +187,22 @@ func (v *sioVolume) TearDownAt(dir string) error {
v.plugin.volumeMtx.LockKey(v.volSpecName)
defer v.plugin.volumeMtx.UnlockKey(v.volSpecName)
dev, _, err := mount.GetDeviceNameFromMount(v.plugin.mounter, dir)
mounter := v.plugin.host.GetMounter(v.plugin.GetPluginName())
dev, _, err := mount.GetDeviceNameFromMount(mounter, dir)
if err != nil {
glog.Errorf(log("failed to get reference count for volume: %s", dir))
return err
}
glog.V(4).Info(log("attempting to unmount %s", dir))
if err := util.UnmountPath(dir, v.plugin.mounter); err != nil {
if err := util.UnmountPath(dir, mounter); err != nil {
glog.Error(log("teardown failed while unmounting dir %s: %v ", dir, err))
return err
}
glog.V(4).Info(log("dir %s unmounted successfully", dir))
// detach/unmap
deviceBusy, err := v.plugin.mounter.DeviceOpened(dev)
deviceBusy, err := mounter.DeviceOpened(dev)
if err != nil {
glog.Error(log("teardown unable to get status for device %s: %v", dev, err))
return err

View File

@ -30,7 +30,6 @@ import (
"k8s.io/apimachinery/pkg/types"
fakeclient "k8s.io/client-go/kubernetes/fake"
utiltesting "k8s.io/client-go/util/testing"
"k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume"
volumetest "k8s.io/kubernetes/pkg/volume/testing"
)
@ -138,8 +137,6 @@ func TestVolumeMounterUnmounter(t *testing.T) {
t.Errorf("Cannot assert plugin to be type sioPlugin")
}
sioPlug.mounter = &mount.FakeMounter{}
vol := &api.Volume{
Name: testSioVolName,
VolumeSource: api.VolumeSource{