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 Set<KeyValue> keyValueUpdateSet = null;
20 public Commit(Slot slot, long _seqnumtrans, Set<KeyValue> _keyValueUpdateSet) {
22 seqnumtrans = _seqnumtrans;
24 keyValueUpdateSet = new HashSet<KeyValue>();
26 for (KeyValue kv : _keyValueUpdateSet) {
27 KeyValue kvCopy = kv.getCopy();
28 keyValueUpdateSet.add(kvCopy);
32 public long getTransSequenceNumber() {
36 public Set<KeyValue> getkeyValueUpdateSet() {
37 return keyValueUpdateSet;
40 public byte getType() {
41 return Entry.TypeCommit;
44 public int getSize() {
45 int size = Long.BYTES + Byte.BYTES; // seq id, entry type
46 size += Integer.BYTES; // number of KV's
49 for (KeyValue kv : keyValueUpdateSet) {
56 static Entry decode(Slot slot, ByteBuffer bb) {
57 long seqnumtrans = bb.getLong();
58 int numberOfKeys = bb.getInt();
60 Set<KeyValue> kvSet = new HashSet<KeyValue>();
61 for (int i = 0; i < numberOfKeys; i++) {
62 KeyValue kv = KeyValue.decode(bb);
66 return new Commit(slot, seqnumtrans, kvSet);
69 public void encode(ByteBuffer bb) {
70 bb.put(Entry.TypeCommit);
71 bb.putLong(seqnumtrans);
72 bb.putInt(keyValueUpdateSet.size());
74 for (KeyValue kv : keyValueUpdateSet) {
79 public Entry getCopy(Slot s) {
80 // System.out.println("Commit Rescued: " + this); // TODO remove
81 return new Commit(s, seqnumtrans, keyValueUpdateSet);
84 public void updateLiveKeys(Set<KeyValue> kvSet) {
89 for (KeyValue kv1 : kvSet) {
90 for (Iterator<KeyValue> i = keyValueUpdateSet.iterator(); i.hasNext();) {
91 KeyValue kv2 = i.next();
93 if (kv1.getKey().equals(kv2.getKey())) {
94 // keyValueUpdateSet.remove(kv2);
101 if (keyValueUpdateSet.size() == 0) {
102 // System.out.println("Killed Commit: " + this); // TODO remove