This repository has been archived on 2024-01-29. You can view files and clone it, but cannot push or open issues or pull requests.
distributed_system_coursework/presentation/presentation.md
Andre Henriques e3971d2ff6
All checks were successful
continuous-integration/drone/push Build is passing
chore: fix presentation
2024-01-09 15:03:12 +00:00

2.2 KiB

style
img[alt~="center"] { display: block; margin: 0 auto; } h3 { font-size: 1.2em; position: fixed; top: 1em; left: 50%; transform: translateX(-50%); } h4 { text-align: center; font-size: 1.2em; text-align: center; } img[alt~="top-m"] { margin-top: 40px; }

A Paxos Implementation

Andre Henriques, Seoeun Lee


Basis of the implentation

Structure Steps


Steps

receive do
  {:leader_elector, proc} -> ...
  {:propose, inst, value, t, pid_to_inform} -> ...
  {:prepare, proc, inst, ballot} -> ...
  {:nack, inst, ballot} -> ...
  {:prepared, inst, ballot, accepted_ballot, accepted_value} -> ...
  {:accept, inst, ballot, value} -> ...
  {:accepted, inst, ballot} -> ...
  {:decide, inst, value} -> ...
end

Step 1 - "Requirements"

50% center


Step 1 - "Requirements" non-trivial aspects

receive do
  {:propose, inst, value, t, pid_to_inform} ->
    ...
    broadcast({:other_propose, inst, value})
    ...
  {:other_propose, inst, value} -> ...
end

Step 2 - "Prepare"

w:600 center


Step 2 - "Prepare" non-trivial aspects

receive do
  {:nack, inst, ballot, new_ballot} ->
    ...
    broadcast({:abort, inst, ballot})
    ...
  {:abort, inst, ballot} -> ...
end

Step 3 - "Accept"

w:600 center


Step 3 - "Accept" non-trivial aspects

receive do
  {:accepted, inst, ballot} ->
    ...
    broadcast({:decide, inst, value})
    ...
  {:decide, inst, value} -> ...
end

Step 4 - "Leader Crash"

w:600 center


Application


Atomas

w:300 center top-m


Safety

  • If a game state exists, then it was created by a user
  • The game state cannot divert.

Liveness

  • Eventually all users will have the same game state

Interface

receive do
  {:start_game, paticipants} -> {:new_game, game, game_state}
  {:make_move, game, participant, move} -> {:update_game, game, game_state} or {:game_finished, game}
  {:get_game_state, game} -> {:game_state, game, game_state}
end

Questions?