missingParts(NULL),
fldisComplete(false),
hasLastPart(false),
- keyValueUpdateSet(new Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, equalsKeyValue>()),
+ keyValueUpdateSet(new Hashset<KeyValue *, uintptr_t, 0>()),
isDead(false),
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) :
missingParts(NULL),
fldisComplete(true),
hasLastPart(false),
- keyValueUpdateSet(new Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, equalsKeyValue>()),
+ keyValueUpdateSet(new Hashset<KeyValue *, uintptr_t, 0>()),
isDead(false),
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) {
}
}
-Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, equalsKeyValue> *Commit::getKeyValueUpdateSet() {
+Hashset<KeyValue *, uintptr_t, 0> *Commit::getKeyValueUpdateSet() {
return keyValueUpdateSet;
}
commitPartCount++;
remaining -= copySize;
}
+ delete charData;
}
void Commit::decodeCommitData() {
keyValueUpdateSet->add(kv);
liveKeys->add(kv->getKey());
}
+ delete bbDecode;
}
Array<char> *Commit::convertDataToBytes() {
// Calculate the size of the data
int sizeOfData = sizeof(int32_t); // Number of Update KV's
- SetIterator<KeyValue *, KeyValue *, uintptr_t, 0, hashKeyValue, equalsKeyValue> *kvit = keyValueUpdateSet->iterator();
+ SetIterator<KeyValue *, KeyValue *, uintptr_t, 0> *kvit = keyValueUpdateSet->iterator();
while (kvit->hasNext()) {
KeyValue *kv = kvit->next();
sizeOfData += kv->getSize();
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, hashKeyValue, equalsKeyValue> *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, hashKeyValue, equalsKeyValue> *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, hashKeyValue, equalsKeyValue> *kvSet = new Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, equalsKeyValue>();
- SetIterator<KeyValue *, KeyValue *, uintptr_t, 0, hashKeyValue, equalsKeyValue> *kvit = older->getKeyValueUpdateSet()->iterator();
+ 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();
kvSet->add(kv);