diff options
| author | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-07-20 00:04:12 +0500 |
|---|---|---|
| committer | Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> | 2022-07-20 00:04:12 +0500 |
| commit | 6cfbfb084941e213f38a83a763fd359cc6611108 (patch) | |
| tree | e7566d22d20c3b3239fdac3931a3af44c26ab6e5 | |
| parent | 2ae3f812f8bd2ce1aaae505a31cc33decf872f0b (diff) | |
| download | seaweedfs-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.go | 21 |
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 } } |
