3 import java.nio.ByteBuffer;
5 class TransactionPart extends Entry {
7 // Max size of the part excluding the fixed size header
8 public static final int MAX_NON_HEADER_SIZE = 512;
10 private long sequenceNumber = -1;
11 private long machineId = -1;
12 private long arbitratorId = -1;
13 private long clientLocalSequenceNumber = -1; // Sequence number of the transaction that this is a part of
14 private int partNumber = -1; // Parts position in the
15 private Boolean isLastPart = false;
17 private Pair<Long, Long> transactionId = null;
18 private Pair<Long, Integer> partId = null;
20 private byte[] data = null;
22 public TransactionPart(Slot s, long _machineId, long _arbitratorId, long _clientLocalSequenceNumber, int _partNumber, byte[] _data, Boolean _isLastPart) {
24 machineId = _machineId;
25 arbitratorId = _arbitratorId;
26 clientLocalSequenceNumber = _clientLocalSequenceNumber;
27 partNumber = _partNumber;
29 isLastPart = _isLastPart;
31 transactionId = new Pair<Long, Long>(machineId, clientLocalSequenceNumber);
32 partId = new Pair<Long, Integer>(clientLocalSequenceNumber, partNumber);
36 public int getSize() {
38 return (4 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES);
40 return (4 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES) + data.length;
43 public void setSlot(Slot s) {
47 public Pair<Long, Long> getTransactionId() {
51 public long getArbitratorId() {
55 public Pair<Long, Integer> getPartId() {
59 public int getPartNumber() {
63 public int getDataSize() {
67 public byte[] getData() {
71 public Boolean isLastPart() {
75 public long getMachineId() {
79 public long getClientLocalSequenceNumber() {
80 return clientLocalSequenceNumber;
84 public long getSequenceNumber() {
85 return sequenceNumber;
88 public void setSequenceNumber(long _sequenceNumber) {
89 sequenceNumber = _sequenceNumber;
92 static Entry decode(Slot s, ByteBuffer bb) {
93 long sequenceNumber = bb.getLong();
94 long machineId = bb.getLong();
95 long arbitratorId = bb.getLong();
96 long clientLocalSequenceNumber = bb.getLong();
97 int partNumber = bb.getInt();
98 int dataSize = bb.getInt();
99 Boolean isLastPart = (bb.get() == 1);
101 byte[] data = new byte[dataSize];
104 TransactionPart returnTransactionPart = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
105 returnTransactionPart.setSequenceNumber(sequenceNumber);
107 return returnTransactionPart;
110 public void encode(ByteBuffer bb) {
111 bb.put(Entry.TypeTransactionPart);
112 bb.putLong(sequenceNumber);
113 bb.putLong(machineId);
114 bb.putLong(arbitratorId);
115 bb.putLong(clientLocalSequenceNumber);
116 bb.putInt(partNumber);
117 bb.putInt(data.length);
128 public byte getType() {
129 return Entry.TypeTransactionPart;
132 public Entry getCopy(Slot s) {
134 TransactionPart copyTransaction = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
135 copyTransaction.setSequenceNumber(sequenceNumber);
137 return copyTransaction;