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;
40 public byte getType() {
41 return Entry.TypeTransaction;
44 public int getSize() {
45 int size = 2 * Long.BYTES + Byte.BYTES; // seq, machine id, entry type
46 size += Integer.BYTES; // number of KV's
49 for (KeyValue kv : keyValueUpdateSet) {
54 size += guard.getSize();
60 public void encode(ByteBuffer bb) {
61 bb.put(Entry.TypeTransaction);
63 bb.putLong(machineid);
65 bb.putInt(keyValueUpdateSet.size());
66 for (KeyValue kv : keyValueUpdateSet) {
73 static Entry decode(Slot slot, ByteBuffer bb) {
74 long seqnum = bb.getLong();
75 long machineid = bb.getLong();
76 int numberOfKeys = bb.getInt();
78 Set<KeyValue> kvSet = new HashSet<KeyValue>();
79 for (int i = 0; i < numberOfKeys; i++) {
80 KeyValue kv = KeyValue.decode(bb);
84 Guard guard = Guard.decode(bb);
86 return new Transaction(slot, seqnum, machineid, kvSet, guard);
89 public Entry getCopy(Slot s) {
90 return new Transaction(s, seqnum, machineid, keyValueUpdateSet, guard);