diff options
| -rw-r--r-- | weed/server/master_grpc_server.go | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/weed/server/master_grpc_server.go b/weed/server/master_grpc_server.go index e053d9ea7..14b74c037 100644 --- a/weed/server/master_grpc_server.go +++ b/weed/server/master_grpc_server.go @@ -284,15 +284,30 @@ func (ms *MasterServer) KeepConnected(stream master_pb.Seaweed_KeepConnectedServ } ms.deleteClient(clientName) }() - for i, message := range ms.Topo.ToVolumeLocations() { - if i == 0 { - if leader, err := ms.Topo.Leader(); err == nil { - message.Leader = string(leader) - } - } - if sendErr := stream.Send(&master_pb.KeepConnectedResponse{VolumeLocation: message}); sendErr != nil { + + // Send volume locations to the client + volumeLocations := ms.Topo.ToVolumeLocations() + if len(volumeLocations) == 0 { + // Always send at least one message with leader info so the client can unblock + leader, _ := ms.Topo.Leader() + if sendErr := stream.Send(&master_pb.KeepConnectedResponse{ + VolumeLocation: &master_pb.VolumeLocation{ + Leader: string(leader), + }, + }); sendErr != nil { return sendErr } + } else { + for i, message := range volumeLocations { + if i == 0 { + if leader, err := ms.Topo.Leader(); err == nil { + message.Leader = string(leader) + } + } + if sendErr := stream.Send(&master_pb.KeepConnectedResponse{VolumeLocation: message}); sendErr != nil { + return sendErr + } + } } go func() { |
