From 1d86ac8761c1cf856c384076e14a8e26e536ec8d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 26 Apr 2016 20:45:35 -0700 Subject: [PATCH] just refactoring --- go/storage/disk_location.go | 31 ++++++++++++++++++++++++++++++- go/storage/store.go | 25 ++++++------------------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/go/storage/disk_location.go b/go/storage/disk_location.go index 146e53ed6..8cca1a68e 100644 --- a/go/storage/disk_location.go +++ b/go/storage/disk_location.go @@ -13,10 +13,14 @@ type DiskLocation struct { volumes map[VolumeId]*Volume } -func (mn *DiskLocation) reset() { +func NewDiskLocation(dir string, maxVolumeCount int) *DiskLocation { + location := &DiskLocation{Directory: dir, MaxVolumeCount: maxVolumeCount} + location.volumes = make(map[VolumeId]*Volume) + return location } func (l *DiskLocation) loadExistingVolumes(needleMapKind NeedleMapType) { + if dirs, err := ioutil.ReadDir(l.Directory); err == nil { for _, dir := range dirs { name := dir.Name() @@ -42,3 +46,28 @@ func (l *DiskLocation) loadExistingVolumes(needleMapKind NeedleMapType) { } glog.V(0).Infoln("Store started on dir:", l.Directory, "with", len(l.volumes), "volumes", "max", l.MaxVolumeCount) } + +func (l *DiskLocation) DeleteCollectionFromDiskLocation(collection string) (e error) { + for k, v := range l.volumes { + if v.Collection == collection { + e = l.deleteVolumeById(k) + if e != nil { + return + } + } + } + return +} + +func (l *DiskLocation) deleteVolumeById(vid VolumeId) (e error) { + v, ok := l.volumes[vid] + if !ok { + return + } + e = v.Destroy() + if e != nil { + return + } + delete(l.volumes, vid) + return +} diff --git a/go/storage/store.go b/go/storage/store.go index 386d53f09..dd312c075 100644 --- a/go/storage/store.go +++ b/go/storage/store.go @@ -89,8 +89,7 @@ func NewStore(port int, ip, publicUrl string, dirnames []string, maxVolumeCounts s = &Store{Port: port, Ip: ip, PublicUrl: publicUrl} s.Locations = make([]*DiskLocation, 0) for i := 0; i < len(dirnames); i++ { - location := &DiskLocation{Directory: dirnames[i], MaxVolumeCount: maxVolumeCounts[i]} - location.volumes = make(map[VolumeId]*Volume) + location := NewDiskLocation(dirnames[i], maxVolumeCounts[i]) location.loadExistingVolumes(needleMapKind) s.Locations = append(s.Locations, location) } @@ -134,26 +133,14 @@ func (s *Store) AddVolume(volumeListString string, collection string, needleMapK } func (s *Store) DeleteCollection(collection string) (e error) { for _, location := range s.Locations { - for k, v := range location.volumes { - if v.Collection == collection { - e = v.Destroy() - if e != nil { - return - } - delete(location.volumes, k) - } + e = location.DeleteCollectionFromDiskLocation(collection) + if e != nil { + return } } return } -func (s *Store) DeleteVolume(volumes map[VolumeId]*Volume, v *Volume) (e error) { - e = v.Destroy() - if e != nil { - return - } - delete(volumes, v.Id) - return -} + func (s *Store) findVolume(vid VolumeId) *Volume { for _, location := range s.Locations { if v, found := location.volumes[vid]; found { @@ -252,7 +239,7 @@ func (s *Store) SendHeartbeatToMaster() (masterNode string, secretKey security.S volumeMessages = append(volumeMessages, volumeMessage) } else { if v.exiredLongEnough(MAX_TTL_VOLUME_REMOVAL_DELAY) { - s.DeleteVolume(location.volumes, v) + location.deleteVolumeById(v.Id) glog.V(0).Infoln("volume", v.Id, "is deleted.") } else { glog.V(0).Infoln("volume", v.Id, "is expired.")