diff --git a/server.py b/server.py index 65a3623c04889c1fad120e5aee6eeea48935ab38..98424e132f08120991f02fbeefc38b7af0af5e64 100644 --- a/server.py +++ b/server.py @@ -49,6 +49,7 @@ class Server(multiprocessing.Process): self.ring_socket = ring_socket if self.os == "macOS": self.ring_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + self.ring_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.ring_socket.bind((self.server_address, leader_election_port)) self.server_uuid = self.generate_server_uuid() print("My UUID: ", self.server_uuid) @@ -163,7 +164,6 @@ class Server(multiprocessing.Process): def send_heartbeat(self): print("Heartbeat Sending started") - self.local_servers_cache = Server.local_servers_cache print("Local Server Cache:", self.local_servers_cache) while True: time.sleep(10) @@ -550,15 +550,20 @@ class Server(multiprocessing.Process): # Send the election message to the neighbor's address. self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port)) print(election_message, "...sent to: ", neighbor_address, "...on port: ", leader_election_port) - elif isLeader == True and uuid != self.server_uuid: #Agreeing to someone else as leader - election_message = {"id": uuid, "isLeader": True} + elif isLeader == False and uuid < self.server_uuid: #Suggesting itself to leader + election_message = {"id": self.server_uuid, "isLeader": True} # Send the election message to the neighbor's address. self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port)) + print(election_message, "...sent to: ", neighbor_address, "...on port: ", leader_election_port) elif isLeader == False and uuid == self.server_uuid: #Suggesting itself to leader election_message = {"id": self.server_uuid, "isLeader": True} # Send the election message to the neighbor's address. self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port)) print(election_message, "...sent to: ", neighbor_address, "...on port: ", leader_election_port) + elif isLeader == True and uuid != self.server_uuid: #Agreeing to someone else as leader + election_message = {"id": uuid, "isLeader": True} + # Send the election message to the neighbor's address. + self.ring_socket.sendto(json.dumps(election_message).encode(), (neighbor_address[0], leader_election_port)) else: #Sending pid election_message = {"id": uuid, "isLeader": False} # Send the election message to the neighbor's address. @@ -613,7 +618,6 @@ class Server(multiprocessing.Process): data, address = self.ring_socket.recvfrom(4096) #Reset last heartbeat timestamp self.last_heartbeat_timestamp = None - print("first yes") if data: election_message = json.loads(data.decode()) received_id = election_message.get('id')