mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-11-24 16:53:14 +08:00
adds locking
This commit is contained in:
@@ -36,9 +36,6 @@ import (
|
|||||||
// Each subscription may not get data. It can act as a backup.
|
// Each subscription may not get data. It can act as a backup.
|
||||||
|
|
||||||
func (b *MessageQueueBroker) PublishMessage(stream mq_pb.SeaweedMessaging_PublishMessageServer) error {
|
func (b *MessageQueueBroker) PublishMessage(stream mq_pb.SeaweedMessaging_PublishMessageServer) error {
|
||||||
// 1. write to the volume server
|
|
||||||
// 2. find the topic metadata owning filer
|
|
||||||
// 3. write to the filer
|
|
||||||
|
|
||||||
req, err := stream.Recv()
|
req, err := stream.Recv()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ func (manager *LocalTopicManager) AddLocalPartition(topic Topic, localPartition
|
|||||||
if !manager.topics.SetIfAbsent(topic.String(), localTopic) {
|
if !manager.topics.SetIfAbsent(topic.String(), localTopic) {
|
||||||
localTopic, _ = manager.topics.Get(topic.String())
|
localTopic, _ = manager.topics.Get(topic.String())
|
||||||
}
|
}
|
||||||
localTopic.AddPartition(localPartition)
|
localTopic.addPartition(localPartition)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetLocalPartition gets a topic from the local topic manager
|
// GetLocalPartition gets a topic from the local topic manager
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import "sync"
|
|||||||
type LocalTopic struct {
|
type LocalTopic struct {
|
||||||
Topic
|
Topic
|
||||||
Partitions []*LocalPartition
|
Partitions []*LocalPartition
|
||||||
|
partitionLock sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLocalTopic(topic Topic) *LocalTopic {
|
func NewLocalTopic(topic Topic) *LocalTopic {
|
||||||
@@ -15,6 +16,9 @@ func NewLocalTopic(topic Topic) *LocalTopic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (localTopic *LocalTopic) findPartition(partition Partition) *LocalPartition {
|
func (localTopic *LocalTopic) findPartition(partition Partition) *LocalPartition {
|
||||||
|
localTopic.partitionLock.RLock()
|
||||||
|
defer localTopic.partitionLock.RUnlock()
|
||||||
|
|
||||||
for _, localPartition := range localTopic.Partitions {
|
for _, localPartition := range localTopic.Partitions {
|
||||||
if localPartition.Partition.Equals(partition) {
|
if localPartition.Partition.Equals(partition) {
|
||||||
return localPartition
|
return localPartition
|
||||||
@@ -23,6 +27,9 @@ func (localTopic *LocalTopic) findPartition(partition Partition) *LocalPartition
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (localTopic *LocalTopic) removePartition(partition Partition) bool {
|
func (localTopic *LocalTopic) removePartition(partition Partition) bool {
|
||||||
|
localTopic.partitionLock.Lock()
|
||||||
|
defer localTopic.partitionLock.Unlock()
|
||||||
|
|
||||||
foundPartitionIndex := -1
|
foundPartitionIndex := -1
|
||||||
for i, localPartition := range localTopic.Partitions {
|
for i, localPartition := range localTopic.Partitions {
|
||||||
if localPartition.Partition.Equals(partition) {
|
if localPartition.Partition.Equals(partition) {
|
||||||
@@ -37,9 +44,13 @@ func (localTopic *LocalTopic) removePartition(partition Partition) bool {
|
|||||||
localTopic.Partitions = append(localTopic.Partitions[:foundPartitionIndex], localTopic.Partitions[foundPartitionIndex+1:]...)
|
localTopic.Partitions = append(localTopic.Partitions[:foundPartitionIndex], localTopic.Partitions[foundPartitionIndex+1:]...)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
func (localTopic *LocalTopic) AddPartition(localPartition *LocalPartition) {
|
func (localTopic *LocalTopic) addPartition(localPartition *LocalPartition) {
|
||||||
if localTopic.findPartition(localPartition.Partition) != nil {
|
localTopic.partitionLock.Lock()
|
||||||
return
|
defer localTopic.partitionLock.Unlock()
|
||||||
|
for _, partition := range localTopic.Partitions {
|
||||||
|
if localPartition.Partition.Equals(partition.Partition) {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
localTopic.Partitions = append(localTopic.Partitions, localPartition)
|
localTopic.Partitions = append(localTopic.Partitions, localPartition)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user