summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-26 20:38:01 +0000
committerPaul Buetow <paul@buetow.org>2008-05-26 20:38:01 +0000
commitfaee8241ff7972ceeb622e0793c655f301ef0bd0 (patch)
tree8f8c045a73dd61e3d2ced3ad9882f49f07395a7f
parent230ddbf8753db60f1baa517e4d9a4d08885fac04 (diff)
run astyle
-rw-r--r--sources/protocols/implementations/OnePhaseCommitProtocol.java3
-rw-r--r--sources/protocols/implementations/TwoPhaseCommitProtocol.java60
2 files changed, 60 insertions, 3 deletions
diff --git a/sources/protocols/implementations/OnePhaseCommitProtocol.java b/sources/protocols/implementations/OnePhaseCommitProtocol.java
index 3e4ae52..a8d8d75 100644
--- a/sources/protocols/implementations/OnePhaseCommitProtocol.java
+++ b/sources/protocols/implementations/OnePhaseCommitProtocol.java
@@ -86,7 +86,7 @@ public class OnePhaseCommitProtocol extends VSAbstractProtocol {
logg("ACK von Prozess " + pid + " erhalten!");
if (pids.size() == 0)
- logg("ACKs von allen beteiligten Prozessen erhalten!");
+ logg("ACKs von allen beteiligten Prozessen erhalten! Festgeschrieben!");
}
}
@@ -116,6 +116,7 @@ public class OnePhaseCommitProtocol extends VSAbstractProtocol {
message.setInteger("pid", process.getProcessID());
sendMessage(message);
ackSent = true;
+ logg("Festgeschrieben");
}
/* (non-Javadoc)
diff --git a/sources/protocols/implementations/TwoPhaseCommitProtocol.java b/sources/protocols/implementations/TwoPhaseCommitProtocol.java
index 770c9cd..05ac8cf 100644
--- a/sources/protocols/implementations/TwoPhaseCommitProtocol.java
+++ b/sources/protocols/implementations/TwoPhaseCommitProtocol.java
@@ -4,20 +4,37 @@
*/
package protocols.implementations;
+import java.util.ArrayList;
+import java.util.Vector;
+
import protocols.VSAbstractProtocol;
import core.VSMessage;
/**
- * The Class TwoPhaseCommitProtocol
+ * The Class TwoPhaseCommitProtocol.
*/
public class TwoPhaseCommitProtocol extends VSAbstractProtocol {
private static final long serialVersionUID = 1L;
+ /* Server variables, coordinator */
+ private ArrayList<Integer> pids;
+
+ /* Client variables */
+ private boolean ackSent;
+
/**
- * Instantiates a new two phase commit protocol.
+ * Instantiates a one phase commit protocol.
*/
public TwoPhaseCommitProtocol() {
setClassname(getClass().toString());
+
+ /* Can be changed via GUI variables editor of each process */
+ Vector<Integer> vec = new Vector<Integer>();
+ vec.add(2);
+ vec.add(3);
+
+ initVector("pids", vec, "PIDs beteilitger Prozesse");
+ initLong("timeout", 5000, "Zeit bis erneuerter Anfrage", "ms");
}
/* (non-Javadoc)
@@ -30,36 +47,75 @@ public class TwoPhaseCommitProtocol extends VSAbstractProtocol {
* @see protocols.VSAbstractProtocol#onClientReset()
*/
protected void onClientReset() {
+ pids.clear();
+ pids.addAll(getVector("pids"));
}
/* (non-Javadoc)
* @see protocols.VSAbstractProtocol#onClientStart()
*/
protected void onClientStart() {
+ if (pids == null) {
+ pids = new ArrayList<Integer>();
+ pids.addAll(getVector("pids"));
+
+ }
+
+ if (pids.size() != 0) {
+ long timeout = getLong("timeout") + process.getTime();
+ scheduleAt(timeout); /* Will run onClientSchedule() at the specified local time */
+
+ VSMessage message = new VSMessage();
+ message.setBoolean("wantAck", true);
+ sendMessage(message);
+ }
}
/* (non-Javadoc)
* @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
*/
protected void onClientRecv(VSMessage recvMessage) {
+ if (pids.size() == 0)
+ return;
+
+ if (recvMessage.getBoolean("isAck")) {
+ Integer pid = recvMessage.getIntegerObj("pid");
+ if (pids.contains(pid))
+ pids.remove(pid);
+
+ logg("ACK von Prozess " + pid + " erhalten!");
+
+ if (pids.size() == 0)
+ logg("ACKs von allen beteiligten Prozessen erhalten!");
+ }
}
/* (non-Javadoc)
* @see protocols.VSAbstractProtocol#onClientSchedule()
*/
protected void onClientSchedule() {
+ onClientStart();
}
/* (non-Javadoc)
* @see protocols.VSAbstractProtocol#onServerReset()
*/
protected void onServerReset() {
+ ackSent = false;
}
/* (non-Javadoc)
* @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
*/
protected void onServerRecv(VSMessage recvMessage) {
+ if (ackSent)
+ return;
+
+ VSMessage message = new VSMessage();
+ message.setBoolean("isAck", true);
+ message.setInteger("pid", process.getProcessID());
+ sendMessage(message);
+ ackSent = true;
}
/* (non-Javadoc)