aboutsummaryrefslogtreecommitdiff
path: root/pkg/driver/utils.go
diff options
context:
space:
mode:
authorViktor Kuzmin <kvaster@gmail.com>2022-09-03 11:40:32 +0300
committerViktor Kuzmin <kvaster@gmail.com>2022-09-03 11:40:32 +0300
commitbc49fc11ffe8c687c5d4ea46f25ead9191155ec0 (patch)
tree901e66a4e89fb8d23648ca51c438f74c13bfcc35 /pkg/driver/utils.go
parent3e3d202acdc9cb523ae3f7e71b3e1b595f4d5450 (diff)
downloadseaweedfs-csi-driver-bc49fc11ffe8c687c5d4ea46f25ead9191155ec0.tar.xz
seaweedfs-csi-driver-bc49fc11ffe8c687c5d4ea46f25ead9191155ec0.zip
Remove linux specific magic from fuse process start/stop.
Use pid from cmd.Process instead of /proc lookup Use mount specific mutex Log fuse mount process stderr and stdout for problems investigation
Diffstat (limited to 'pkg/driver/utils.go')
-rw-r--r--pkg/driver/utils.go35
1 files changed, 18 insertions, 17 deletions
diff --git a/pkg/driver/utils.go b/pkg/driver/utils.go
index c2e0c49..485d4da 100644
--- a/pkg/driver/utils.go
+++ b/pkg/driver/utils.go
@@ -8,17 +8,15 @@ import (
"github.com/container-storage-interface/spec/lib/go/csi"
"github.com/seaweedfs/seaweedfs/weed/glog"
- "github.com/seaweedfs/seaweedfs/weed/util"
"golang.org/x/net/context"
"google.golang.org/grpc"
"k8s.io/utils/mount"
)
func NewNodeServer(n *SeaweedFsDriver) *NodeServer {
-
return &NodeServer{
Driver: n,
- volumeMutexes: NewKeyMutex(32),
+ volumeMutexes: NewKeyMutex(),
}
}
@@ -65,13 +63,19 @@ func logGRPC(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, h
}
func checkMount(targetPath string) (bool, error) {
- notMnt, err := mount.New("").IsLikelyNotMountPoint(targetPath)
+ mounter := mount.New("")
+ notMnt, err := mount.IsNotMountPoint(mounter, targetPath)
if err != nil {
if os.IsNotExist(err) {
if err = os.MkdirAll(targetPath, 0750); err != nil {
return false, err
}
notMnt = true
+ } else if mount.IsCorruptedMnt(err) {
+ if err := mounter.Unmount(targetPath); err != nil {
+ return false, err
+ }
+ notMnt, err = mount.IsNotMountPoint(mounter, targetPath)
} else {
return false, err
}
@@ -80,22 +84,19 @@ func checkMount(targetPath string) (bool, error) {
}
type KeyMutex struct {
- mutexes []sync.RWMutex
- size int32
+ mutexes sync.Map
}
-func NewKeyMutex(size int32) *KeyMutex {
- return &KeyMutex{
- mutexes: make([]sync.RWMutex, size),
- size: size,
- }
+func NewKeyMutex() *KeyMutex {
+ return &KeyMutex{}
}
-func (km *KeyMutex) GetMutex(key string) *sync.RWMutex {
- index := util.HashToInt32([]byte(key))
- if index < 0 {
- index = -index
- }
+func (km *KeyMutex) GetMutex(key string) *sync.Mutex {
+ m, _ := km.mutexes.LoadOrStore(key, &sync.Mutex{})
+
+ return m.(*sync.Mutex)
+}
- return &km.mutexes[index%km.size]
+func (km *KeyMutex) RemoveMutex(key string) {
+ km.mutexes.Delete(key)
}