aboutsummaryrefslogtreecommitdiff
path: root/pkg/driver/utils.go
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2022-09-03 13:59:30 -0700
committerGitHub <noreply@github.com>2022-09-03 13:59:30 -0700
commiteeb091f89e795eeb8688e277d88a1b11330eddb3 (patch)
treed8e95674b60c979727a06bd79a379e9eeec86bdf /pkg/driver/utils.go
parent3e3d202acdc9cb523ae3f7e71b3e1b595f4d5450 (diff)
parent825920dd8c0640f9ef5942d19fbab5a7e7945c4c (diff)
downloadseaweedfs-csi-driver-eeb091f89e795eeb8688e277d88a1b11330eddb3.tar.xz
seaweedfs-csi-driver-eeb091f89e795eeb8688e277d88a1b11330eddb3.zip
Merge pull request #83 from kvaster/fuse-process
Remove linux specific magic from fuse process start/stop.
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)
}