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.
|
|
package erasure_coding
import ( "github.com/chrislusf/seaweedfs/weed/pb/master_pb" "github.com/chrislusf/seaweedfs/weed/storage/needle" )
// data structure used in master
type EcVolumeInfo struct { VolumeId needle.VolumeId Collection string shardIds uint16 // use bits to indicate the shard id
}
func (ecInfo *EcVolumeInfo) AddShardId(id ShardId) { ecInfo.shardIds |= (1 << id) }
func (ecInfo *EcVolumeInfo) RemoveShardId(id ShardId) { ecInfo.shardIds &^= (1 << id) }
func (ecInfo *EcVolumeInfo) HasShardId(id ShardId) bool { return ecInfo.shardIds&(1<<id) > 0 }
func (ecInfo *EcVolumeInfo) ShardIds() (ret []ShardId) { for i := ShardId(0); i < DataShardsCount+ParityShardsCount; i++ { if ecInfo.HasShardId(i) { ret = append(ret, i) } } return }
func (ecInfo *EcVolumeInfo) ToVolumeEcShardInformationMessage() (ret []*master_pb.VolumeEcShardInformationMessage) { for _, shard := range ecInfo.ShardIds() { ret = append(ret, &master_pb.VolumeEcShardInformationMessage{ Id: uint32(ecInfo.VolumeId), EcIndex: uint32(shard), Collection: ecInfo.Collection, })
} return }
|