mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-19 14:17:57 +08:00
avoid race conditions for OnPeerUpdate (#3525)
https://github.com/seaweedfs/seaweedfs/issues/3524
This commit is contained in:

committed by
GitHub

parent
4f7a1f67cd
commit
e90ab4ac60
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/seaweedfs/seaweedfs/weed/stats"
|
||||
@@ -28,7 +29,8 @@ type MasterClient struct {
|
||||
vidMap
|
||||
vidMapCacheSize int
|
||||
|
||||
OnPeerUpdate func(update *master_pb.ClusterNodeUpdate, startFrom time.Time)
|
||||
OnPeerUpdate func(update *master_pb.ClusterNodeUpdate, startFrom time.Time)
|
||||
OnPeerUpdateAccessLock sync.RWMutex
|
||||
}
|
||||
|
||||
func NewMasterClient(grpcDialOption grpc.DialOption, filerGroup string, clientType string, clientHost pb.ServerAddress, clientDataCenter string, rack string, masters map[string]pb.ServerAddress) *MasterClient {
|
||||
@@ -44,6 +46,12 @@ func NewMasterClient(grpcDialOption grpc.DialOption, filerGroup string, clientTy
|
||||
}
|
||||
}
|
||||
|
||||
func (mc *MasterClient) SetOnPeerUpdateFn(onPeerUpdate func(update *master_pb.ClusterNodeUpdate, startFrom time.Time)) {
|
||||
mc.OnPeerUpdateAccessLock.Lock()
|
||||
mc.OnPeerUpdate = onPeerUpdate
|
||||
mc.OnPeerUpdateAccessLock.Unlock()
|
||||
}
|
||||
|
||||
func (mc *MasterClient) GetLookupFileIdFunction() LookupFileIdFunctionType {
|
||||
return mc.LookupFileIdWithFallback
|
||||
}
|
||||
@@ -219,6 +227,7 @@ func (mc *MasterClient) tryConnectToMaster(master pb.ServerAddress) (nextHintedL
|
||||
|
||||
if resp.ClusterNodeUpdate != nil {
|
||||
update := resp.ClusterNodeUpdate
|
||||
mc.OnPeerUpdateAccessLock.RLock()
|
||||
if mc.OnPeerUpdate != nil {
|
||||
if update.FilerGroup == mc.FilerGroup {
|
||||
if update.IsAdd {
|
||||
@@ -230,6 +239,7 @@ func (mc *MasterClient) tryConnectToMaster(master pb.ServerAddress) (nextHintedL
|
||||
mc.OnPeerUpdate(update, time.Now())
|
||||
}
|
||||
}
|
||||
mc.OnPeerUpdateAccessLock.RUnlock()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
Reference in New Issue
Block a user