|
|
@ -5,6 +5,7 @@ import ( |
|
|
|
"os" |
|
|
|
|
|
|
|
"github.com/chrislusf/seaweedfs/go/glog" |
|
|
|
"github.com/chrislusf/seaweedfs/go/util" |
|
|
|
) |
|
|
|
|
|
|
|
const ( |
|
|
@ -16,12 +17,14 @@ const ( |
|
|
|
* Byte 0: version, 1 or 2 |
|
|
|
* Byte 1: Replica Placement strategy, 000, 001, 002, 010, etc |
|
|
|
* Byte 2 and byte 3: Time to live. See TTL for definition |
|
|
|
* Byte 4 and byte 5: The number of times the volume has been compacted. |
|
|
|
* Rest bytes: Reserved |
|
|
|
*/ |
|
|
|
type SuperBlock struct { |
|
|
|
version Version |
|
|
|
ReplicaPlacement *ReplicaPlacement |
|
|
|
Ttl *TTL |
|
|
|
CompactRevision uint16 |
|
|
|
} |
|
|
|
|
|
|
|
func (s *SuperBlock) Version() Version { |
|
|
@ -32,6 +35,7 @@ func (s *SuperBlock) Bytes() []byte { |
|
|
|
header[0] = byte(s.version) |
|
|
|
header[1] = s.ReplicaPlacement.Byte() |
|
|
|
s.Ttl.ToBytes(header[2:4]) |
|
|
|
util.Uint16toBytes(header[4:6], s.CompactRevision) |
|
|
|
return header |
|
|
|
} |
|
|
|
|
|
|
@ -72,5 +76,6 @@ func ParseSuperBlock(header []byte) (superBlock SuperBlock, err error) { |
|
|
|
err = fmt.Errorf("cannot read replica type: %s", err.Error()) |
|
|
|
} |
|
|
|
superBlock.Ttl = LoadTTLFromBytes(header[2:4]) |
|
|
|
superBlock.CompactRevision = util.BytesToUint16(header[4:6]) |
|
|
|
return |
|
|
|
} |