master: redirect clients to the new leader

This commit is contained in:
Chris Lu
2019-07-31 01:54:42 -07:00
parent 8afd8d35b3
commit 19360ab10a
4 changed files with 217 additions and 175 deletions

View File

@@ -176,7 +176,7 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ
}
if !ms.Topo.IsLeader() {
return raft.NotLeaderError
return ms.informNewLeader(stream)
}
// remember client address
@@ -236,7 +236,7 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ
}
case <-ticker.C:
if !ms.Topo.IsLeader() {
return raft.NotLeaderError
return ms.informNewLeader(stream)
}
case <-stopChan:
return nil
@@ -245,3 +245,17 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ
return nil
}
func (ms *MasterServer) informNewLeader(stream master_pb.Seaweed_KeepConnectedServer) error {
leader, err := ms.Topo.Leader()
if err != nil {
glog.Error("topo leader: %v", err)
return raft.NotLeaderError
}
if err := stream.Send(&master_pb.VolumeLocation{
Leader: leader,
}); err != nil {
return err
}
return nil
}