aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-07-20 00:04:12 +0500
committerKonstantin Lebedev <9497591+kmlebedev@users.noreply.github.com>2022-07-20 00:04:12 +0500
commit6cfbfb084941e213f38a83a763fd359cc6611108 (patch)
treee7566d22d20c3b3239fdac3931a3af44c26ab6e5
parent2ae3f812f8bd2ce1aaae505a31cc33decf872f0b (diff)
downloadseaweedfs-6cfbfb084941e213f38a83a763fd359cc6611108.tar.xz
seaweedfs-6cfbfb084941e213f38a83a763fd359cc6611108.zip
check for ping before deleting raft server
https://github.com/chrislusf/seaweedfs/issues/3083
-rw-r--r--weed/server/master_server.go21
1 files changed, 20 insertions, 1 deletions
diff --git a/weed/server/master_server.go b/weed/server/master_server.go
index 0fdc3944f..0e95fa91f 100644
--- a/weed/server/master_server.go
+++ b/weed/server/master_server.go
@@ -372,8 +372,26 @@ func (ms *MasterServer) OnPeerUpdate(update *master_pb.ClusterNodeUpdate, startF
} else if isLeader {
go func(peerName string) {
raftServerRemovalTimeAfter := time.After(RaftServerRemovalTime)
+ raftServerPingTicker := time.NewTicker(5 * time.Minute)
+ defer func() {
+ ms.onPeerUpdateDoneCnExist = false
+ }()
for {
select {
+ case <-raftServerPingTicker.C:
+ err := ms.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
+ _, err := client.Ping(context.Background(), &master_pb.PingRequest{
+ Target: peerName,
+ TargetType: cluster.MasterType,
+ })
+ return err
+ })
+ if err != nil {
+ glog.Warningf("raft server %s ping failed %+v", peerName, err)
+ } else {
+ glog.V(0).Infof("raft server %s remove canceled on ping success", peerName)
+ return
+ }
case <-raftServerRemovalTimeAfter:
err := ms.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
_, err := client.RaftRemoveServer(context.Background(), &master_pb.RaftRemoveServerRequest{
@@ -384,12 +402,13 @@ func (ms *MasterServer) OnPeerUpdate(update *master_pb.ClusterNodeUpdate, startF
})
if err != nil {
glog.Warningf("failed to removing old raft server %s: %v", peerName, err)
+ return
}
glog.V(0).Infof("old raft server %s removed", peerName)
return
case peerDone := <-ms.onPeerUpdateDoneCn:
if peerName == peerDone {
- glog.V(0).Infof("raft server %s remove canceled", peerName)
+ glog.V(0).Infof("raft server %s remove canceled on onPeerUpdate", peerName)
return
}
}