5 class CommitPart extends Entry{
7 // Max size of the part excluding the fixed size header
8 static final int MAX_NON_HEADER_SIZE = 512;
11 // Sequence number of the transaction this commit is for, -1 if not a cloud transaction
12 int64_t machineId = -1; // Machine Id of the device that made the commit
13 int64_t sequenceNumber = -1; // commit sequence number for this arbitrator
14 int64_t transactionSequenceNumber = -1;
15 int partNumber = -1; // Parts position in the
16 Boolean isLastPart = false;
19 Pair<Long, Integer> partId = NULL;
20 Pair<int64_t, int64_t> commitId = NULL;
23 CommitPart(Slot s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, char[] _data, Boolean _isLastPart) {
25 machineId = _machineId;
26 sequenceNumber = _sequenceNumber;
27 transactionSequenceNumber = _transactionSequenceNumber;
28 partNumber = _partNumber;
29 isLastPart = _isLastPart;
32 partId = new Pair<Long, Integer>(sequenceNumber, partNumber);
33 commitId = new Pair<int64_t, int64_t>(machineId, sequenceNumber);
38 return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
40 return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length;
43 void setSlot(Slot s) {
59 Pair<Long, Integer> getPartId() {
63 Pair<int64_t, int64_t> getCommitId() {
67 Boolean isLastPart() {
71 int64_t getMachineId() {
75 int64_t getTransactionSequenceNumber() {
76 return transactionSequenceNumber;
79 int64_t getSequenceNumber() {
80 return sequenceNumber;
83 static Entry decode(Slot s, ByteBuffer bb) {
84 int64_t machineId = bb->getLong();
85 int64_t sequenceNumber = bb->getLong();
86 int64_t transactionSequenceNumber = bb->getLong();
87 int partNumber = bb->getInt();
88 int dataSize = bb->getInt();
89 Boolean isLastPart = bb->get() == 1;
92 char[] data = new char[dataSize];
95 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
98 void encode(ByteBuffer bb) {
99 bb->put(Entry.TypeCommitPart);
100 bb->putLong(machineId);
101 bb->putLong(sequenceNumber);
102 bb->putLong(transactionSequenceNumber);
103 bb->putInt(partNumber);
104 bb->putInt(data.length);
116 return Entry.TypeCommitPart;
119 Entry getCopy(Slot s) {
120 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);