aboutsummaryrefslogtreecommitdiff
path: root/weed/server/master_grpc_server.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/master_grpc_server.go')
-rw-r--r--weed/server/master_grpc_server.go29
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() {