Skip to content
Snippets Groups Projects
Commit f7499637 authored by Michael Zanger's avatar Michael Zanger
Browse files

Small Fix Leader Election

parent 6dbefadf
No related branches found
No related tags found
No related merge requests found
......@@ -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')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment