mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
add locking to access l.volumes
This commit is contained in:
parent
bfd2739fce
commit
043b7a7c65
|
@ -6,8 +6,9 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||||
)
|
)
|
||||||
|
|
||||||
type DiskLocation struct {
|
type DiskLocation struct {
|
||||||
|
@ -27,12 +28,12 @@ func (l *DiskLocation) volumeIdFromPath(dir os.FileInfo) (VolumeId, string, erro
|
||||||
name := dir.Name()
|
name := dir.Name()
|
||||||
if !dir.IsDir() && strings.HasSuffix(name, ".dat") {
|
if !dir.IsDir() && strings.HasSuffix(name, ".dat") {
|
||||||
collection := ""
|
collection := ""
|
||||||
base := name[:len(name) - len(".dat")]
|
base := name[:len(name)-len(".dat")]
|
||||||
i := strings.LastIndex(base, "_")
|
i := strings.LastIndex(base, "_")
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
collection, base = base[0:i], base[i + 1:]
|
collection, base = base[0:i], base[i+1:]
|
||||||
}
|
}
|
||||||
vol, err := NewVolumeId(base);
|
vol, err := NewVolumeId(base)
|
||||||
return vol, collection, err
|
return vol, collection, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,7 +149,10 @@ func (l *DiskLocation) LoadVolume(vid VolumeId, needleMapKind NeedleMapType) boo
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *DiskLocation) DeleteVolume(vid VolumeId) (error) {
|
func (l *DiskLocation) DeleteVolume(vid VolumeId) error {
|
||||||
|
l.Lock()
|
||||||
|
defer l.Unlock()
|
||||||
|
|
||||||
_, ok := l.volumes[vid]
|
_, ok := l.volumes[vid]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("Volume not found, VolumeId: %d", vid)
|
return fmt.Errorf("Volume not found, VolumeId: %d", vid)
|
||||||
|
@ -156,7 +160,10 @@ func (l *DiskLocation) DeleteVolume(vid VolumeId) (error) {
|
||||||
return l.deleteVolumeById(vid)
|
return l.deleteVolumeById(vid)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *DiskLocation) UnloadVolume(vid VolumeId) (error) {
|
func (l *DiskLocation) UnloadVolume(vid VolumeId) error {
|
||||||
|
l.Lock()
|
||||||
|
defer l.Unlock()
|
||||||
|
|
||||||
_, ok := l.volumes[vid]
|
_, ok := l.volumes[vid]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("Volume not loaded, VolumeId: %d", vid)
|
return fmt.Errorf("Volume not loaded, VolumeId: %d", vid)
|
||||||
|
|
Loading…
Reference in a new issue