public CrashedReplicaPMACK RemoveCrashedReplica_aux(CrashedReplicaPM request)
        {
            //propagate to each server
            foreach (Server s in servList)
            {
                CrashedReplicaServer crashed_replica = new CrashedReplicaServer();
                crashed_replica.Partitionid = request.Partitionid;
                foreach (String serv_id in request.Serverid)
                {
                    crashed_replica.Serverid.Add(serv_id);
                }
                AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
                GrpcChannel channel = GrpcChannel.ForAddress(s.getURL());
                var         serv    = new GStoreServices.GStoreServicesClient(channel);
                serv.RemoveCrashedReplica(crashed_replica);
            }

            //propagate to each client
            foreach (Client c in cliList)
            {
                CrashedReplicaClient crashed_replica = new CrashedReplicaClient();
                crashed_replica.Partitionid = request.Partitionid;
                foreach (String serv_id in request.Serverid)
                {
                    crashed_replica.Serverid.Add(serv_id);
                }
                AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
                GrpcChannel channel = GrpcChannel.ForAddress(c.getURL());
                var         client  = new ClientServices.ClientServicesClient(channel);
                client.RemoveCrashedReplicaClient(crashed_replica);
            }
            return(new CrashedReplicaPMACK {
            });
        }
        private void sendPartitionToServer(string server_id)
        {
            Console.WriteLine("Sending the partition to the server...");
#pragma warning disable CS0436 // Type conflicts with imported type
            CompletePartition complete_partition = new CompletePartition();
#pragma warning restore CS0436 // Type conflicts with imported type
            foreach (Partition p in this.partList)
            {
                Console.WriteLine($"Found partition: {p.getName()}");
#pragma warning disable CS0436 // Type conflicts with imported type
                PartitionInfo part = new PartitionInfo();
#pragma warning restore CS0436 // Type conflicts with imported type
                part.Partitionid = p.getName();
                foreach ((string s, bool b) in p.getServIDs())
                {
                    foreach (Server serv in this.servList)
                    {
                        if (serv.getID() == s)
                        {
                            Console.WriteLine($"Valur of server id: {serv.getID()}");
                            //add server info to message
#pragma warning disable CS0436 // Type conflicts with imported type
                            part.Servers.Add(new ServerInfo
#pragma warning restore CS0436 // Type conflicts with imported type
                            {
                                Serverid = s,
                                Url      = serv.getURL(),
                                Mindelay = serv.getMin(),
                                Maxdelay = serv.getMax(),
                                Ismaster = b
                            });
                        }
                    }
                }
                complete_partition.Partitions.Add(part);
            }

            //send partition to every server
            foreach (Server serv in this.servList)
            {
                if (serv.getID() == server_id)
                {
                    AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
                    GrpcChannel channel = GrpcChannel.ForAddress(serv.getURL());
                    GStoreServices.GStoreServicesClient client = new GStoreServices.GStoreServicesClient(channel);
                    client.ReceivePartitionInfo(complete_partition);
                }
            }
        }
        public void propagateCrash(string server_id)
        {
            Console.WriteLine("*****************************************************");
            Console.WriteLine("Puppet Master is propagating crash...");
            Console.WriteLine("*****************************************************");
            //propagate to the servers
            foreach (Server s in this.servList)
            {
                Console.WriteLine($"Server {s.getID()}....");
                if (s.getID() != server_id)
                {
                    //do client to server and propagate
                    AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
                    GrpcChannel channel = GrpcChannel.ForAddress(s.getURL());
                    var         client  = new GStoreServices.GStoreServicesClient(channel);
                    client.ServerCrasedServer(new ServerCrashedID
                    {
                        Serverid = server_id
                    });
                }
            }
            Console.WriteLine("Propagating to clients....");
            //propagate to the clients

            foreach (Client c in this.cliList)
            {
                //do client to server and propagate
                AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
                GrpcChannel channel = GrpcChannel.ForAddress(c.getURL());
                var         client  = new ClientServices.ClientServicesClient(channel);
                client.ServerCrasedClient(new ServerCrashedClientID
                {
                    Serverclientid = server_id
                });
            }
        }