1
0
Fork 0
mirror of https://github.com/chrislusf/seaweedfs synced 2024-06-26 04:18:59 +02:00
seaweedfs/weed/storage/types/needle_types.go
2022-06-04 18:15:39 -07:00

70 lines
1.4 KiB
Go

package types
import (
"fmt"
"strconv"
"github.com/chrislusf/seaweedfs/weed/util"
)
type Offset struct {
OffsetHigher
OffsetLower
}
type Size int32
func (s Size) IsDeleted() bool {
return s < 0 || s == TombstoneFileSize
}
func (s Size) IsValid() bool {
return s > 0 && s != TombstoneFileSize
}
type OffsetLower struct {
b3 byte
b2 byte
b1 byte
b0 byte // the smaller byte
}
type Cookie uint32
const (
SizeSize = 4 // uint32 size
NeedleHeaderSize = CookieSize + NeedleIdSize + SizeSize
DataSizeSize = 4
NeedleMapEntrySize = NeedleIdSize + OffsetSize + SizeSize
TimestampSize = 8 // int64 size
NeedlePaddingSize = 8
TombstoneFileSize = Size(-1)
CookieSize = 4
)
func CookieToBytes(bytes []byte, cookie Cookie) {
util.Uint32toBytes(bytes, uint32(cookie))
}
func Uint32ToCookie(cookie uint32) Cookie {
return Cookie(cookie)
}
func BytesToCookie(bytes []byte) Cookie {
return Cookie(util.BytesToUint32(bytes[0:4]))
}
func ParseCookie(cookieString string) (Cookie, error) {
cookie, err := strconv.ParseUint(cookieString, 16, 32)
if err != nil {
return 0, fmt.Errorf("needle cookie %s format error: %v", cookieString, err)
}
return Cookie(cookie), nil
}
func BytesToSize(bytes []byte) Size {
return Size(util.BytesToUint32(bytes))
}
func SizeToBytes(bytes []byte, size Size) {
util.Uint32toBytes(bytes, uint32(size))
}