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" "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)