class CommitPart extends Entry{ // Max size of the part excluding the fixed size header public static final int MAX_NON_HEADER_SIZE = 512; // Sequence number of the transaction this commit is for, -1 if not a cloud transaction private int64_t machineId = -1; // Machine Id of the device that made the commit private int64_t sequenceNumber = -1; // commit sequence number for this arbitrator private int64_t transactionSequenceNumber = -1; private int partNumber = -1; // Parts position in the private Boolean isLastPart = false; private char[] data = NULL; private Pair partId = NULL; private Pair commitId = NULL; public CommitPart(Slot s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, char[] _data, Boolean _isLastPart) { super(s); machineId = _machineId; sequenceNumber = _sequenceNumber; transactionSequenceNumber = _transactionSequenceNumber; partNumber = _partNumber; isLastPart = _isLastPart; data = _data; partId = new Pair(sequenceNumber, partNumber); commitId = new Pair(machineId, sequenceNumber); } public int getSize() { if (data == NULL) { return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)); } return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length; } public void setSlot(Slot s) { parentslot = s; } public int getPartNumber() { return partNumber; } public int getDataSize() { return data.length; } public char[] getData() { return data; } public Pair getPartId() { return partId; } public Pair getCommitId() { return commitId; } public Boolean isLastPart() { return isLastPart; } public int64_t getMachineId() { return machineId; } public int64_t getTransactionSequenceNumber() { return transactionSequenceNumber; } public int64_t getSequenceNumber() { return sequenceNumber; } static Entry decode(Slot s, ByteBuffer bb) { int64_t machineId = bb.getLong(); int64_t sequenceNumber = bb.getLong(); int64_t transactionSequenceNumber = bb.getLong(); int partNumber = bb.getInt(); int dataSize = bb.getInt(); Boolean isLastPart = bb.get() == 1; // Get the data char[] data = new char[dataSize]; bb.get(data); return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart); } public void encode(ByteBuffer bb) { bb.put(Entry.TypeCommitPart); bb.putLong(machineId); bb.putLong(sequenceNumber); bb.putLong(transactionSequenceNumber); bb.putInt(partNumber); bb.putInt(data.length); if (isLastPart) { bb.put((char)1); } else { bb.put((char)0); } bb.put(data); } public char getType() { return Entry.TypeCommitPart; } public Entry getCopy(Slot s) { return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart); } }