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/8043/merge
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 {
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 {
err = v.readSuperBlock()
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)
}
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
}
if datSize == 0 {
if !needle.IsSupportedVersion(ver) {
return fmt.Errorf("volume super block version %d is not supported", ver)
}
v.SuperBlock.Version = ver
_, e = v.DataBackend.WriteAt(v.SuperBlock.Bytes(), 0)
if e != nil && os.IsPermission(e) {

Loading…
Cancel
Save