aboutsummaryrefslogtreecommitdiff
path: root/weed/server/master_server.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/master_server.go')
-rw-r--r--weed/server/master_server.go11
1 files changed, 6 insertions, 5 deletions
diff --git a/weed/server/master_server.go b/weed/server/master_server.go
index e75c4df54..7f9bff389 100644
--- a/weed/server/master_server.go
+++ b/weed/server/master_server.go
@@ -11,6 +11,7 @@ import (
"regexp"
"strings"
"sync"
+ "sync/atomic"
"time"
"github.com/chrislusf/seaweedfs/weed/cluster"
@@ -65,8 +66,8 @@ type MasterServer struct {
boundedLeaderChan chan int
- onPeerUpdateDoneCn chan string
- onPeerUpdateDoneCnExist bool
+ onPeerUpdateDoneCn chan string
+ onPeerUpdateGoroutineCount uint32
// notifying clients
clientChansLock sync.RWMutex
@@ -366,15 +367,16 @@ func (ms *MasterServer) OnPeerUpdate(update *master_pb.ClusterNodeUpdate, startF
hashicorpRaft.ServerAddress(peerAddress.ToGrpcAddress()), 0, 0)
}
}
- if ms.onPeerUpdateDoneCnExist {
+ if atomic.LoadUint32(&ms.onPeerUpdateGoroutineCount) > 0 {
ms.onPeerUpdateDoneCn <- peerName
}
} else if isLeader {
go func(peerName string) {
raftServerRemovalTimeAfter := time.After(RaftServerRemovalTime)
raftServerPingTicker := time.NewTicker(5 * time.Minute)
+ atomic.AddUint32(&ms.onPeerUpdateGoroutineCount, 1)
defer func() {
- ms.onPeerUpdateDoneCnExist = false
+ atomic.AddUint32(&ms.onPeerUpdateGoroutineCount, -1)
}()
for {
select {
@@ -415,6 +417,5 @@ func (ms *MasterServer) OnPeerUpdate(update *master_pb.ClusterNodeUpdate, startF
}
}(peerName)
glog.V(0).Infof("wait %v for raft server %s activity, otherwise delete", RaftServerRemovalTime, peerName)
- ms.onPeerUpdateDoneCnExist = true
}
}