diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-26 20:38:01 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-26 20:38:01 +0000 |
| commit | faee8241ff7972ceeb622e0793c655f301ef0bd0 (patch) | |
| tree | 8f8c045a73dd61e3d2ced3ad9882f49f07395a7f | |
| parent | 230ddbf8753db60f1baa517e4d9a4d08885fac04 (diff) | |
run astyle
| -rw-r--r-- | sources/protocols/implementations/OnePhaseCommitProtocol.java | 3 | ||||
| -rw-r--r-- | sources/protocols/implementations/TwoPhaseCommitProtocol.java | 60 |
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) |
