check for ping before deleting raft server
https://github.com/chrislusf/seaweedfs/issues/3083
This commit is contained in:
@@ -372,8 +372,26 @@ func (ms *MasterServer) OnPeerUpdate(update *master_pb.ClusterNodeUpdate, startF
|
|||||||
} else if isLeader {
|
} else if isLeader {
|
||||||
go func(peerName string) {
|
go func(peerName string) {
|
||||||
raftServerRemovalTimeAfter := time.After(RaftServerRemovalTime)
|
raftServerRemovalTimeAfter := time.After(RaftServerRemovalTime)
|
||||||
|
raftServerPingTicker := time.NewTicker(5 * time.Minute)
|
||||||
|
defer func() {
|
||||||
|
ms.onPeerUpdateDoneCnExist = false
|
||||||
|
}()
|
||||||
for {
|
for {
|
||||||
select {
|
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:
|
case <-raftServerRemovalTimeAfter:
|
||||||
err := ms.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
|
err := ms.MasterClient.WithClient(false, func(client master_pb.SeaweedClient) error {
|
||||||
_, err := client.RaftRemoveServer(context.Background(), &master_pb.RaftRemoveServerRequest{
|
_, err := client.RaftRemoveServer(context.Background(), &master_pb.RaftRemoveServerRequest{
|
||||||
@@ -384,12 +402,13 @@ func (ms *MasterServer) OnPeerUpdate(update *master_pb.ClusterNodeUpdate, startF
|
|||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Warningf("failed to removing old raft server %s: %v", peerName, err)
|
glog.Warningf("failed to removing old raft server %s: %v", peerName, err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
glog.V(0).Infof("old raft server %s removed", peerName)
|
glog.V(0).Infof("old raft server %s removed", peerName)
|
||||||
return
|
return
|
||||||
case peerDone := <-ms.onPeerUpdateDoneCn:
|
case peerDone := <-ms.onPeerUpdateDoneCn:
|
||||||
if peerName == peerDone {
|
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
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user