Fixes to tex doc; Code Updates
[iotcloud.git] / src2 / java / iotcloud / Commit.java
1 package iotcloud;
2
3 import java.nio.ByteBuffer;
4 import java.util.Set;
5 import java.util.HashSet;
6 import java.util.Iterator;
7
8 /**
9  * This Entry records the commit of a transaction.
10  * @author Ali Younis <ayounis@uci.edu>
11  * @version 1.0
12  */
13
14
15 class Commit extends Entry {
16         private long seqnumtrans;
17         private Set<KeyValue> keyValueUpdateSet = null;
18
19
20         public Commit(Slot slot, long _seqnumtrans, Set<KeyValue> _keyValueUpdateSet) {
21                 super(slot);
22                 seqnumtrans = _seqnumtrans;
23
24                 keyValueUpdateSet = new HashSet<KeyValue>();
25
26                 for (KeyValue kv : _keyValueUpdateSet) {
27                         KeyValue kvCopy = kv.getCopy();
28                         keyValueUpdateSet.add(kvCopy);
29                 }
30         }
31
32         public long getTransSequenceNumber() {
33                 return seqnumtrans;
34         }
35
36         public Set<KeyValue> getkeyValueUpdateSet() {
37                 return keyValueUpdateSet;
38         }
39
40         public byte getType() {
41                 return Entry.TypeCommit;
42         }
43
44         public int getSize() {
45                 int size = Long.BYTES + Byte.BYTES; // seq id, entry type
46                 size += Integer.BYTES; // number of KV's
47
48                 // Size of each KV
49                 for (KeyValue kv : keyValueUpdateSet) {
50                         size += kv.getSize();
51                 }
52
53                 return size;
54         }
55
56         static Entry decode(Slot slot, ByteBuffer bb) {
57                 long seqnumtrans = bb.getLong();
58                 int numberOfKeys = bb.getInt();
59
60                 Set<KeyValue> kvSet = new HashSet<KeyValue>();
61                 for (int i = 0; i < numberOfKeys; i++) {
62                         KeyValue kv = KeyValue.decode(bb);
63                         kvSet.add(kv);
64                 }
65
66                 return new Commit(slot, seqnumtrans, kvSet);
67         }
68
69         public void encode(ByteBuffer bb) {
70                 bb.put(Entry.TypeCommit);
71                 bb.putLong(seqnumtrans);
72                 bb.putInt(keyValueUpdateSet.size());
73
74                 for (KeyValue kv : keyValueUpdateSet) {
75                         kv.encode(bb);
76                 }
77         }
78
79         public Entry getCopy(Slot s) {
80                 return new Commit(s, seqnumtrans, keyValueUpdateSet);
81         }
82
83         public void updateLiveKeys(Set<KeyValue> kvSet) {
84
85                 if (!this.isLive())
86                         return;
87
88                 for (KeyValue kv1 : kvSet) {
89                         for (Iterator<KeyValue> i = keyValueUpdateSet.iterator(); i.hasNext();) {
90                                 KeyValue kv2 = i.next();
91
92                                 if (kv1.getKey() == kv2.getKey()) {
93                                         keyValueUpdateSet.remove(kv2);
94                                         break;
95                                 }
96                         }
97                 }
98
99                 if (keyValueUpdateSet.size() == 0)
100                         this.setDead();
101         }
102 }