aboutsummaryrefslogtreecommitdiff
path: root/weed/wdclient/masterclient.go
diff options
context:
space:
mode:
authorLHHDZ <changlin.shi@ly.com>2022-09-06 11:00:16 +0800
committerGitHub <noreply@github.com>2022-09-05 20:00:16 -0700
commitbc629665de418ce71c85f83ae618b8f7e5ac42bc (patch)
treeead15a555e3656db5ed0a2fc5de7ec8545c37e01 /weed/wdclient/masterclient.go
parent7c277f36ec0cbe8fe0bfa41c8971ef0d5d49245b (diff)
downloadseaweedfs-bc629665de418ce71c85f83ae618b8f7e5ac42bc.tar.xz
seaweedfs-bc629665de418ce71c85f83ae618b8f7e5ac42bc.zip
fix bug due to data racing on VidMap (#3606)
Diffstat (limited to 'weed/wdclient/masterclient.go')
-rw-r--r--weed/wdclient/masterclient.go9
1 files changed, 6 insertions, 3 deletions
diff --git a/weed/wdclient/masterclient.go b/weed/wdclient/masterclient.go
index 6d88e56e9..b4888f448 100644
--- a/weed/wdclient/masterclient.go
+++ b/weed/wdclient/masterclient.go
@@ -27,7 +27,7 @@ type MasterClient struct {
masters map[string]pb.ServerAddress
grpcDialOption grpc.DialOption
- vidMap
+ *vidMap
vidMapCacheSize int
OnPeerUpdate func(update *master_pb.ClusterNodeUpdate, startFrom time.Time)
OnPeerUpdateLock sync.RWMutex
@@ -303,9 +303,12 @@ func (mc *MasterClient) resetVidMap() {
DataCenter: mc.DataCenter,
cache: mc.cache,
}
- mc.vidMap = newVidMap(mc.DataCenter)
- mc.vidMap.cache = tail
+ nvm := newVidMap(mc.DataCenter)
+ nvm.cache = tail
+ mc.vidMap = nvm
+
+ //trim
for i := 0; i < mc.vidMapCacheSize && tail.cache != nil; i++ {
if i == mc.vidMapCacheSize-1 {
tail.cache = nil