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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with
10 additions and
0 deletions
weed/storage/needle/volume_version.go
weed/storage/volume_loading.go
weed/storage/volume_super_block.go
@ -11,3 +11,7 @@ const (
func GetCurrentVersion ( ) Version {
return Version3
}
func IsSupportedVersion ( v Version ) bool {
return v >= Version1 && v <= Version3
}
@ -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 )
@ -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 ) {