master: redirect clients to the new leader
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user