5 import java.nio.ByteBuffer;
7 class CommitPart extends Entry{
9 // Max size of the part excluding the fixed size header
10 public static final int MAX_NON_HEADER_SIZE = 512;
13 // Sequence number of the transaction this commit is for, -1 if not a cloud transaction
14 private long machineId = -1; // Machine Id of the device that made the commit
15 private long sequenceNumber = -1; // commit sequence number for this arbitrator
16 private long transactionSequenceNumber = -1;
17 private int partNumber = -1; // Parts position in the
18 private Boolean isLastPart = false;
19 private byte[] data = null;
21 private Pair<Long, Integer> partId = null;
22 private Pair<Long, Long> commitId = null;
25 public CommitPart(Slot s, long _machineId, long _sequenceNumber, long _transactionSequenceNumber, int _partNumber, byte[] _data, Boolean _isLastPart) {
27 machineId = _machineId;
28 sequenceNumber = _sequenceNumber;
29 transactionSequenceNumber = _transactionSequenceNumber;
30 partNumber = _partNumber;
31 isLastPart = _isLastPart;
34 partId = new Pair<Long, Integer>(sequenceNumber, partNumber);
35 commitId = new Pair<Long, Long>(machineId, sequenceNumber);
38 public int getSize() {
40 return (3 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES);
42 return (3 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES) + data.length;
45 public void setSlot(Slot s) {
49 public int getPartNumber() {
53 public int getDataSize() {
57 public byte[] getData() {
61 public Pair<Long, Integer> getPartId() {
65 public Pair<Long, Long> getCommitId() {
69 public Boolean isLastPart() {
73 public long getMachineId() {
77 public long getTransactionSequenceNumber() {
78 return transactionSequenceNumber;
81 public long getSequenceNumber() {
82 return sequenceNumber;
85 static Entry decode(Slot s, ByteBuffer bb) {
86 long machineId = bb.getLong();
87 long sequenceNumber = bb.getLong();
88 long transactionSequenceNumber = bb.getLong();
89 int partNumber = bb.getInt();
90 int dataSize = bb.getInt();
91 Boolean isLastPart = bb.get() == 1;
94 byte[] data = new byte[dataSize];
97 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
100 public void encode(ByteBuffer bb) {
101 bb.put(Entry.TypeCommitPart);
102 bb.putLong(machineId);
103 bb.putLong(sequenceNumber);
104 bb.putLong(transactionSequenceNumber);
105 bb.putInt(partNumber);
106 bb.putInt(data.length);
117 public byte getType() {
118 return Entry.TypeCommitPart;
121 public Entry getCopy(Slot s) {
122 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);