aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamás Gulácsi <tgulacsi78+waterhouse@gmail.com>2013-01-14 22:18:00 +0100
committerTamás Gulácsi <tgulacsi78+waterhouse@gmail.com>2013-01-14 22:18:00 +0100
commit92ffba2ab9561c066ec12379f2288f2a3ea1d9c5 (patch)
tree8caad98bfb245e9a8089501fa59ac5781aebfaa8
parentf262fed19784ad85d7cfef985f3dfcc09bd7180c (diff)
downloadseaweedfs-92ffba2ab9561c066ec12379f2288f2a3ea1d9c5.tar.xz
seaweedfs-92ffba2ab9561c066ec12379f2288f2a3ea1d9c5.zip
fix errors with frozen volume loading
-rw-r--r--weed-fs/src/pkg/storage/needle_map.go11
-rw-r--r--weed-fs/src/pkg/storage/store.go4
-rw-r--r--weed-fs/src/pkg/storage/volume.go9
3 files changed, 20 insertions, 4 deletions
diff --git a/weed-fs/src/pkg/storage/needle_map.go b/weed-fs/src/pkg/storage/needle_map.go
index c1b84358c..b173eb47f 100644
--- a/weed-fs/src/pkg/storage/needle_map.go
+++ b/weed-fs/src/pkg/storage/needle_map.go
@@ -178,7 +178,11 @@ func (nm *NeedleMap) Put(key uint64, offset uint32, size uint32) (int, error) {
return nm.indexFile.Write(nm.bytes)
}
func (nm *NeedleMap) Get(key uint64) (element *NeedleValue, ok bool) {
- element, ok = nm.m.Get(Key(key))
+ if nm.m != nil {
+ element, ok = nm.m.Get(Key(key))
+ } else {
+ element, ok = nm.fm.Get(Key(key))
+ }
return
}
func (nm *NeedleMap) Delete(key uint64) error {
@@ -202,5 +206,8 @@ func (nm *NeedleMap) ContentSize() uint64 {
// iterate through all needles using the iterator function
func (nm *NeedleMap) Walk(pedestrian func(*NeedleValue) error) (err error) {
- return nm.m.Walk(pedestrian)
+ if nm.m != nil {
+ return nm.m.Walk(pedestrian)
+ }
+ return nm.fm.Walk(pedestrian)
}
diff --git a/weed-fs/src/pkg/storage/store.go b/weed-fs/src/pkg/storage/store.go
index 161b855e3..d9e94ee56 100644
--- a/weed-fs/src/pkg/storage/store.go
+++ b/weed-fs/src/pkg/storage/store.go
@@ -118,7 +118,9 @@ func (s *Store) loadExistingVolumes() {
if s.volumes[vid] == nil {
if v, e := NewVolume(s.dir, vid, CopyNil); e == nil {
s.volumes[vid] = v
- log.Println("In dir", s.dir, "read volume =", vid, "replicationType =", v.replicaType, "version =", v.version, "size =", v.Size())
+ log.Println("In dir", s.dir, "read volume =", vid, "replicationType =", v.replicaType, "version =", v.version, "size =", v.Size(), "frozen?", !v.IsWritable())
+ } else {
+ log.Println("ERROR loading volume", vid, "in dir", s.dir, ":", e.Error())
}
}
}
diff --git a/weed-fs/src/pkg/storage/volume.go b/weed-fs/src/pkg/storage/volume.go
index d694f27ba..9a7c33a42 100644
--- a/weed-fs/src/pkg/storage/volume.go
+++ b/weed-fs/src/pkg/storage/volume.go
@@ -36,7 +36,14 @@ func (v *Volume) load() error {
fileName := path.Join(v.dir, v.Id.String())
v.dataFile, e = os.OpenFile(fileName+".dat", os.O_RDWR|os.O_CREATE, 0644)
if e != nil {
- return fmt.Errorf("cannot create Volume Data %s.dat: %s", fileName, e)
+ if os.IsPermission(e) {
+ if util.FileExists(fileName + ".cdb") {
+ v.dataFile, e = os.Open(fileName + ".dat")
+ }
+ }
+ if e != nil {
+ return fmt.Errorf("cannot create Volume Data %s.dat: %s", fileName, e)
+ }
}
if v.replicaType == CopyNil {
if e = v.readSuperBlock(); e != nil {