sequenceNumber(-1),
machineId(-1),
transactionSequenceNumber(-1),
- liveKeys(new Hashset<IoTString *>) {
+ liveKeys(new Hashset<IoTString *>()) {
}
Commit::Commit(int64_t _sequenceNumber, int64_t _machineId, int64_t _transactionSequenceNumber) :
sequenceNumber(_sequenceNumber),
machineId(_machineId),
transactionSequenceNumber(_transactionSequenceNumber),
- liveKeys(new Hashset<IoTString *>) {
+ liveKeys(new Hashset<IoTString *>()) {
+}
+
+Commit::~Commit() {
+ delete parts;
+ {
+ SetIterator<KeyValue *, KeyValue *, uintptr_t, 0> * keyit = keyValueUpdateSet->iterator();
+ while(keyit->hasNext()) {
+ delete keyit->next();
+ }
+ delete keyit;
+ delete keyValueUpdateSet;
+ }
+ delete liveKeys;
+ if (missingParts != NULL)
+ delete missingParts;
}
void Commit::addPartDecode(CommitPart *newPart) {
}
void Commit::addKV(KeyValue *kv) {
- keyValueUpdateSet->add(kv);
- liveKeys->add(kv->getKey());
+ KeyValue * kvcopy = kv->getCopy();
+ keyValueUpdateSet->add(kvcopy);
+ liveKeys->add(kvcopy->getKey());
}
void Commit::invalidateKey(IoTString *key) {
commitPartCount++;
remaining -= copySize;
}
+ delete charData;
}
void Commit::decodeCommitData() {
keyValueUpdateSet->add(kv);
liveKeys->add(kv->getKey());
}
+ delete bbDecode;
}
Array<char> *Commit::convertDataToBytes() {
kv->encode(bbEncode);
}
delete kvit;
-
- return bbEncode->array();
+ Array<char> * array = bbEncode->array();
+ bbEncode->releaseArray();
+ delete bbEncode;
+ return array;
}
-void Commit::setKVsMap(Hashset<KeyValue *, uintptr_t, 0> *newKVs) {
+void Commit::setKVsMap(Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, KeyValueEquals> *newKVs) {
keyValueUpdateSet->clear();
- keyValueUpdateSet->addAll(newKVs);
liveKeys->clear();
- SetIterator<KeyValue *, KeyValue *, uintptr_t, 0> *kvit = newKVs->iterator();
+ SetIterator<KeyValue *, KeyValue *, uintptr_t, 0, hashKeyValue, KeyValueEquals> *kvit = newKVs->iterator();
while (kvit->hasNext()) {
- liveKeys->add(kvit->next()->getKey());
+ KeyValue *kv = kvit->next();
+ KeyValue *kvcopy = kv->getCopy();
+ liveKeys->add(kvcopy->getKey());
+ keyValueUpdateSet->add(kvcopy);
}
delete kvit;
}
} else if (newer == NULL) {
return older;
}
- Hashset<KeyValue *, uintptr_t, 0> *kvSet = new Hashset<KeyValue *, uintptr_t, 0>();
+ Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, KeyValueEquals> *kvSet = new Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, KeyValueEquals>();
SetIterator<KeyValue *, KeyValue *, uintptr_t, 0> *kvit = older->getKeyValueUpdateSet()->iterator();
while (kvit->hasNext()) {
KeyValue *kv = kvit->next();