diff --git a/MP2/peer.py b/MP2/peer.py index 3b836fc..d392038 100644 --- a/MP2/peer.py +++ b/MP2/peer.py @@ -20,6 +20,7 @@ RETRY_INTERVAL = 5.0 FANOUT = 1 members_list = {} +dead_members = set() members_list_lock = threading.Lock() SELF_ID = (IP, SERVER_PORT, utc_time()) @@ -63,6 +64,9 @@ def worker_1(): join_id = (join_ip, join_port, join_timestamp) with members_list_lock: + if join_id in dead_ids: + continue + if join_id not in members_list: members_list[join_id] = { "heart_beat": 1, @@ -107,13 +111,21 @@ def worker_1(): incoming_state = member['state'] incoming_hb = member['heart_beat'] - if member_id not in members_list and incoming_state != "failed": + if member_id in dead_ids: + continue + + if member_id not in members_list: + + if incoming_state == "failed": + dead_ids.add(member_id) + continue + members_list[member_id] = { "heart_beat": incoming_hb, "local_last_seen": utc_time(), "state": incoming_state, - "local_failed_since" : utc_time() if incoming_state == "failed" else None, - "local_suspected_since" : None + "local_failed_since": None, + "local_suspected_since": None } continue @@ -209,8 +221,8 @@ def worker_4(): to_remove.append(member_id) for member_id in to_remove: + dead_ids.add(member_id) del members_list[member_id] - print(f"Purged member {member_id} from list.") time.sleep(0.5)