private async System.Threading.Tasks.Task BroadcastElectedLeaderAsync(CDN.GRPC.protobuf.ElectedLeader electedLeader) { var LstNodes = zKService.GetClusterNodes(BOD.NodeDetails.ClusterName); var clients = CreateGRPCClients(LstNodes.Where(p => p.Key < electedLeader.Priority).ToList()); foreach (var client in clients) { _ = await client.Client.BroadcastElectedLeaderAsync(electedLeader); client.Stop_Channel(); } }
private async System.Threading.Tasks.Task ProceedToElectionAsync(List <KeyValuePair <long, string> > lstSelected) { Console.WriteLine("Leader Election Started"); var clients = CreateGRPCClients(lstSelected); var response = SendLeaderElectionRequest(clients);//true=have higher nodes if (response.Result) { return; } else { var electedLeader = new CDN.GRPC.protobuf.ElectedLeader() { IpAddress = BOD.NodeDetails.Ip, Priority = BOD.NodeDetails.Priority }; BOD.NodeDetails.LeaderNode = BOD.NodeDetails.Ip; zKService.CreateLeaderNode(BOD.NodeDetails.LeaderNode); zKService.SetDataToNode($"/{BOD.NodeDetails.ClusterName}", BOD.NodeDetails.Ip); Console.WriteLine("Elected as Leader :" + BOD.NodeDetails.LeaderNode); await BroadcastElectedLeaderAsync(electedLeader); } }