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.
		
		
		
		
		
			
		
			
				
					
					
						
							58 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							58 lines
						
					
					
						
							1.9 KiB
						
					
					
				| package pub_balancer | |
| 
 | |
| import ( | |
| 	"context" | |
| 	"fmt" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" | |
| 	"google.golang.org/grpc" | |
| ) | |
| 
 | |
| // PubBalancer <= PublisherToPubBalancer() <= Broker <=> Publish() | |
| // ExecuteBalanceActionMove from PubBalancer => AssignTopicPartitions() => Broker => Publish() | |
|  | |
| func (balancer *PubBalancer) ExecuteBalanceActionMove(move *BalanceActionMove, grpcDialOption grpc.DialOption) error { | |
| 	if _, found := balancer.Brokers.Get(move.SourceBroker); !found { | |
| 		return fmt.Errorf("source broker %s not found", move.SourceBroker) | |
| 	} | |
| 	if _, found := balancer.Brokers.Get(move.TargetBroker); !found { | |
| 		return fmt.Errorf("target broker %s not found", move.TargetBroker) | |
| 	} | |
| 
 | |
| 	err := pb.WithBrokerGrpcClient(false, move.TargetBroker, grpcDialOption, func(client mq_pb.SeaweedMessagingClient) error { | |
| 		_, err := client.AssignTopicPartitions(context.Background(), &mq_pb.AssignTopicPartitionsRequest{ | |
| 			Topic: move.TopicPartition.Topic.ToPbTopic(), | |
| 			BrokerPartitionAssignments: []*mq_pb.BrokerPartitionAssignment{ | |
| 				{ | |
| 					Partition: move.TopicPartition.ToPbPartition(), | |
| 				}, | |
| 			}, | |
| 			IsLeader:   true, | |
| 			IsDraining: false, | |
| 		}) | |
| 		return err | |
| 	}) | |
| 	if err != nil { | |
| 		return fmt.Errorf("assign topic partition %v to %s: %v", move.TopicPartition, move.TargetBroker, err) | |
| 	} | |
| 
 | |
| 	err = pb.WithBrokerGrpcClient(false, move.SourceBroker, grpcDialOption, func(client mq_pb.SeaweedMessagingClient) error { | |
| 		_, err := client.AssignTopicPartitions(context.Background(), &mq_pb.AssignTopicPartitionsRequest{ | |
| 			Topic: move.TopicPartition.Topic.ToPbTopic(), | |
| 			BrokerPartitionAssignments: []*mq_pb.BrokerPartitionAssignment{ | |
| 				{ | |
| 					Partition: move.TopicPartition.ToPbPartition(), | |
| 				}, | |
| 			}, | |
| 			IsLeader:   true, | |
| 			IsDraining: true, | |
| 		}) | |
| 		return err | |
| 	}) | |
| 	if err != nil { | |
| 		return fmt.Errorf("assign topic partition %v to %s: %v", move.TopicPartition, move.SourceBroker, err) | |
| 	} | |
| 
 | |
| 	return nil | |
| 
 | |
| }
 |