Skip to content
Snippets Groups Projects
main.py 1.55 KiB
import json
import subprocess

# Can spawn multiple paxos server
if __name__ == "__main__":
    processes = []

    with open("config.json", encoding='utf-8') as f:
        json_dict = json.loads(f.read())

    addresses = json_dict["servers"]

    try:
        for i in range(0, len(addresses), 2):
            paxos_host = addresses[i]
            paxos_port = addresses[i + 1]
            proc = subprocess.Popen(["python3", "mencius.py", paxos_host, paxos_port] + addresses)
            processes.append(proc)
        # Needed to sleep forever here until ctrl-c so we go into "finally" and kill processes
        input_str = input()  # Input would be "lock 2" / "unlock 1", etc or "exit"
        while input_str != "exit":
            command, node = input_str.split(" ", 2)
            node = int(node)
            if node > len(addresses) / 2:
                print("Node does not exists")
            elif command == "kill":
                print(f"Killing node ({addresses[node*2]}, {addresses[(node*2) + 1]})")                
                processes[node].kill()
            elif command == "run":
                print(f"Bringing back up node number ({addresses[node*2]}, {addresses[(node*2) + 1]})")                
                paxos_host = addresses[node*2]
                paxos_port = addresses[(node*2) + 1]
                processes[node] = subprocess.Popen(["python3", "mencius.py", paxos_host, paxos_port] + addresses)
            input_str = input()
    finally:
        for proc in processes:
            # proc.send_signal(signal.SIGINT)
            proc.kill()