1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package topic
- import "github.com/seaweedfs/seaweedfs/weed/pb/mq_pb"
- const PartitionCount = 4096
- type Partition struct {
- RangeStart int32
- RangeStop int32 // exclusive
- RingSize int32
- UnixTimeNs int64 // in nanoseconds
- }
- func NewPartition(rangeStart, rangeStop, ringSize int32, unixTimeNs int64) *Partition {
- return &Partition{
- RangeStart: rangeStart,
- RangeStop: rangeStop,
- RingSize: ringSize,
- UnixTimeNs: unixTimeNs,
- }
- }
- func (partition Partition) Equals(other Partition) bool {
- if partition.RangeStart != other.RangeStart {
- return false
- }
- if partition.RangeStop != other.RangeStop {
- return false
- }
- if partition.RingSize != other.RingSize {
- return false
- }
- if partition.UnixTimeNs != other.UnixTimeNs {
- return false
- }
- return true
- }
- func FromPbPartition(partition *mq_pb.Partition) Partition {
- return Partition{
- RangeStart: partition.RangeStart,
- RangeStop: partition.RangeStop,
- RingSize: partition.RingSize,
- UnixTimeNs: partition.UnixTimeNs,
- }
- }
- func SplitPartitions(targetCount int32, ts int64) []*Partition {
- partitions := make([]*Partition, 0, targetCount)
- partitionSize := PartitionCount / targetCount
- for i := int32(0); i < targetCount; i++ {
- partitionStop := (i + 1) * partitionSize
- if i == targetCount-1 {
- partitionStop = PartitionCount
- }
- partitions = append(partitions, &Partition{
- RangeStart: i * partitionSize,
- RangeStop: partitionStop,
- RingSize: PartitionCount,
- UnixTimeNs: ts,
- })
- }
- return partitions
- }
- func (partition Partition) ToPbPartition() *mq_pb.Partition {
- return &mq_pb.Partition{
- RangeStart: partition.RangeStart,
- RangeStop: partition.RangeStop,
- RingSize: partition.RingSize,
- UnixTimeNs: partition.UnixTimeNs,
- }
- }
- func (partition Partition) Overlaps(partition2 Partition) bool {
- if partition.RangeStart >= partition2.RangeStop {
- return false
- }
- if partition.RangeStop <= partition2.RangeStart {
- return false
- }
- return true
- }
|