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 keyValueUpdateSet = new HashSet<KeyValue>();
21 for (KeyValue kv : _keyValueUpdateSet) {
22 KeyValue kvCopy = kv.getCopy();
23 keyValueUpdateSet.add(kvCopy);
26 guard = _guard.getCopy();
29 public long getMachineID() {
33 public long getSequenceNumber() {
37 public Set<KeyValue> getkeyValueUpdateSet() {
38 return keyValueUpdateSet;
41 public Guard getGuard() {
45 public byte getType() {
46 return Entry.TypeTransaction;
49 public int getSize() {
50 int size = 2 * Long.BYTES + Byte.BYTES; // seq, machine id, entry type
51 size += Integer.BYTES; // number of KV's
54 for (KeyValue kv : keyValueUpdateSet) {
59 size += guard.getSize();
65 public void encode(ByteBuffer bb) {
66 bb.put(Entry.TypeTransaction);
68 bb.putLong(machineid);
70 bb.putInt(keyValueUpdateSet.size());
71 for (KeyValue kv : keyValueUpdateSet) {
78 static Entry decode(Slot slot, ByteBuffer bb) {
79 long seqnum = bb.getLong();
80 long machineid = bb.getLong();
81 int numberOfKeys = bb.getInt();
83 Set<KeyValue> kvSet = new HashSet<KeyValue>();
84 for (int i = 0; i < numberOfKeys; i++) {
85 KeyValue kv = KeyValue.decode(bb);
89 Guard guard = Guard.decode(bb);
91 return new Transaction(slot, seqnum, machineid, kvSet, guard);
94 public Entry getCopy(Slot s) {
95 return new Transaction(s, seqnum, machineid, keyValueUpdateSet, guard);