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 transarbitrator;
19 private Set<KeyValue> keyValueUpdateSet = null;
22 public Commit(Slot slot, long _seqnumtrans, long _transarbitrator, Set<KeyValue> _keyValueUpdateSet) {
24 seqnumtrans = _seqnumtrans;
25 transarbitrator = _transarbitrator;
27 keyValueUpdateSet = new HashSet<KeyValue>();
29 for (KeyValue kv : _keyValueUpdateSet) {
30 KeyValue kvCopy = kv.getCopy();
31 keyValueUpdateSet.add(kvCopy);
35 public long getTransSequenceNumber() {
39 public long getTransArbitrator() {
40 return transarbitrator;
43 public Set<KeyValue> getkeyValueUpdateSet() {
44 return keyValueUpdateSet;
47 public byte getType() {
48 return Entry.TypeCommit;
51 public int getSize() {
52 int size = 2 * Long.BYTES + Byte.BYTES; // seq id, entry type
53 size += Integer.BYTES; // number of KV's
56 for (KeyValue kv : keyValueUpdateSet) {
63 static Entry decode(Slot slot, ByteBuffer bb) {
64 long seqnumtrans = bb.getLong();
65 long transarbitrator = bb.getLong();
66 int numberOfKeys = bb.getInt();
68 Set<KeyValue> kvSet = new HashSet<KeyValue>();
69 for (int i = 0; i < numberOfKeys; i++) {
70 KeyValue kv = KeyValue.decode(bb);
74 return new Commit(slot, seqnumtrans, transarbitrator, kvSet);
77 public void encode(ByteBuffer bb) {
78 bb.put(Entry.TypeCommit);
79 bb.putLong(seqnumtrans);
80 bb.putLong(transarbitrator);
82 bb.putInt(keyValueUpdateSet.size());
84 for (KeyValue kv : keyValueUpdateSet) {
89 public Entry getCopy(Slot s) {
90 return new Commit(s, seqnumtrans, transarbitrator, keyValueUpdateSet);
93 public Set<KeyValue> updateLiveKeys(Set<KeyValue> kvSet) {
96 return new HashSet<KeyValue>();
98 Set<KeyValue> toDelete = new HashSet<KeyValue>();
100 for (KeyValue kv1 : kvSet) {
101 for (Iterator<KeyValue> i = keyValueUpdateSet.iterator(); i.hasNext();) {
102 KeyValue kv2 = i.next();
104 if (kv1.getKey().equals(kv2.getKey())) {
112 if (keyValueUpdateSet.size() == 0) {