summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--same/src/main/java/com/orbekk/paxos/MasterProposer.java19
1 files changed, 9 insertions, 10 deletions
diff --git a/same/src/main/java/com/orbekk/paxos/MasterProposer.java b/same/src/main/java/com/orbekk/paxos/MasterProposer.java
index eaca410..3343988 100644
--- a/same/src/main/java/com/orbekk/paxos/MasterProposer.java
+++ b/same/src/main/java/com/orbekk/paxos/MasterProposer.java
@@ -34,14 +34,14 @@ public class MasterProposer extends Thread {
this.rpcf = rpcf;
}
- private class ResponseHandler implements RpcCallback<PaxosResponse> {
+ private static class ResponseHandler implements RpcCallback<PaxosResponse> {
final int proposalNumber;
final int numRequests;
- AtomicInteger bestPromise = new AtomicInteger();
- AtomicInteger numPromises = new AtomicInteger(0);
- AtomicInteger numResponses = new AtomicInteger(0);
- AtomicInteger result = new AtomicInteger();
- CountDownLatch done = new CountDownLatch(1);
+ final AtomicInteger bestPromise = new AtomicInteger();
+ final AtomicInteger numPromises = new AtomicInteger(0);
+ final AtomicInteger numResponses = new AtomicInteger(0);
+ final AtomicInteger result = new AtomicInteger();
+ final CountDownLatch done = new CountDownLatch(1);
public ResponseHandler(int proposalNumber, int numRequests) {
this.proposalNumber = proposalNumber;
@@ -56,12 +56,11 @@ public class MasterProposer extends Thread {
if (result == proposalNumber) {
numPromises.incrementAndGet();
}
- while (true) {
+ boolean updated = false;
+ while (!updated) {
int oldVal = bestPromise.get();
int update = Math.min(oldVal, result);
- if (bestPromise.compareAndSet(oldVal, update)) {
- break;
- }
+ updated = bestPromise.compareAndSet(oldVal, update);
}
}
checkDone();