mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-08-01 17:46:55 +08:00
updated and added assignments
This commit is contained in:
parent
e8b05ecc91
commit
428fea45f3
@ -55,9 +55,9 @@ func (b *MessageQueueBroker) readTopicConfFromFiler(t topic.Topic) (conf *mq_pb.
|
|||||||
|
|
||||||
func (b *MessageQueueBroker) ensureTopicActiveAssignments(t topic.Topic, conf *mq_pb.ConfigureTopicResponse) (err error) {
|
func (b *MessageQueueBroker) ensureTopicActiveAssignments(t topic.Topic, conf *mq_pb.ConfigureTopicResponse) (err error) {
|
||||||
// also fix assignee broker if invalid
|
// also fix assignee broker if invalid
|
||||||
changedAssignments := pub_balancer.EnsureAssignmentsToActiveBrokers(b.Balancer.Brokers, conf.BrokerPartitionAssignments)
|
addedAssignments, updatedAssignments := pub_balancer.EnsureAssignmentsToActiveBrokers(b.Balancer.Brokers, conf.BrokerPartitionAssignments)
|
||||||
if len(changedAssignments) > 0 {
|
if len(addedAssignments) > 0 || len(updatedAssignments) > 0 {
|
||||||
glog.V(0).Infof("topic %v partition assignments changed: %v", t, changedAssignments)
|
glog.V(0).Infof("topic %v partition assignments added: %v updated: %v", t, addedAssignments, updatedAssignments)
|
||||||
if err = b.saveTopicConfToFiler(t.ToPbTopic(), conf); err != nil {
|
if err = b.saveTopicConfToFiler(t.ToPbTopic(), conf); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -56,22 +56,27 @@ func pickBrokers(brokers cmap.ConcurrentMap[string, *BrokerStats], count int32)
|
|||||||
return pickedBrokers
|
return pickedBrokers
|
||||||
}
|
}
|
||||||
|
|
||||||
func EnsureAssignmentsToActiveBrokers(activeBrokers cmap.ConcurrentMap[string,*BrokerStats], assignments []*mq_pb.BrokerPartitionAssignment) (changedAssignments []*mq_pb.BrokerPartitionAssignment) {
|
func EnsureAssignmentsToActiveBrokers(activeBrokers cmap.ConcurrentMap[string,*BrokerStats], assignments []*mq_pb.BrokerPartitionAssignment) (addedAssignments, updatedAssignments []*mq_pb.BrokerPartitionAssignment) {
|
||||||
for _, assignment := range assignments {
|
for _, assignment := range assignments {
|
||||||
if assignment.LeaderBroker == "" {
|
if assignment.LeaderBroker == "" {
|
||||||
changedAssignments = append(changedAssignments, assignment)
|
addedAssignments = append(addedAssignments, assignment)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, found := activeBrokers.Get(assignment.LeaderBroker); !found {
|
if _, found := activeBrokers.Get(assignment.LeaderBroker); !found {
|
||||||
changedAssignments = append(changedAssignments, assignment)
|
updatedAssignments = append(updatedAssignments, assignment)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pick the brokers with the least number of partitions
|
// pick the brokers with the least number of partitions
|
||||||
pickedBrokers := pickBrokers(activeBrokers, int32(len(changedAssignments)))
|
pickedBrokers := pickBrokers(activeBrokers, int32(len(addedAssignments)))
|
||||||
for i, assignment := range changedAssignments {
|
for i, assignment := range addedAssignments {
|
||||||
assignment.LeaderBroker = pickedBrokers[i]
|
assignment.LeaderBroker = pickedBrokers[i]
|
||||||
}
|
}
|
||||||
return changedAssignments
|
pickedBrokers = pickBrokers(activeBrokers, int32(len(updatedAssignments)))
|
||||||
|
for i, assignment := range updatedAssignments {
|
||||||
|
assignment.LeaderBroker = pickedBrokers[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user