From 1ae55b79f849cfd2e8b24311b63caa04baa5d3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 23 Jan 2012 20:03:05 +0100 Subject: Add MasterProposer. MasterProposer tries to propose a value to a list of PaxosServices. --- .../main/java/com/orbekk/paxos/MasterProposer.java | 43 ++++++---------------- 1 file changed, 11 insertions(+), 32 deletions(-) (limited to 'same/src/main/java') diff --git a/same/src/main/java/com/orbekk/paxos/MasterProposer.java b/same/src/main/java/com/orbekk/paxos/MasterProposer.java index c33cf68..e7c6e8a 100644 --- a/same/src/main/java/com/orbekk/paxos/MasterProposer.java +++ b/same/src/main/java/com/orbekk/paxos/MasterProposer.java @@ -5,39 +5,19 @@ import java.util.List; import com.orbekk.same.ConnectionManager; -public class MasterProposer implements Runnable { +public class MasterProposer { private String myUrl; - private int roundId = 0; - private int proposalNumber = 0; private List paxosUrls = new ArrayList(); - private Runnable roundFailedAction; - private Runnable masterAction; private ConnectionManager connections; - public static Runnable getTimeoutAction(final long milliseconds) { - return new Runnable() { - @Override public void run() { - try { - Thread.sleep(milliseconds); - } catch (InterruptedException e) { - // Ignore interrupts. - } - } - }; - } - - MasterProposer(String clientUrl, List paxosUrls, int roundId, - ConnectionManager connections, Runnable roundFailedAction, - Runnable masterAction) { + MasterProposer(String clientUrl, List paxosUrls, + ConnectionManager connections) { this.myUrl = clientUrl; this.paxosUrls = paxosUrls; - this.roundId = roundId; this.connections = connections; - this.roundFailedAction = roundFailedAction; - this.masterAction = masterAction; } - private boolean propose(int roundId, int proposalNumber) { + private boolean internalPropose(int roundId, int proposalNumber) { int promises = 0; for (String url : paxosUrls) { PaxosService paxos = connections.getPaxos(url); @@ -49,7 +29,7 @@ public class MasterProposer implements Runnable { return promises > paxosUrls.size() / 2; } - private boolean acceptRequest(int roundId, int proposalNumber) { + private boolean internalAcceptRequest(int roundId, int proposalNumber) { int accepts = 0; for (String url : paxosUrls) { PaxosService paxos = connections.getPaxos(url); @@ -60,18 +40,17 @@ public class MasterProposer implements Runnable { } return accepts > paxosUrls.size() / 2; } - - @Override public void run() { + + public boolean propose(int roundId, int proposalNumber) { boolean success = false; - success = propose(roundId + 1, proposalNumber + 1); + success = internalPropose(roundId, proposalNumber); if (success) { - success = acceptRequest(roundId + 1, proposalNumber + 1); + success = internalAcceptRequest(roundId, proposalNumber); } if (success) { - masterAction.run(); + return true; } else { - roundFailedAction.run(); - // TODO: Next round? + return false; } } } -- cgit v1.2.3