You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							118 lines
						
					
					
						
							3.3 KiB
						
					
					
				| package storage | |
| 
 | |
| import ( | |
| 	"fmt" | |
| 	"sort" | |
| 
 | |
| 	"github.com/chrislusf/seaweedfs/weed/pb/master_pb" | |
| 	"github.com/chrislusf/seaweedfs/weed/storage/needle" | |
| 	"github.com/chrislusf/seaweedfs/weed/storage/super_block" | |
| ) | |
| 
 | |
| type VolumeInfo struct { | |
| 	Id                needle.VolumeId | |
| 	Size              uint64 | |
| 	ReplicaPlacement  *super_block.ReplicaPlacement | |
| 	Ttl               *needle.TTL | |
| 	DiskType          string | |
| 	Collection        string | |
| 	Version           needle.Version | |
| 	FileCount         int | |
| 	DeleteCount       int | |
| 	DeletedByteCount  uint64 | |
| 	ReadOnly          bool | |
| 	CompactRevision   uint32 | |
| 	ModifiedAtSecond  int64 | |
| 	RemoteStorageName string | |
| 	RemoteStorageKey  string | |
| } | |
| 
 | |
| func NewVolumeInfo(m *master_pb.VolumeInformationMessage) (vi VolumeInfo, err error) { | |
| 	vi = VolumeInfo{ | |
| 		Id:                needle.VolumeId(m.Id), | |
| 		Size:              m.Size, | |
| 		Collection:        m.Collection, | |
| 		FileCount:         int(m.FileCount), | |
| 		DeleteCount:       int(m.DeleteCount), | |
| 		DeletedByteCount:  m.DeletedByteCount, | |
| 		ReadOnly:          m.ReadOnly, | |
| 		Version:           needle.Version(m.Version), | |
| 		CompactRevision:   m.CompactRevision, | |
| 		ModifiedAtSecond:  m.ModifiedAtSecond, | |
| 		RemoteStorageName: m.RemoteStorageName, | |
| 		RemoteStorageKey:  m.RemoteStorageKey, | |
| 		DiskType:          m.DiskType, | |
| 	} | |
| 	rp, e := super_block.NewReplicaPlacementFromByte(byte(m.ReplicaPlacement)) | |
| 	if e != nil { | |
| 		return vi, e | |
| 	} | |
| 	vi.ReplicaPlacement = rp | |
| 	vi.Ttl = needle.LoadTTLFromUint32(m.Ttl) | |
| 	return vi, nil | |
| } | |
| 
 | |
| func NewVolumeInfoFromShort(m *master_pb.VolumeShortInformationMessage) (vi VolumeInfo, err error) { | |
| 	vi = VolumeInfo{ | |
| 		Id:         needle.VolumeId(m.Id), | |
| 		Collection: m.Collection, | |
| 		Version:    needle.Version(m.Version), | |
| 	} | |
| 	rp, e := super_block.NewReplicaPlacementFromByte(byte(m.ReplicaPlacement)) | |
| 	if e != nil { | |
| 		return vi, e | |
| 	} | |
| 	vi.ReplicaPlacement = rp | |
| 	vi.Ttl = needle.LoadTTLFromUint32(m.Ttl) | |
| 	vi.DiskType = m.DiskType | |
| 	return vi, nil | |
| } | |
| 
 | |
| func (vi VolumeInfo) IsRemote() bool { | |
| 	return vi.RemoteStorageName != "" | |
| } | |
| 
 | |
| func (vi VolumeInfo) String() string { | |
| 	return fmt.Sprintf("Id:%d, Size:%d, ReplicaPlacement:%s, Collection:%s, Version:%v, FileCount:%d, DeleteCount:%d, DeletedByteCount:%d, ReadOnly:%v", | |
| 		vi.Id, vi.Size, vi.ReplicaPlacement, vi.Collection, vi.Version, vi.FileCount, vi.DeleteCount, vi.DeletedByteCount, vi.ReadOnly) | |
| } | |
| 
 | |
| func (vi VolumeInfo) ToVolumeInformationMessage() *master_pb.VolumeInformationMessage { | |
| 	return &master_pb.VolumeInformationMessage{ | |
| 		Id:                uint32(vi.Id), | |
| 		Size:              uint64(vi.Size), | |
| 		Collection:        vi.Collection, | |
| 		FileCount:         uint64(vi.FileCount), | |
| 		DeleteCount:       uint64(vi.DeleteCount), | |
| 		DeletedByteCount:  vi.DeletedByteCount, | |
| 		ReadOnly:          vi.ReadOnly, | |
| 		ReplicaPlacement:  uint32(vi.ReplicaPlacement.Byte()), | |
| 		Version:           uint32(vi.Version), | |
| 		Ttl:               vi.Ttl.ToUint32(), | |
| 		CompactRevision:   vi.CompactRevision, | |
| 		ModifiedAtSecond:  vi.ModifiedAtSecond, | |
| 		RemoteStorageName: vi.RemoteStorageName, | |
| 		RemoteStorageKey:  vi.RemoteStorageKey, | |
| 		DiskType:          vi.DiskType, | |
| 	} | |
| } | |
| 
 | |
| /*VolumesInfo sorting*/ | |
| 
 | |
| type volumeInfos []*VolumeInfo | |
| 
 | |
| func (vis volumeInfos) Len() int { | |
| 	return len(vis) | |
| } | |
| 
 | |
| func (vis volumeInfos) Less(i, j int) bool { | |
| 	return vis[i].Id < vis[j].Id | |
| } | |
| 
 | |
| func (vis volumeInfos) Swap(i, j int) { | |
| 	vis[i], vis[j] = vis[j], vis[i] | |
| } | |
| 
 | |
| func sortVolumeInfos(vis volumeInfos) { | |
| 	sort.Sort(vis) | |
| }
 |