summaryrefslogtreecommitdiff
path: root/same/src/main/java/com
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-23 20:03:05 +0100
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-23 20:03:05 +0100
commit1ae55b79f849cfd2e8b24311b63caa04baa5d3c2 (patch)
tree157faa372ad7d74808ea8ae2235b2e46ac1bdcf5 /same/src/main/java/com
parent060274f31ea04b9fe284d91f457f3d82c11dbaed (diff)
Add MasterProposer.
MasterProposer tries to propose a value to a list of PaxosServices.
Diffstat (limited to 'same/src/main/java/com')
-rw-r--r--same/src/main/java/com/orbekk/paxos/MasterProposer.java43
1 files changed, 11 insertions, 32 deletions
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<String> paxosUrls = new ArrayList<String>();
- 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<String> paxosUrls, int roundId,
- ConnectionManager connections, Runnable roundFailedAction,
- Runnable masterAction) {
+ MasterProposer(String clientUrl, List<String> 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;
}
}
}