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.
		
		
		
		
		
			
		
			
				
					
					
						
							64 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							64 lines
						
					
					
						
							1.5 KiB
						
					
					
				| 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 (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, | |
| 	} | |
| }
 |