diff options
| author | Viktor Kuzmin <kvaster@gmail.com> | 2022-09-03 11:40:32 +0300 |
|---|---|---|
| committer | Viktor Kuzmin <kvaster@gmail.com> | 2022-09-03 11:40:32 +0300 |
| commit | bc49fc11ffe8c687c5d4ea46f25ead9191155ec0 (patch) | |
| tree | 901e66a4e89fb8d23648ca51c438f74c13bfcc35 /pkg/driver/utils.go | |
| parent | 3e3d202acdc9cb523ae3f7e71b3e1b595f4d5450 (diff) | |
| download | seaweedfs-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.go | 35 |
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) } |
