X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iotcloud.git;a=blobdiff_plain;f=version2%2Fsrc%2FC%2FCommit.cc;h=a5b952d93b710249429768f036904683e0825c65;hp=4925d6f7e3b5428efec5aeab505d39a276b7c1ad;hb=41ff9c95ca5d4b707386c1b7e66df033169bf68d;hpb=f0a95f7a96e808259ced5e9f61e029773c7a85e6 diff --git a/version2/src/C/Commit.cc b/version2/src/C/Commit.cc index 4925d6f..a5b952d 100644 --- a/version2/src/C/Commit.cc +++ b/version2/src/C/Commit.cc @@ -1,84 +1,77 @@ +#include "commit.h" + +Commit::Commit() : + parts(new Hashtable()), + missingParts(NULL), + fldisComplete(false), + hasLastPart(false), + keyValueUpdateSet(new HashSet()), + isDead(false), + sequenceNumber(-1), + machineId(-1), + transactionSequenceNumber(-1), + liveKeys(new Hashset) { +} -class Commit { - - Map parts = NULL; - Set missingParts = NULL; - bool isComplete = false; - bool hasLastPart = false; - Set keyValueUpdateSet = NULL; - bool isDead = false; - int64_t sequenceNumber = -1; - int64_t machineId = -1; - int64_t transactionSequenceNumber = -1; - - Set liveKeys = NULL; - - Commit() { - parts = new HashMap(); - keyValueUpdateSet = new HashSet(); - - liveKeys = new HashSet(); - } - - Commit(int64_t _sequenceNumber, int64_t _machineId, int64_t _transactionSequenceNumber) { - parts = new HashMap(); - keyValueUpdateSet = new HashSet(); - - liveKeys = new HashSet(); - - sequenceNumber = _sequenceNumber; - machineId = _machineId; - transactionSequenceNumber = _transactionSequenceNumber; - isComplete = true; - } - - - void addPartDecode(CommitPart newPart) { - - if (isDead) { - // If dead then just kill this part and move on - newPart.setDead(); - return; - } - - CommitPart previoslySeenPart = parts.put(newPart.getPartNumber(), newPart); - - if (previoslySeenPart != NULL) { - // Set dead the old one since the new one is a rescued version of this part - previoslySeenPart.setDead(); - } else if (newPart.isLastPart()) { - missingParts = new HashSet(); - hasLastPart = true; - - for (int i = 0; i < newPart.getPartNumber(); i++) { - if (parts.get(i) == NULL) { - missingParts.add(i); - } - } - } - - if (!isComplete && hasLastPart) { - - // We have seen this part so remove it from the set of missing parts - missingParts.remove(newPart.getPartNumber()); - - // Check if all the parts have been seen - if (missingParts.size() == 0) { - - // We have all the parts - isComplete = true; - - // Decode all the parts and create the key value guard and update sets - decodeCommitData(); +Commit::Commit(int64_t _sequenceNumber, int64_t _machineId, int64_t _transactionSequenceNumber) : + parts(new Hashtable()), + missingParts(NULL), + fldisComplete(true), + hasLastPart(false), + keyValueUpdateSet(new HashSet()), + isDead(false), + sequenceNumber(_sequenceNumber), + machineId(_machineId), + transactionSequenceNumber(_transactionSequenceNumber), + liveKeys(new Hashset) { +} - // Get the sequence number and arbitrator of this transaction - sequenceNumber = parts.get(0).getSequenceNumber(); - machineId = parts.get(0).getMachineId(); - transactionSequenceNumber = parts.get(0).getTransactionSequenceNumber(); - } - } - } +void Commit::addPartDecode(CommitPart newPart) { + + if (isDead) { + // If dead then just kill this part and move on + newPart.setDead(); + return; + } + + CommitPart previoslySeenPart = parts.put(newPart.getPartNumber(), newPart); + + if (previoslySeenPart != NULL) { + // Set dead the old one since the new one is a rescued version of this part + previoslySeenPart.setDead(); + } else if (newPart.isLastPart()) { + missingParts = new HashSet(); + hasLastPart = true; + + for (int i = 0; i < newPart.getPartNumber(); i++) { + if (parts.get(i) == NULL) { + missingParts.add(i); + } + } + } + + if (!fldisComplete && hasLastPart) { + + // We have seen this part so remove it from the set of missing parts + missingParts.remove(newPart.getPartNumber()); + + // Check if all the parts have been seen + if (missingParts.size() == 0) { + + // We have all the parts + fldisComplete = true; + + // Decode all the parts and create the key value guard and update sets + decodeCommitData(); + + // Get the sequence number and arbitrator of this transaction + sequenceNumber = parts.get(0).getSequenceNumber(); + machineId = parts.get(0).getMachineId(); + transactionSequenceNumber = parts.get(0).getTransactionSequenceNumber(); + } + } +} int64_t getSequenceNumber() { return sequenceNumber; @@ -88,7 +81,7 @@ class Commit { return transactionSequenceNumber; } - Map getParts() { + Hashtable getParts() { return parts; } @@ -109,21 +102,9 @@ class Commit { return keyValueUpdateSet; } - int getNumberOfParts() { - return parts.size(); - } - - int64_t getMachineId() { - return machineId; - } - - bool isComplete() { - return isComplete; - } - - bool isLive() { - return !isDead; - } +int32_t getNumberOfParts() { + return parts.size(); +} void setDead() { if (isDead) { @@ -135,7 +116,7 @@ class Commit { isDead = true; // Make all the parts of this transaction dead - for (Integer partNumber : parts.keySet()) { + for (int32_t partNumber : parts.keySet()) { CommitPart part = parts.get(partNumber); part.setDead(); } @@ -237,7 +218,7 @@ class Commit { return bbEncode.array(); } - void setKVsMap(Map newKVs) { + void setKVsMap(Hashtable newKVs) { keyValueUpdateSet.clear(); liveKeys.clear(); @@ -255,7 +236,7 @@ class Commit { return older; } - Map kvSet = new HashMap(); + Hashtable kvSet = new Hashtable(); for (KeyValue kv : older.getKeyValueUpdateSet()) { kvSet.put(kv.getKey(), kv); }