mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
Don't return actual file size from CheckVolumeDataIntegrity, it will be 0 if last needle is a tombstone, so it's not reliable anyway
This commit is contained in:
parent
4fb5bb09b6
commit
0656838fe5
|
@ -12,28 +12,28 @@ func getActualSize(size uint32) int64 {
|
||||||
return NeedleHeaderSize + int64(size) + NeedleChecksumSize + int64(padding)
|
return NeedleHeaderSize + int64(size) + NeedleChecksumSize + int64(padding)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CheckVolumeDataIntegrity(v *Volume, indexFile *os.File) (int64, error) {
|
func CheckVolumeDataIntegrity(v *Volume, indexFile *os.File) (error) {
|
||||||
var indexSize int64
|
var indexSize int64
|
||||||
var e error
|
var e error
|
||||||
if indexSize, e = verifyIndexFileIntegrity(indexFile); e != nil {
|
if indexSize, e = verifyIndexFileIntegrity(indexFile); e != nil {
|
||||||
return 0, fmt.Errorf("verifyIndexFileIntegrity %s failed: %v", indexFile.Name(), e)
|
return fmt.Errorf("verifyIndexFileIntegrity %s failed: %v", indexFile.Name(), e)
|
||||||
}
|
}
|
||||||
if indexSize == 0 {
|
if indexSize == 0 {
|
||||||
return int64(SuperBlockSize), nil
|
return nil
|
||||||
}
|
}
|
||||||
var lastIdxEntry []byte
|
var lastIdxEntry []byte
|
||||||
if lastIdxEntry, e = readIndexEntryAtOffset(indexFile, indexSize-NeedleIndexSize); e != nil {
|
if lastIdxEntry, e = readIndexEntryAtOffset(indexFile, indexSize-NeedleIndexSize); e != nil {
|
||||||
return 0, fmt.Errorf("readLastIndexEntry %s failed: %v", indexFile.Name(), e)
|
return fmt.Errorf("readLastIndexEntry %s failed: %v", indexFile.Name(), e)
|
||||||
}
|
}
|
||||||
key, offset, size := idxFileEntry(lastIdxEntry)
|
key, offset, size := idxFileEntry(lastIdxEntry)
|
||||||
if offset == 0 || size == TombstoneFileSize {
|
if offset == 0 || size == TombstoneFileSize {
|
||||||
return 0, nil
|
return nil
|
||||||
}
|
}
|
||||||
if e = verifyNeedleIntegrity(v.dataFile, v.Version(), int64(offset)*NeedlePaddingSize, key, size); e != nil {
|
if e = verifyNeedleIntegrity(v.dataFile, v.Version(), int64(offset)*NeedlePaddingSize, key, size); e != nil {
|
||||||
return 0, fmt.Errorf("verifyNeedleIntegrity %s failed: %v", indexFile.Name(), e)
|
return fmt.Errorf("verifyNeedleIntegrity %s failed: %v", indexFile.Name(), e)
|
||||||
}
|
}
|
||||||
|
|
||||||
return int64(offset)*int64(NeedlePaddingSize) + getActualSize(size), nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyIndexFileIntegrity(indexFile *os.File) (indexSize int64, err error) {
|
func verifyIndexFileIntegrity(indexFile *os.File) (indexSize int64, err error) {
|
||||||
|
|
|
@ -64,7 +64,7 @@ func (v *Volume) load(alsoLoadIndex bool, createDatIfMissing bool, needleMapKind
|
||||||
return fmt.Errorf("cannot write Volume Index %s.idx: %v", fileName, e)
|
return fmt.Errorf("cannot write Volume Index %s.idx: %v", fileName, e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if _, e = CheckVolumeDataIntegrity(v, indexFile); e != nil {
|
if e = CheckVolumeDataIntegrity(v, indexFile); e != nil {
|
||||||
v.readOnly = true
|
v.readOnly = true
|
||||||
glog.V(0).Infof("volumeDataIntegrityChecking failed %v", e)
|
glog.V(0).Infof("volumeDataIntegrityChecking failed %v", e)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue