From 7d3e0f1ba4375e60b0708a0d937806ef7f71a4f9 Mon Sep 17 00:00:00 2001
From: Katharina <katharina.willig@outlook.com>
Date: Mon, 25 Nov 2024 21:49:11 +0100
Subject: [PATCH] fix leader
---
server.py | 40 +++++++++++++++++++++++++++-------------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/server.py b/server.py
index 5417ce1..c1bc477 100644
--- a/server.py
+++ b/server.py
@@ -28,7 +28,7 @@ def broadcast(message):
# Listener function
def listen(queue, shared_data):
"""Receives messages and updates shared state."""
- print(f"Listener from {shared_data['server_id']} is listening on {server_socket}")
+ print(f"Listener from {shared_data['server_id']} is listening...")
global active_servers
while True:
try:
@@ -81,32 +81,46 @@ def start_election(queue, shared_data):
while time.time() < timeout:
try:
- message = queue.get(timeout=1)
+ message = queue.get(timeout=1) #waits 1 sec for a message
if "START_ELECTION" in message:
sender_uuid = message.split(": ")[1]
active_servers[sender_uuid] = time.time()
print(f"Received UUID for election: {sender_uuid}")
- if sender_uuid > highest_id:
- highest_id = sender_uuid
- print(f"Received higher ID {sender_uuid}, forwarding...")
- broadcast(f"START_ELECTION: {sender_uuid}")
+################dumblogic###onlyworkswith2servers################################
+ if shared_data['server_id']==sender_uuid:
+ continue
+ else:
+ if sender_uuid > highest_id:
+ highest_id = sender_uuid
+ print(f"Received higher ID {sender_uuid}, forwarding...")
+ broadcast(f"START_ELECTION: {sender_uuid}")
+
+ elif sender_uuid == highest_id:
+ shared_data['current_leader'] = sender_uuid
+ print(f"(sender) Leader elected: {shared_data['current_leader']}")
+ broadcast(f"LEADER: {shared_data['current_leader']}")
+
+ else:
+ shared_data['current_leader'] = shared_data['server_id']
+ print(f"(official, its me) Leader elected: {shared_data['current_leader']}")
+ broadcast(f"LEADER: {shared_data['current_leader']}")
elif "LEADER" in message:
leader_uuid = message.split(": ")[1]
shared_data['current_leader'] = leader_uuid
- print(f"Leader elected: {shared_data['current_leader']}")
+ print(f"(leader) Leader elected: {shared_data['current_leader']}")
return
except multiprocessing.queues.Empty:
continue
- if highest_id == shared_data['server_id']:
- shared_data['current_leader'] = shared_data['server_id']
- broadcast(f"LEADER: {shared_data['current_leader']}")
- print(f"I am the leader: {shared_data['current_leader']}")
- else:
- print(f"Leader election finished, leader is {highest_id}")
+ #if highest_id == shared_data['server_id']:
+ # shared_data['current_leader'] = shared_data['server_id']
+ # broadcast(f"LEADER: {shared_data['current_leader']}")
+ # print(f"I am the leader: {shared_data['current_leader']}")
+ #else:
+ # print(f"Leader election finished, leader is {highest_id}")
# Heartbeat function
--
GitLab