aboutsummaryrefslogtreecommitdiff
path: root/pkg/driver/utils.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-09-04 22:47:01 -0700
committerchrislu <chris.lu@gmail.com>2022-09-04 22:47:01 -0700
commita5808d5f084cb0194bda12aa68ba1807ac213926 (patch)
treebf02f64b98691539946e53b9624081dbe1053773 /pkg/driver/utils.go
parent38b671c1db0adef5e8678b6529488cf36295c2cc (diff)
parenteeb091f89e795eeb8688e277d88a1b11330eddb3 (diff)
downloadseaweedfs-csi-driver-a5808d5f084cb0194bda12aa68ba1807ac213926.tar.xz
seaweedfs-csi-driver-a5808d5f084cb0194bda12aa68ba1807ac213926.zip
Merge branch 'master' of https://github.com/seaweedfs/seaweedfs-csi-driver
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)
}