aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author霍晓栋 <huoxd@jiedaibao.com>2016-07-25 14:54:40 +0800
committer霍晓栋 <huoxd@jiedaibao.com>2016-07-25 14:54:40 +0800
commit09bd3d015d02fb9a8c237d64586a0fbc8a6bde8f (patch)
tree372a74f8977845aa567d100be00143ae590feb57
parent78678f4bcb7aa6b18cd364f86135b54e2d633f24 (diff)
downloadseaweedfs-09bd3d015d02fb9a8c237d64586a0fbc8a6bde8f.tar.xz
seaweedfs-09bd3d015d02fb9a8c237d64586a0fbc8a6bde8f.zip
deleted index entry could not point to deleted needle
-rw-r--r--weed/storage/volume_checking.go4
-rw-r--r--weed/topology/volume_layout.go1
2 files changed, 4 insertions, 1 deletions
diff --git a/weed/storage/volume_checking.go b/weed/storage/volume_checking.go
index 00ce0aab1..5fcaf3b66 100644
--- a/weed/storage/volume_checking.go
+++ b/weed/storage/volume_checking.go
@@ -21,6 +21,10 @@ func CheckVolumeDataIntegrity(v *Volume, indexFile *os.File) error {
return fmt.Errorf("readLastIndexEntry %s failed: %v", indexFile.Name(), e)
}
key, offset, size := idxFileEntry(lastIdxEntry)
+ //deleted index entry could not point to deleted needle
+ if offset == 0 || size == 0 {
+ return nil
+ }
if e = verifyNeedleIntegrity(v.dataFile, v.Version(), int64(offset)*NeedlePaddingSize, key, size); e != nil {
return fmt.Errorf("verifyNeedleIntegrity %s failed: %v", indexFile.Name(), e)
}
diff --git a/weed/topology/volume_layout.go b/weed/topology/volume_layout.go
index 066f5f69a..afb14b6e4 100644
--- a/weed/topology/volume_layout.go
+++ b/weed/topology/volume_layout.go
@@ -43,7 +43,6 @@ func (vl *VolumeLayout) RegisterVolume(v *storage.VolumeInfo, dn *DataNode) {
if _, ok := vl.vid2location[v.Id]; !ok {
vl.vid2location[v.Id] = NewVolumeLocationList()
}
- vl.vid2location[v.Id].Set(dn)
glog.V(4).Infoln("volume", v.Id, "added to dn", dn.Id(), "len", vl.vid2location[v.Id].Length(), "copy", v.ReplicaPlacement.GetCopyCount())
if vl.vid2location[v.Id].Length() == vl.rp.GetCopyCount() && vl.isWritable(v) {
if _, ok := vl.oversizedVolumes[v.Id]; !ok {