tabbing
[iotcloud.git] / version2 / src / C / CommitPart.cc
1
2
3
4
5 class CommitPart extends Entry {
6
7         // Max size of the part excluding the fixed size header
8         static final int MAX_NON_HEADER_SIZE = 512;
9
10
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         bool isLastPart = false;
17         char[] data = NULL;
18
19         Pair<int64_t int32_t> partId = NULL;
20         Pair<int64_t, int64_t> commitId = NULL;
21
22
23         CommitPart(Slot s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, char[] _data, bool _isLastPart) {
24                 super(s);
25                 machineId = _machineId;
26                 sequenceNumber = _sequenceNumber;
27                 transactionSequenceNumber = _transactionSequenceNumber;
28                 partNumber = _partNumber;
29                 isLastPart = _isLastPart;
30                 data = _data;
31
32                 partId = new Pair<int64_t int32_t>(sequenceNumber, partNumber);
33                 commitId = new Pair<int64_t, int64_t>(machineId, sequenceNumber);
34         }
35
36         int getSize() {
37                 if (data == NULL) {
38                         return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
39                 }
40                 return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length;
41         }
42
43         void setSlot(Slot s) {
44                 parentslot = s;
45         }
46
47         int getPartNumber() {
48                 return partNumber;
49         }
50
51         int getDataSize() {
52                 return data.length;
53         }
54
55         char[] getData() {
56                 return data;
57         }
58
59         Pair<int64_t int32_t> getPartId() {
60                 return partId;
61         }
62
63         Pair<int64_t, int64_t> getCommitId() {
64                 return commitId;
65         }
66
67         bool isLastPart() {
68                 return isLastPart;
69         }
70
71         int64_t getMachineId() {
72                 return machineId;
73         }
74
75         int64_t getTransactionSequenceNumber() {
76                 return transactionSequenceNumber;
77         }
78
79         int64_t getSequenceNumber() {
80                 return sequenceNumber;
81         }
82
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;
90
91                 // Get the data
92                 char[] data = new char[dataSize];
93                 bb->get(data);
94
95                 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
96         }
97
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);
105
106                 if (isLastPart) {
107                         bb->put((char)1);
108                 } else {
109                         bb->put((char)0);
110                 }
111
112                 bb->put(data);
113         }
114
115         char getType() {
116                 return Entry.TypeCommitPart;
117         }
118
119         Entry getCopy(Slot s) {
120                 return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
121         }
122 }