3 class TransactionPart extends Entry {
5 // Max size of the part excluding the fixed size header
6 static final int MAX_NON_HEADER_SIZE = 512;
8 int64_t sequenceNumber = -1;
9 int64_t machineId = -1;
10 int64_t arbitratorId = -1;
11 int64_t clientLocalSequenceNumber = -1; // Sequence number of the transaction that this is a part of
12 int partNumber = -1; // Parts position in the
13 Boolean isLastPart = false;
15 Pair<Long, Long> transactionId = NULL;
16 Pair<Long, Integer> partId = NULL;
20 TransactionPart(Slot s, int64_t _machineId, int64_t _arbitratorId, int64_t _clientLocalSequenceNumber, int _partNumber, char[] _data, Boolean _isLastPart) {
22 machineId = _machineId;
23 arbitratorId = _arbitratorId;
24 clientLocalSequenceNumber = _clientLocalSequenceNumber;
25 partNumber = _partNumber;
27 isLastPart = _isLastPart;
29 transactionId = new Pair<Long, Long>(machineId, clientLocalSequenceNumber);
30 partId = new Pair<Long, Integer>(clientLocalSequenceNumber, partNumber);
36 return (4 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
38 return (4 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length;
41 void setSlot(Slot s) {
45 Pair<Long, Long> getTransactionId() {
49 int64_t getArbitratorId() {
53 Pair<Long, Integer> getPartId() {
69 Boolean isLastPart() {
73 int64_t getMachineId() {
77 int64_t getClientLocalSequenceNumber() {
78 return clientLocalSequenceNumber;
82 int64_t getSequenceNumber() {
83 return sequenceNumber;
86 void setSequenceNumber(int64_t _sequenceNumber) {
87 sequenceNumber = _sequenceNumber;
90 static Entry decode(Slot s, ByteBuffer bb) {
91 int64_t sequenceNumber = bb->getLong();
92 int64_t machineId = bb->getLong();
93 int64_t arbitratorId = bb->getLong();
94 int64_t clientLocalSequenceNumber = bb->getLong();
95 int partNumber = bb->getInt();
96 int dataSize = bb->getInt();
97 Boolean isLastPart = (bb->get() == 1);
99 char[] data = new char[dataSize];
102 TransactionPart returnTransactionPart = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
103 returnTransactionPart.setSequenceNumber(sequenceNumber);
105 return returnTransactionPart;
108 void encode(ByteBuffer bb) {
109 bb->put(Entry.TypeTransactionPart);
110 bb->putLong(sequenceNumber);
111 bb->putLong(machineId);
112 bb->putLong(arbitratorId);
113 bb->putLong(clientLocalSequenceNumber);
114 bb->putInt(partNumber);
115 bb->putInt(data.length);
127 return Entry.TypeTransactionPart;
130 Entry getCopy(Slot s) {
132 TransactionPart copyTransaction = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
133 copyTransaction.setSequenceNumber(sequenceNumber);
135 return copyTransaction;