edits
[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     Boolean 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, Boolean _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     Boolean 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         Boolean 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 }