Example #1
0
        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();
            }
        }
Example #2
0
        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);
            }
        }