5 class CommitPart extends Entry {
7 // Max size of the part excluding the fixed size header
8 public 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 private int64_t machineId = -1; // Machine Id of the device that made the commit
13 private int64_t sequenceNumber = -1; // commit sequence number for this arbitrator
14 private int64_t transactionSequenceNumber = -1;
15 private int partNumber = -1; // Parts position in the
16 private bool isLastPart = false;
17 private char[] data = NULL;
19 private Pair<int64_t int32_t> partId = NULL;
20 private Pair<int64_t, int64_t> commitId = NULL;
23 public CommitPart(Slot s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, char[] _data, bool _isLastPart) {
25 machineId = _machineId;
26 sequenceNumber = _sequenceNumber;
27 transactionSequenceNumber = _transactionSequenceNumber;
28 partNumber = _partNumber;
29 isLastPart = _isLastPart;
32 partId = new Pair<int64_t int32_t>(sequenceNumber, partNumber);
33 commitId = new Pair<int64_t, int64_t>(machineId, sequenceNumber);
36 public int getSize() {
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 public void setSlot(Slot s) {
47 public int getPartNumber() {
51 public int getDataSize() {
55 public char[] getData() {
59 public Pair<int64_t int32_t> getPartId() {
63 public Pair<int64_t, int64_t> getCommitId() {
67 public bool isLastPart() {
71 public int64_t getMachineId() {
75 public int64_t getTransactionSequenceNumber() {
76 return transactionSequenceNumber;
79 public 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 bool isLastPart = bb->get() == 1;
92 char[] data = new char[dataSize];
95 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
98 public 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);
115 public char getType() {
116 return Entry.TypeCommitPart;
119 public Entry getCopy(Slot s) {
120 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);