3 import java.nio.ByteBuffer;
5 import java.util.HashSet;
6 import java.util.Iterator;
9 * This Entry records the commit of a transaction.
10 * @author Ali Younis <ayounis@uci.edu>
15 class Commit extends Entry {
16 private long seqnumtrans;
17 private long seqnumcommit;
18 private long transarbitrator;
20 private Set<KeyValue> keyValueUpdateSet = null;
23 public Commit(Slot slot, long _seqnumtrans, long _seqnumcommit, long _transarbitrator, Set<KeyValue> _keyValueUpdateSet) {
25 seqnumtrans = _seqnumtrans;
26 seqnumcommit = _seqnumcommit;
27 transarbitrator = _transarbitrator;
29 keyValueUpdateSet = new HashSet<KeyValue>();
31 for (KeyValue kv : _keyValueUpdateSet) {
32 KeyValue kvCopy = kv.getCopy();
33 keyValueUpdateSet.add(kvCopy);
37 public long getTransSequenceNumber() {
40 public long getSequenceNumber() {
44 public long getTransArbitrator() {
45 return transarbitrator;
48 public Set<KeyValue> getkeyValueUpdateSet() {
49 return keyValueUpdateSet;
52 public byte getType() {
53 return Entry.TypeCommit;
56 public int getSize() {
57 int size = 3 * Long.BYTES + Byte.BYTES; // seq id, entry type
58 size += Integer.BYTES; // number of KV's
61 for (KeyValue kv : keyValueUpdateSet) {
68 static Entry decode(Slot slot, ByteBuffer bb) {
69 long seqnumtrans = bb.getLong();
70 long seqnumcommit = bb.getLong();
71 long transarbitrator = bb.getLong();
72 int numberOfKeys = bb.getInt();
74 Set<KeyValue> kvSet = new HashSet<KeyValue>();
75 for (int i = 0; i < numberOfKeys; i++) {
76 KeyValue kv = KeyValue.decode(bb);
80 return new Commit(slot, seqnumtrans, seqnumcommit, transarbitrator, kvSet);
83 public void encode(ByteBuffer bb) {
84 bb.put(Entry.TypeCommit);
85 bb.putLong(seqnumtrans);
86 bb.putLong(seqnumcommit);
87 bb.putLong(transarbitrator);
89 bb.putInt(keyValueUpdateSet.size());
91 for (KeyValue kv : keyValueUpdateSet) {
96 public Entry getCopy(Slot s) {
97 return new Commit(s, seqnumtrans, seqnumcommit, transarbitrator, keyValueUpdateSet);
100 public Set<KeyValue> updateLiveKeys(Set<KeyValue> kvSet) {
103 return new HashSet<KeyValue>();
105 Set<KeyValue> toDelete = new HashSet<KeyValue>();
107 for (KeyValue kv1 : kvSet) {
108 for (Iterator<KeyValue> i = keyValueUpdateSet.iterator(); i.hasNext();) {
109 KeyValue kv2 = i.next();
111 if (kv1.getKey().equals(kv2.getKey())) {
119 if (keyValueUpdateSet.size() == 0) {