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;
18 private Set<KeyValue> liveValues = null;
21 public Commit(Slot slot, long _seqnumtrans, Set<KeyValue> _keyValueUpdateSet) {
23 seqnumtrans = _seqnumtrans;
25 keyValueUpdateSet = new HashSet<KeyValue>();
26 liveValues = new HashSet<KeyValue>();
28 for (KeyValue kv : _keyValueUpdateSet) {
29 KeyValue kvCopy = kv.getCopy();
30 keyValueUpdateSet.add(kvCopy);
31 liveValues.add(kvCopy);
35 public long getTransSequenceNumber() {
39 public Set<KeyValue> getkeyValueUpdateSet() {
40 return keyValueUpdateSet;
43 public byte getType() {
44 return Entry.TypeCommit;
47 public int getSize() {
48 int size = Long.BYTES + Byte.BYTES; // seq id, entry type
49 size += Integer.BYTES; // number of KV's
52 for (KeyValue kv : keyValueUpdateSet) {
59 static Entry decode(Slot slot, ByteBuffer bb) {
60 long seqnumtrans = bb.getLong();
61 int numberOfKeys = bb.getInt();
63 Set<KeyValue> kvSet = new HashSet<KeyValue>();
64 for (int i = 0; i < numberOfKeys; i++) {
65 KeyValue kv = KeyValue.decode(bb);
69 return new Commit(slot, seqnumtrans, kvSet);
72 public void encode(ByteBuffer bb) {
73 bb.put(Entry.TypeCommit);
74 bb.putLong(seqnumtrans);
75 bb.putInt(keyValueUpdateSet.size());
77 for (KeyValue kv : keyValueUpdateSet) {
82 public Entry getCopy(Slot s) {
83 return new Commit(s, seqnumtrans, keyValueUpdateSet);
86 public void updateLiveKeys(Set<KeyValue> kvSet) {
91 for (KeyValue kv1 : kvSet) {
92 for (Iterator<KeyValue> i = liveValues.iterator(); i.hasNext();) {
93 KeyValue kv2 = i.next();
95 if (kv1.getKey() == kv2.getKey()) {
96 liveValues.remove(kv2);
102 if (liveValues.size() == 0)