diff options
| author | Chris Lu <chris.lu@gmail.com> | 2017-01-06 10:22:20 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2017-01-06 10:22:20 -0800 |
| commit | 13e7069eb9cd72f94e72acb8fbbc9dd0307da703 (patch) | |
| tree | a093cbe0df8c2d06ea335e616bb5246f9c45ea04 /weed/storage/volume_checking.go | |
| parent | 54dd925283f443b09db77717c86eea5bf0f9d740 (diff) | |
| download | seaweedfs-13e7069eb9cd72f94e72acb8fbbc9dd0307da703.tar.xz seaweedfs-13e7069eb9cd72f94e72acb8fbbc9dd0307da703.zip | |
keep track of total data file size
Diffstat (limited to 'weed/storage/volume_checking.go')
| -rw-r--r-- | weed/storage/volume_checking.go | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/weed/storage/volume_checking.go b/weed/storage/volume_checking.go index 48f707594..6d4011f27 100644 --- a/weed/storage/volume_checking.go +++ b/weed/storage/volume_checking.go @@ -7,27 +7,33 @@ import ( "github.com/chrislusf/seaweedfs/weed/util" ) -func CheckVolumeDataIntegrity(v *Volume, indexFile *os.File) error { +func getActualSize(size uint32) int64 { + padding := NeedlePaddingSize - ((NeedleHeaderSize + size + NeedleChecksumSize) % NeedlePaddingSize) + return NeedleHeaderSize + int64(size) + NeedleChecksumSize + int64(padding) +} + +func CheckVolumeDataIntegrity(v *Volume, indexFile *os.File) (int64, error) { var indexSize int64 var e error if indexSize, e = verifyIndexFileIntegrity(indexFile); e != nil { - return fmt.Errorf("verifyIndexFileIntegrity %s failed: %v", indexFile.Name(), e) + return 0, fmt.Errorf("verifyIndexFileIntegrity %s failed: %v", indexFile.Name(), e) } if indexSize == 0 { - return nil + return int64(SuperBlockSize), nil } var lastIdxEntry []byte if lastIdxEntry, e = readIndexEntryAtOffset(indexFile, indexSize-NeedleIndexSize); e != nil { - return fmt.Errorf("readLastIndexEntry %s failed: %v", indexFile.Name(), e) + return 0, fmt.Errorf("readLastIndexEntry %s failed: %v", indexFile.Name(), e) } key, offset, size := idxFileEntry(lastIdxEntry) - if offset == 0 { - return nil + if offset == 0 || size == TombstoneFileSize { + return 0, 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) + return 0, fmt.Errorf("verifyNeedleIntegrity %s failed: %v", indexFile.Name(), e) } - return nil + + return int64(offset)*int64(NeedlePaddingSize) + getActualSize(size), nil } func verifyIndexFileIntegrity(indexFile *os.File) (indexSize int64, err error) { |
