volume_info.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package storage
  2. import (
  3. "fmt"
  4. "sort"
  5. "github.com/seaweedfs/seaweedfs/weed/pb/master_pb"
  6. "github.com/seaweedfs/seaweedfs/weed/storage/needle"
  7. "github.com/seaweedfs/seaweedfs/weed/storage/super_block"
  8. )
  9. type VolumeInfo struct {
  10. Id needle.VolumeId
  11. Size uint64
  12. ReplicaPlacement *super_block.ReplicaPlacement
  13. Ttl *needle.TTL
  14. DiskType string
  15. DiskId uint32
  16. Collection string
  17. Version needle.Version
  18. FileCount int
  19. DeleteCount int
  20. DeletedByteCount uint64
  21. ReadOnly bool
  22. CompactRevision uint32
  23. ModifiedAtSecond int64
  24. RemoteStorageName string
  25. RemoteStorageKey string
  26. }
  27. func NewVolumeInfo(m *master_pb.VolumeInformationMessage) (vi VolumeInfo, err error) {
  28. vi = VolumeInfo{
  29. Id: needle.VolumeId(m.Id),
  30. Size: m.Size,
  31. Collection: m.Collection,
  32. FileCount: int(m.FileCount),
  33. DeleteCount: int(m.DeleteCount),
  34. DeletedByteCount: m.DeletedByteCount,
  35. ReadOnly: m.ReadOnly,
  36. Version: needle.Version(m.Version),
  37. CompactRevision: m.CompactRevision,
  38. ModifiedAtSecond: m.ModifiedAtSecond,
  39. RemoteStorageName: m.RemoteStorageName,
  40. RemoteStorageKey: m.RemoteStorageKey,
  41. DiskType: m.DiskType,
  42. DiskId: m.DiskId,
  43. }
  44. rp, e := super_block.NewReplicaPlacementFromByte(byte(m.ReplicaPlacement))
  45. if e != nil {
  46. return vi, e
  47. }
  48. vi.ReplicaPlacement = rp
  49. vi.Ttl = needle.LoadTTLFromUint32(m.Ttl)
  50. return vi, nil
  51. }
  52. func NewVolumeInfoFromShort(m *master_pb.VolumeShortInformationMessage) (vi VolumeInfo, err error) {
  53. vi = VolumeInfo{
  54. Id: needle.VolumeId(m.Id),
  55. Collection: m.Collection,
  56. Version: needle.Version(m.Version),
  57. }
  58. rp, e := super_block.NewReplicaPlacementFromByte(byte(m.ReplicaPlacement))
  59. if e != nil {
  60. return vi, e
  61. }
  62. vi.ReplicaPlacement = rp
  63. vi.Ttl = needle.LoadTTLFromUint32(m.Ttl)
  64. vi.DiskType = m.DiskType
  65. return vi, nil
  66. }
  67. func (vi VolumeInfo) IsRemote() bool {
  68. return vi.RemoteStorageName != ""
  69. }
  70. func (vi VolumeInfo) String() string {
  71. return fmt.Sprintf("Id:%d, Size:%d, ReplicaPlacement:%s, Collection:%s, Version:%v, FileCount:%d, DeleteCount:%d, DeletedByteCount:%d, ReadOnly:%v",
  72. vi.Id, vi.Size, vi.ReplicaPlacement, vi.Collection, vi.Version, vi.FileCount, vi.DeleteCount, vi.DeletedByteCount, vi.ReadOnly)
  73. }
  74. func (vi VolumeInfo) ToVolumeInformationMessage() *master_pb.VolumeInformationMessage {
  75. return &master_pb.VolumeInformationMessage{
  76. Id: uint32(vi.Id),
  77. Size: uint64(vi.Size),
  78. Collection: vi.Collection,
  79. FileCount: uint64(vi.FileCount),
  80. DeleteCount: uint64(vi.DeleteCount),
  81. DeletedByteCount: vi.DeletedByteCount,
  82. ReadOnly: vi.ReadOnly,
  83. ReplicaPlacement: uint32(vi.ReplicaPlacement.Byte()),
  84. Version: uint32(vi.Version),
  85. Ttl: vi.Ttl.ToUint32(),
  86. CompactRevision: vi.CompactRevision,
  87. ModifiedAtSecond: vi.ModifiedAtSecond,
  88. RemoteStorageName: vi.RemoteStorageName,
  89. RemoteStorageKey: vi.RemoteStorageKey,
  90. DiskType: vi.DiskType,
  91. DiskId: vi.DiskId,
  92. }
  93. }
  94. /*VolumesInfo sorting*/
  95. type volumeInfos []*VolumeInfo
  96. func (vis volumeInfos) Len() int {
  97. return len(vis)
  98. }
  99. func (vis volumeInfos) Less(i, j int) bool {
  100. return vis[i].Id < vis[j].Id
  101. }
  102. func (vis volumeInfos) Swap(i, j int) {
  103. vis[i], vis[j] = vis[j], vis[i]
  104. }
  105. func sortVolumeInfos(vis volumeInfos) {
  106. sort.Sort(vis)
  107. }