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.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							121 lines
						
					
					
						
							3.4 KiB
						
					
					
				
								package storage
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"fmt"
							 | 
						|
									"sort"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/pb/master_pb"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/storage/needle"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/storage/super_block"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								type VolumeInfo struct {
							 | 
						|
									Id                needle.VolumeId
							 | 
						|
									Size              uint64
							 | 
						|
									ReplicaPlacement  *super_block.ReplicaPlacement
							 | 
						|
									Ttl               *needle.TTL
							 | 
						|
									DiskType          string
							 | 
						|
									DiskId            uint32
							 | 
						|
									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,
							 | 
						|
										DiskId:            m.DiskId,
							 | 
						|
									}
							 | 
						|
									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,
							 | 
						|
										DiskId:            vi.DiskId,
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/*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)
							 | 
						|
								}
							 |