From 06c7b1f3686dfd30a23bb8c747e01043ce1264e3 Mon Sep 17 00:00:00 2001 From: Andre Henriques Date: Tue, 2 Jan 2024 23:40:03 +0000 Subject: [PATCH] Finished leader elector --- .gitignore | 2 ++ lib/leader_elector.ex | 16 +++------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 67efd20..3be5e3e 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,5 @@ distributed_system_coursework-*.tar # Temporary files, for example, from tests. /tmp/ + +*.bream diff --git a/lib/leader_elector.ex b/lib/leader_elector.ex index 338de89..17c8e07 100644 --- a/lib/leader_elector.ex +++ b/lib/leader_elector.ex @@ -7,10 +7,6 @@ defmodule EventualLeaderElector do String.to_atom(Atom.to_string(name) <> "_ele") end - def getOriginalName(name) do - String.to_atom(String.replace(Atom.to_string(name), "_ele", "")) - end - def start(name, processes) do new_name = getEleName(name) pid = spawn(EventualLeaderElector, :init, [new_name, name, processes]) @@ -27,7 +23,6 @@ defmodule EventualLeaderElector do name: name, parent: parent, processes: processes, - mp_processes: MapSet.new(processes), timeout: 1000, heard_back: MapSet.new(), seq: 0, @@ -49,7 +44,7 @@ defmodule EventualLeaderElector do run( receive do {:heartbeat_request, name, seq} -> - Utils.unicast({:heartbeat, state.name, seq}, name) + Utils.unicast({:heartbeat, state.parent, seq}, name) state {:heartbeat, name, seq} -> @@ -60,16 +55,11 @@ defmodule EventualLeaderElector do end {:timeout} -> - active = MapSet.intersection(state.mp_processes, state.heard_back) - - state = %{state | heard_back: MapSet.new()} - state = - if MapSet.size(active) == 0 do + if MapSet.size(state.heard_back) == 0 do state else - to_trust = Enum.at(Enum.sort(MapSet.to_list(active)), 0) - to_trust = getOriginalName(to_trust) + to_trust = Enum.at(Enum.sort(MapSet.to_list(state.heard_back)), 0) if state.last_trust != to_trust do Utils.unicast({:ele_trust, to_trust}, state.parent)