Compare commits
No commits in common. "f2c4e10542aee179cfd45d8b0040cd05128516ad" and "e3971d2ff6552e63294503ef3b26ed553c98ec29" have entirely different histories.
f2c4e10542
...
e3971d2ff6
38
lib/paxos.ex
38
lib/paxos.ex
@ -455,13 +455,25 @@ defmodule Paxos do
|
||||
def propose_loop(inInst) do
|
||||
receive do
|
||||
{:timeout, inst} ->
|
||||
check_and_apply({:timeout}, inst, inInst, &propose_loop/1)
|
||||
if inInst == inst do
|
||||
{:timeout}
|
||||
else
|
||||
propose_loop(inInst)
|
||||
end
|
||||
|
||||
{:abort, inst} ->
|
||||
check_and_apply({:abort}, inst, inInst, &propose_loop/1)
|
||||
if inInst == inst do
|
||||
{:abort}
|
||||
else
|
||||
propose_loop(inInst)
|
||||
end
|
||||
|
||||
{:decision, inst, d} ->
|
||||
check_and_apply({:decision, d}, inst, inInst, &propose_loop/1)
|
||||
if inInst == inst do
|
||||
{:decision, d}
|
||||
else
|
||||
propose_loop(inInst)
|
||||
end
|
||||
|
||||
x ->
|
||||
Process.send_after(self(), x, 500)
|
||||
@ -477,22 +489,22 @@ defmodule Paxos do
|
||||
def get_decision_loop(inInst) do
|
||||
receive do
|
||||
{:get_value_res, inst} ->
|
||||
check_and_apply(nil, inst, inInst, &get_decision_loop/1)
|
||||
if inst == inInst do
|
||||
nil
|
||||
else
|
||||
get_decision_loop(inInst)
|
||||
end
|
||||
|
||||
{:get_value_res_actual, inst, v} ->
|
||||
check_and_apply(v, inst, inInst, &get_decision_loop/1)
|
||||
if inst == inInst do
|
||||
v
|
||||
else
|
||||
get_decision_loop(inInst)
|
||||
end
|
||||
|
||||
x ->
|
||||
Process.send_after(self(), x, 500)
|
||||
get_decision_loop(inInst)
|
||||
end
|
||||
end
|
||||
|
||||
def check_and_apply(v, inst, inInst, fun) do
|
||||
if inst == inInst do
|
||||
v
|
||||
else
|
||||
fun.(inInst)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user