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:
parent
07dea6b447
commit
dbaf41e92a
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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{
|
||||
|
Loading…
Reference in New Issue
Block a user