X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=version2%2Fsrc%2Fjava%2Fiotcloud%2FCommit.java;h=fb52e6738e4854318bb9e578a6613e8f74855749;hb=d889c9bb5da64de7baf5e9b5365bb13d7c810094;hp=1ee044df3e7cca9f22eeb29f071f8666989e2f49;hpb=7ee0658d03ecf06c490aa12422ed330cc4d43058;p=iotcloud.git diff --git a/version2/src/java/iotcloud/Commit.java b/version2/src/java/iotcloud/Commit.java index 1ee044d..fb52e67 100644 --- a/version2/src/java/iotcloud/Commit.java +++ b/version2/src/java/iotcloud/Commit.java @@ -14,12 +14,17 @@ import java.util.Iterator; class Commit extends Entry { private long seqnumtrans; + private long seqnumcommit; + private long transarbitrator; + private Set keyValueUpdateSet = null; - public Commit(Slot slot, long _seqnumtrans, Set _keyValueUpdateSet) { + public Commit(Slot slot, long _seqnumtrans, long _seqnumcommit, long _transarbitrator, Set _keyValueUpdateSet) { super(slot); seqnumtrans = _seqnumtrans; + seqnumcommit = _seqnumcommit; + transarbitrator = _transarbitrator; keyValueUpdateSet = new HashSet(); @@ -32,6 +37,13 @@ class Commit extends Entry { public long getTransSequenceNumber() { return seqnumtrans; } + public long getSequenceNumber() { + return seqnumcommit; + } + + public long getTransArbitrator() { + return transarbitrator; + } public Set getkeyValueUpdateSet() { return keyValueUpdateSet; @@ -42,7 +54,7 @@ class Commit extends Entry { } public int getSize() { - int size = Long.BYTES + Byte.BYTES; // seq id, entry type + int size = 3 * Long.BYTES + Byte.BYTES; // seq id, entry type size += Integer.BYTES; // number of KV's // Size of each KV @@ -55,6 +67,8 @@ class Commit extends Entry { static Entry decode(Slot slot, ByteBuffer bb) { long seqnumtrans = bb.getLong(); + long seqnumcommit = bb.getLong(); + long transarbitrator = bb.getLong(); int numberOfKeys = bb.getInt(); Set kvSet = new HashSet(); @@ -63,12 +77,15 @@ class Commit extends Entry { kvSet.add(kv); } - return new Commit(slot, seqnumtrans, kvSet); + return new Commit(slot, seqnumtrans, seqnumcommit, transarbitrator, kvSet); } public void encode(ByteBuffer bb) { bb.put(Entry.TypeCommit); bb.putLong(seqnumtrans); + bb.putLong(seqnumcommit); + bb.putLong(transarbitrator); + bb.putInt(keyValueUpdateSet.size()); for (KeyValue kv : keyValueUpdateSet) { @@ -77,26 +94,32 @@ class Commit extends Entry { } public Entry getCopy(Slot s) { - return new Commit(s, seqnumtrans, keyValueUpdateSet); + return new Commit(s, seqnumtrans, seqnumcommit, transarbitrator, keyValueUpdateSet); } - public void updateLiveKeys(Set kvSet) { + public Set updateLiveKeys(Set kvSet) { if (!this.isLive()) - return; + return new HashSet(); + + Set toDelete = new HashSet(); for (KeyValue kv1 : kvSet) { for (Iterator i = keyValueUpdateSet.iterator(); i.hasNext();) { KeyValue kv2 = i.next(); - if (kv1.getKey() == kv2.getKey()) { - keyValueUpdateSet.remove(kv2); + if (kv1.getKey().equals(kv2.getKey())) { + toDelete.add(kv2); + i.remove(); break; } } } - if (keyValueUpdateSet.size() == 0) + if (keyValueUpdateSet.size() == 0) { this.setDead(); + } + + return toDelete; } } \ No newline at end of file