aboutsummaryrefslogtreecommitdiff
path: root/go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2016-04-26 20:45:35 -0700
committerChris Lu <chris.lu@gmail.com>2016-04-26 20:45:35 -0700
commit1d86ac8761c1cf856c384076e14a8e26e536ec8d (patch)
tree09492a8c555175ef2754054916f4e0b786c1368e /go
parentc9e33d37098dfb86a1d262885060757837468c46 (diff)
downloadseaweedfs-1d86ac8761c1cf856c384076e14a8e26e536ec8d.tar.xz
seaweedfs-1d86ac8761c1cf856c384076e14a8e26e536ec8d.zip
just refactoring
Diffstat (limited to 'go')
-rw-r--r--go/storage/disk_location.go31
-rw-r--r--go/storage/store.go25
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.")