|
|
@ -56,34 +56,35 @@ func (b *MessageQueueBroker) readTopicConfFromFiler(t topic.Topic) (conf *mq_pb. |
|
|
|
return conf, nil |
|
|
|
} |
|
|
|
|
|
|
|
func (b *MessageQueueBroker) GetOrGenLocalPartition(t topic.Topic, partition topic.Partition) (localPartition *topic.LocalPartition, err error) { |
|
|
|
func (b *MessageQueueBroker) GetOrGenLocalPartition(t topic.Topic, partition topic.Partition) (localPartition *topic.LocalPartition, isGenerated bool, err error) { |
|
|
|
b.accessLock.Lock() |
|
|
|
defer b.accessLock.Unlock() |
|
|
|
|
|
|
|
if localPartition = b.localTopicManager.GetTopicPartition(t, partition); localPartition == nil { |
|
|
|
localPartition, err = b.genLocalPartitionFromFiler(t, partition) |
|
|
|
localPartition, isGenerated, err = b.genLocalPartitionFromFiler(t, partition) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
return nil, false, err |
|
|
|
} |
|
|
|
} |
|
|
|
return localPartition, nil |
|
|
|
return localPartition, isGenerated, nil |
|
|
|
} |
|
|
|
|
|
|
|
func (b *MessageQueueBroker) genLocalPartitionFromFiler(t topic.Topic, partition topic.Partition) (localPartition *topic.LocalPartition, err error) { |
|
|
|
func (b *MessageQueueBroker) genLocalPartitionFromFiler(t topic.Topic, partition topic.Partition) (localPartition *topic.LocalPartition, isGenerated bool, err error) { |
|
|
|
self := b.option.BrokerAddress() |
|
|
|
conf, err := b.readTopicConfFromFiler(t) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
return nil, isGenerated, err |
|
|
|
} |
|
|
|
for _, assignment := range conf.BrokerPartitionAssignments { |
|
|
|
if assignment.LeaderBroker == string(self) && partition.Equals(topic.FromPbPartition(assignment.Partition)) { |
|
|
|
localPartition = topic.FromPbBrokerPartitionAssignment(b.option.BrokerAddress(), partition, assignment, b.genLogFlushFunc(t, assignment.Partition), b.genLogOnDiskReadFunc(t, assignment.Partition)) |
|
|
|
b.localTopicManager.AddTopicPartition(t, localPartition) |
|
|
|
isGenerated = true |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return localPartition, nil |
|
|
|
return localPartition, isGenerated, nil |
|
|
|
} |
|
|
|
|
|
|
|
func (b *MessageQueueBroker) ensureTopicActiveAssignments(t topic.Topic, conf *mq_pb.ConfigureTopicResponse) (err error) { |
|
|
|