add locking to access l.volumes

This commit is contained in:
Chris Lu 2017-01-20 10:18:43 -08:00
parent bfd2739fce
commit 043b7a7c65

View File

@ -6,8 +6,9 @@ import (
"strings"
"sync"
"github.com/chrislusf/seaweedfs/weed/glog"
"fmt"
"github.com/chrislusf/seaweedfs/weed/glog"
)
type DiskLocation struct {
@ -27,12 +28,12 @@ func (l *DiskLocation) volumeIdFromPath(dir os.FileInfo) (VolumeId, string, erro
name := dir.Name()
if !dir.IsDir() && strings.HasSuffix(name, ".dat") {
collection := ""
base := name[:len(name) - len(".dat")]
base := name[:len(name)-len(".dat")]
i := strings.LastIndex(base, "_")
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
}
@ -148,7 +149,10 @@ func (l *DiskLocation) LoadVolume(vid VolumeId, needleMapKind NeedleMapType) boo
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]
if !ok {
return fmt.Errorf("Volume not found, VolumeId: %d", vid)
@ -156,7 +160,10 @@ func (l *DiskLocation) DeleteVolume(vid VolumeId) (error) {
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]
if !ok {
return fmt.Errorf("Volume not loaded, VolumeId: %d", vid)