3 import java.nio.ByteBuffer;
5 import java.util.HashSet;
7 class Transaction extends Entry {
10 private long machineid;
11 private Set<KeyValue> keyValueUpdateSet;
14 public Transaction(Slot slot, long _seqnum, long _machineid, Set<KeyValue> _keyValueUpdateSet, Guard _guard) {
17 machineid = _machineid;
18 keyValueUpdateSet = _keyValueUpdateSet;
22 public long getMachineID() {
26 public long getSequenceNumber() {
30 public byte getType() {
31 return Entry.TypeLastMessage;
34 public int getSize() {
35 int size = 2 * Long.BYTES + Byte.BYTES; // seq, machine id, entry type
36 size += Integer.BYTES; // number of KV's
39 for (KeyValue kv : keyValueUpdateSet) {
44 size += guard.getSize();
50 public void encode(ByteBuffer bb) {
51 bb.put(Entry.TypeTransaction);
53 bb.putLong(machineid);
55 for (KeyValue kv : keyValueUpdateSet) {
62 static Entry decode(Slot slot, ByteBuffer bb) {
63 long seqnum = bb.getLong();
64 long machineid = bb.getLong();
65 int numberOfKeys = bb.getInt();
67 Set<KeyValue> kvSet = new HashSet<KeyValue>();
69 for (int i = 0; i < numberOfKeys; i++) {
70 KeyValue kv = KeyValue.decode(bb);
74 Guard guard = Guard.decode(bb);
76 return new Transaction(slot, seqnum, machineid, kvSet, guard);
81 public Entry getCopy(Slot s) {
82 return new Transaction(s, seqnum, machineid, keyValueUpdateSet, guard);