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);
41 return (3 * Long.SIZE/8) + (2 * Integer.SIZE/8) + (2 * Byte.SIZE/8);
43 //return (3 * Long.BYTES) + (2 * Integer.BYTES) + (2 * Byte.BYTES) + data.length;
44 return (3 * Long.SIZE/8) + (2 * Integer.SIZE/8) + (2 * Byte.SIZE/8) + data.length;
47 public void setSlot(Slot s) {
51 public int getPartNumber() {
55 public int getDataSize() {
59 public byte[] getData() {
63 public Pair<Long, Integer> getPartId() {
67 public Pair<Long, Long> getCommitId() {
71 public Boolean isLastPart() {
75 public long getMachineId() {
79 public long getTransactionSequenceNumber() {
80 return transactionSequenceNumber;
83 public long getSequenceNumber() {
84 return sequenceNumber;
87 static Entry decode(Slot s, ByteBuffer bb) {
88 long machineId = bb.getLong();
89 long sequenceNumber = bb.getLong();
90 long transactionSequenceNumber = bb.getLong();
91 int partNumber = bb.getInt();
92 int dataSize = bb.getInt();
93 Boolean isLastPart = bb.get() == 1;
96 byte[] data = new byte[dataSize];
99 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
102 public void encode(ByteBuffer bb) {
103 bb.put(Entry.TypeCommitPart);
104 bb.putLong(machineId);
105 bb.putLong(sequenceNumber);
106 bb.putLong(transactionSequenceNumber);
107 bb.putInt(partNumber);
108 bb.putInt(data.length);
119 public byte getType() {
120 return Entry.TypeCommitPart;
123 public Entry getCopy(Slot s) {
124 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);