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;
102 byte[] data = new byte[dataSize];
105 TransactionPart returnTransactionPart = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
106 returnTransactionPart.setSequenceNumber(sequenceNumber);
108 return returnTransactionPart;
111 public void encode(ByteBuffer bb) {
112 bb.put(Entry.TypeTransactionPart);
113 bb.putLong(sequenceNumber);
114 bb.putLong(machineId);
115 bb.putLong(arbitratorId);
116 bb.putLong(clientLocalSequenceNumber);
117 bb.putInt(partNumber);
118 bb.putInt(data.length);
129 public byte getType() {
130 return Entry.TypeTransactionPart;
133 public Entry getCopy(Slot s) {
135 TransactionPart copyTransaction = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
136 copyTransaction.setSequenceNumber(sequenceNumber);
138 return copyTransaction;