Paxos version 1
This commit is contained in:
47
lib/mix/tasks/test_paxos.ex
Normal file
47
lib/mix/tasks/test_paxos.ex
Normal file
@@ -0,0 +1,47 @@
|
||||
defmodule Mix.Tasks.TestPaxos do
|
||||
use Mix.Task
|
||||
|
||||
def run(_) do
|
||||
IO.puts("Testing Paxos")
|
||||
|
||||
procs = Enum.map(0..3, fn i -> String.to_atom("p#{i}") end)
|
||||
_pids = Enum.map(procs, fn p -> start(p, procs) end)
|
||||
|
||||
IO.puts("spawned")
|
||||
|
||||
Process.send_after(self(), {:end}, 50000)
|
||||
|
||||
receive do
|
||||
{:end} ->
|
||||
IO.puts("test ended")
|
||||
end
|
||||
end
|
||||
|
||||
def start(name, procs) do
|
||||
pid = spawn(Mix.Tasks.TestPaxos, :init, [name, procs])
|
||||
|
||||
Utils.register_name(name, pid)
|
||||
end
|
||||
|
||||
def init(name, procs) do
|
||||
IO.puts("#{name}: init")
|
||||
Paxos.start(name, procs)
|
||||
|
||||
Process.sleep(200)
|
||||
|
||||
if name == :p0 do
|
||||
Paxos.propose(name, "Hi I was decided")
|
||||
end
|
||||
|
||||
run_test(name)
|
||||
end
|
||||
|
||||
def run_test(name) do
|
||||
receive do
|
||||
{:decide, value} ->
|
||||
IO.puts("#{name}: decide #{value}")
|
||||
end
|
||||
|
||||
run_test(name)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user