liveKeys(new Hashset<IoTString *>) {
}
-
Commit::Commit(int64_t _sequenceNumber, int64_t _machineId, int64_t _transactionSequenceNumber) :
parts(new Hashtable<int32_t, CommitPart *>()),
missingParts(NULL),
}
void Commit::setDead() {
- if (isDead) {
- // Already dead
- return;
- }
-
- // Set dead
- isDead = true;
-
- // Make all the parts of this transaction dead
- for (int32_t partNumber : parts->keySet()) {
- CommitPart *part = parts->get(partNumber);
- part->setDead();
+ if (!isDead) {
+ isDead = true;
+ // Make all the parts of this transaction dead
+ for (int32_t partNumber : parts->keySet()) {
+ CommitPart *part = parts->get(partNumber);
+ part->setDead();
+ }
}
}
void Commit::createCommitParts() {
parts->clear();
-
// Convert to chars
Array<char> *charData = convertDataToBytes();
-
int commitPartCount = 0;
int currentPosition = 0;
int remaining = charData->length();
while (remaining > 0) {
-
bool isLastPart = false;
// determine how much to copy
int copySize = CommitPart_MAX_NON_HEADER_SIZE;
}
void Commit::decodeCommitData() {
-
// Calculate the size of the data section
int dataSize = 0;
for (int i = 0; i < parts->keySet()->size(); i++) {
void Commit::setKVsMap(Hashtable<IoTString *, KeyValue *> *newKVs) {
keyValueUpdateSet->clear();
- liveKeys->clear();
-
keyValueUpdateSet->addAll(newKVs->values());
+ liveKeys->clear();
liveKeys->addAll(newKVs->keySet());
}
Commit *Commit_merge(Commit *newer, Commit *older, int64_t newSequenceNumber) {
-
if (older == NULL) {
return newer;
} else if (newer == NULL) {
return older;
}
-
Hashtable<IoTString *, KeyValue *> *kvSet = new Hashtable<IoTString *, KeyValue *>();
for (KeyValue *kv : older->getKeyValueUpdateSet()) {
kvSet->put(kv->getKey(), kv);
}
-
for (KeyValue *kv : newer->getKeyValueUpdateSet()) {
kvSet->put(kv->getKey(), kv);
}
int64_t transactionSequenceNumber = newer->getTransactionSequenceNumber();
-
if (transactionSequenceNumber == -1) {
transactionSequenceNumber = older->getTransactionSequenceNumber();
}
Commit *newCommit = new Commit(newSequenceNumber, newer->getMachineId(), transactionSequenceNumber);
-
newCommit->setKVsMap(kvSet);
return newCommit;