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);
39 return (4 * Long.SIZE/8) + (2 * Integer.SIZE/8) + (2 * Byte.SIZE/8);
41 //return (4 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES) + data.length;
42 return (4 * Long.SIZE/8) + (2 * Integer.SIZE/8) + (2 * Byte.SIZE/8) + data.length;
45 public void setSlot(Slot s) {
49 public Pair<Long, Long> getTransactionId() {
53 public long getArbitratorId() {
57 public Pair<Long, Integer> getPartId() {
61 public int getPartNumber() {
65 public int getDataSize() {
69 public byte[] getData() {
73 public Boolean isLastPart() {
77 public long getMachineId() {
81 public long getClientLocalSequenceNumber() {
82 return clientLocalSequenceNumber;
86 public long getSequenceNumber() {
87 return sequenceNumber;
90 public void setSequenceNumber(long _sequenceNumber) {
91 sequenceNumber = _sequenceNumber;
94 static Entry decode(Slot s, ByteBuffer bb) {
95 long sequenceNumber = bb.getLong();
96 long machineId = bb.getLong();
97 long arbitratorId = bb.getLong();
98 long clientLocalSequenceNumber = bb.getLong();
99 int partNumber = bb.getInt();
100 int dataSize = bb.getInt();
101 Boolean isLastPart = (bb.get() == 1);
103 byte[] data = new byte[dataSize];
106 TransactionPart returnTransactionPart = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
107 returnTransactionPart.setSequenceNumber(sequenceNumber);
109 return returnTransactionPart;
112 public void encode(ByteBuffer bb) {
113 bb.put(Entry.TypeTransactionPart);
114 bb.putLong(sequenceNumber);
115 bb.putLong(machineId);
116 bb.putLong(arbitratorId);
117 bb.putLong(clientLocalSequenceNumber);
118 bb.putInt(partNumber);
119 bb.putInt(data.length);
130 public byte getType() {
131 return Entry.TypeTransactionPart;
134 public Entry getCopy(Slot s) {
136 TransactionPart copyTransaction = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
137 copyTransaction.setSequenceNumber(sequenceNumber);
139 return copyTransaction;