Browse Source

Fix: Fail fast on unsupported volume versions (#8047)

* Fix: Fail fast when initializing volume with Version 0

* Fix: Fail fast when loading unsupported volume version (e.g. 0 or 4)

* Refactor: Use IsSupportedVersion helper function for version validation
pull/8049/head
Chris Lu 2 days ago
committed by GitHub
parent
commit
a473278bfa
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      weed/storage/needle/volume_version.go
  2. 3
      weed/storage/volume_loading.go
  3. 3
      weed/storage/volume_super_block.go

4
weed/storage/needle/volume_version.go

@ -11,3 +11,7 @@ const (
func GetCurrentVersion() Version { func GetCurrentVersion() Version {
return Version3 return Version3
} }
func IsSupportedVersion(v Version) bool {
return v >= Version1 && v <= Version3
}

3
weed/storage/volume_loading.go

@ -106,6 +106,9 @@ func (v *Volume) load(alsoLoadIndex bool, createDatIfMissing bool, needleMapKind
if alreadyHasSuperBlock { if alreadyHasSuperBlock {
err = v.readSuperBlock() err = v.readSuperBlock()
if err == nil { if err == nil {
if !needle.IsSupportedVersion(v.SuperBlock.Version) {
glog.Fatalf("Unsupported volume %d version %v", v.Id, v.SuperBlock.Version)
}
v.volumeInfo.Version = uint32(v.SuperBlock.Version) v.volumeInfo.Version = uint32(v.SuperBlock.Version)
} }
glog.V(2).Infof("readSuperBlock volume %d version %v", v.Id, v.SuperBlock.Version) glog.V(2).Infof("readSuperBlock volume %d version %v", v.Id, v.SuperBlock.Version)

3
weed/storage/volume_super_block.go

@ -18,6 +18,9 @@ func (v *Volume) maybeWriteSuperBlock(ver needle.Version) error {
return e return e
} }
if datSize == 0 { if datSize == 0 {
if !needle.IsSupportedVersion(ver) {
return fmt.Errorf("volume super block version %d is not supported", ver)
}
v.SuperBlock.Version = ver v.SuperBlock.Version = ver
_, e = v.DataBackend.WriteAt(v.SuperBlock.Bytes(), 0) _, e = v.DataBackend.WriteAt(v.SuperBlock.Bytes(), 0)
if e != nil && os.IsPermission(e) { if e != nil && os.IsPermission(e) {

Loading…
Cancel
Save