needle_types.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package types
  2. import (
  3. "fmt"
  4. "github.com/chrislusf/seaweedfs/weed/util"
  5. "math"
  6. "strconv"
  7. )
  8. type Offset struct {
  9. OffsetHigher
  10. OffsetLower
  11. }
  12. type OffsetLower struct {
  13. b3 byte
  14. b2 byte
  15. b1 byte
  16. b0 byte // the smaller byte
  17. }
  18. type Cookie uint32
  19. const (
  20. SizeSize = 4 // uint32 size
  21. NeedleHeaderSize = CookieSize + NeedleIdSize + SizeSize
  22. NeedleMapEntrySize = NeedleIdSize + OffsetSize + SizeSize
  23. TimestampSize = 8 // int64 size
  24. NeedlePaddingSize = 8
  25. TombstoneFileSize = math.MaxUint32
  26. CookieSize = 4
  27. )
  28. func CookieToBytes(bytes []byte, cookie Cookie) {
  29. util.Uint32toBytes(bytes, uint32(cookie))
  30. }
  31. func Uint32ToCookie(cookie uint32) Cookie {
  32. return Cookie(cookie)
  33. }
  34. func BytesToCookie(bytes []byte) Cookie {
  35. return Cookie(util.BytesToUint32(bytes[0:4]))
  36. }
  37. func ParseCookie(cookieString string) (Cookie, error) {
  38. cookie, err := strconv.ParseUint(cookieString, 16, 32)
  39. if err != nil {
  40. return 0, fmt.Errorf("needle cookie %s format error: %v", cookieString, err)
  41. }
  42. return Cookie(cookie), nil
  43. }