3 import java.nio.ByteBuffer;
5 import java.util.HashSet;
7 class Transaction extends Entry {
10 private long machineid;
11 private Set<KeyValue> keyValueUpdateSet = null;
14 public Transaction(Slot slot, long _seqnum, long _machineid, Set<KeyValue> _keyValueUpdateSet, Guard _guard) {
17 machineid = _machineid;
19 for (KeyValue kv : _keyValueUpdateSet) {
20 KeyValue kvCopy = kv.getCopy();
21 keyValueUpdateSet.add(kvCopy);
24 guard = _guard.getCopy();
27 public long getMachineID() {
31 public long getSequenceNumber() {
35 public Set<KeyValue> getkeyValueUpdateSet() {
36 return keyValueUpdateSet;
39 public Guard getGuard() {
43 public byte getType() {
44 return Entry.TypeTransaction;
47 public int getSize() {
48 int size = 2 * Long.BYTES + Byte.BYTES; // seq, machine id, entry type
49 size += Integer.BYTES; // number of KV's
52 for (KeyValue kv : keyValueUpdateSet) {
57 size += guard.getSize();
63 public void encode(ByteBuffer bb) {
64 bb.put(Entry.TypeTransaction);
66 bb.putLong(machineid);
68 bb.putInt(keyValueUpdateSet.size());
69 for (KeyValue kv : keyValueUpdateSet) {
76 static Entry decode(Slot slot, ByteBuffer bb) {
77 long seqnum = bb.getLong();
78 long machineid = bb.getLong();
79 int numberOfKeys = bb.getInt();
81 Set<KeyValue> kvSet = new HashSet<KeyValue>();
82 for (int i = 0; i < numberOfKeys; i++) {
83 KeyValue kv = KeyValue.decode(bb);
87 Guard guard = Guard.decode(bb);
89 return new Transaction(slot, seqnum, machineid, kvSet, guard);
92 public Entry getCopy(Slot s) {
93 return new Transaction(s, seqnum, machineid, keyValueUpdateSet, guard);