X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iotcloud.git;a=blobdiff_plain;f=version2%2Fsrc%2FC%2FTable.h;h=394e6d63e3053ede1658005fbb10e5b2a22c7900;hp=1d58776dc44ec2b11113cc261af98dcadf2d6e07;hb=9c3fa5cbce287df14626d262bd0179e994338869;hpb=3e13e92e323d8bb88021721ebc27765227fe7107 diff --git a/version2/src/C/Table.h b/version2/src/C/Table.h index 1d58776..394e6d6 100644 --- a/version2/src/C/Table.h +++ b/version2/src/C/Table.h @@ -65,13 +65,13 @@ private: Hashtable *> *lastMessageTable; // Last message sent by a client machine id -> (Seq Num, Slot or LastMessage); Hashtable *> *rejectedMessageWatchVectorTable; // Table of machine Ids and the set of rejected messages they have not seen yet Hashtable *arbitratorTable;// Table of keys and their arbitrators - Hashtable *, Abort *> *liveAbortTable;// Table live abort messages - Hashtable *, TransactionPart *> *> *newTransactionParts; // transaction parts that are seen in this latest round of slots from the server - Hashtable *, CommitPart *> *> *newCommitParts; // commit parts that are seen in this latest round of slots from the server + Hashtable *, Abort *, uintptr_t, 0, pairHashFunction, pairEquals> *liveAbortTable;// Table live abort messages + Hashtable *, TransactionPart *, uintptr_t, 0, pairHashFunction, pairEquals> *> *newTransactionParts; // transaction parts that are seen in this latest round of slots from the server + Hashtable *, CommitPart *, uintptr_t, 0, pairHashFunction, pairEquals> *> *newCommitParts; // commit parts that are seen in this latest round of slots from the server Hashtable *lastArbitratedTransactionNumberByArbitratorTable; // Last transaction sequence number that an arbitrator arbitrated on Hashtable *liveTransactionBySequenceNumberTable; // live transaction grouped by the sequence number - Hashtable *, Transaction *> *liveTransactionByTransactionIdTable; // live transaction grouped by the transaction ID - Hashtable > *liveCommitsTable; + Hashtable *, Transaction *, uintptr_t, 0, pairHashFunction, pairEquals> *liveTransactionByTransactionIdTable; // live transaction grouped by the transaction ID + Hashtable *> *liveCommitsTable; Hashtable *liveCommitsByKeyTable; Hashtable *lastCommitSeenSequenceNumberByArbitratorTable; Vector *rejectedSlotVector; // Vector of rejected slots that have yet to be sent to the server @@ -81,8 +81,8 @@ private: Hashtable *> *transactionPartsSent; Hashtable *outstandingTransactionStatus; Hashtable *liveAbortsGeneratedByLocal; - Hashset *> *offlineTransactionsCommittedAndAtServer; - Hashtable > *localCommunicationTable; + Hashset *, uintptr_t, 0, pairHashFunction, pairEquals> *offlineTransactionsCommittedAndAtServer; + Hashtable *> *localCommunicationTable; Hashtable *lastTransactionSeenFromMachineFromServer; Hashtable *lastArbitrationDataLocalSequenceNumberSeenFromArbitrator; bool lastInsertedNewKey; @@ -97,11 +97,11 @@ private: bool sendToServer(NewKey *newKey); bool updateFromLocal(int64_t machineId); Pair sendTransactionToLocal(Transaction *transaction); - ThreeTuple *> *sendSlotsToServer(Slot *slot, int newSize, bool isNewKey); + ThreeTuple *> sendSlotsToServer(Slot *slot, int newSize, bool isNewKey); /** * Returns false if a resize was needed */ - ThreeTuple *fillSlot(Slot *slot, bool resize, NewKey *newKeyEntry); + ThreeTuple fillSlot(Slot *slot, bool resize, NewKey *newKeyEntry); void doRejectedMessages(Slot *s); ThreeTuple doMandatoryResuce(Slot *slot, bool resize); @@ -110,7 +110,7 @@ private: /** * Checks for malicious activity and updates the local copy of the block chain. */ - void validateAndUpdate(Array *newSlots, bool acceptUpdatesToLocal); + void validateAndUpdate(Array *newSlots, bool acceptUpdatesToLocal); void updateLiveStateFromServer(); @@ -146,7 +146,7 @@ private: void arbitrateFromServer(); - Pair arbitrateOnLocalTransaction(Transaction * transaction); + Pair arbitrateOnLocalTransaction(Transaction *transaction); /** * Compacts the arbitration data my merging commits and aggregating aborts so that a single large push of commits can be done instead of many small updates @@ -186,7 +186,7 @@ private: /** * Add the new key to the arbitrators table and update the set of live new keys (in case of a rescued new key message) */ - void processEntry(NewKey * entry); + void processEntry(NewKey *entry); /** * Process new table status entries and set dead the old ones as new ones come in. @@ -228,12 +228,12 @@ private: * Add a rejected message entry to the watch set to keep track of which clients have seen that * rejected message entry and which have not. */ - void addWatchVector(int64_t machineId, RejectedMessage * entry); + void addWatchVector(int64_t machineId, RejectedMessage *entry); /** * Check if the HMAC chain is not violated */ - void checkHMACChain(SlotIndexer * indexer, Array *newSlots); + void checkHMACChain(SlotIndexer *indexer, Array *newSlots); public: @@ -249,7 +249,7 @@ public: /** * Rebuild the table from scratch by pulling the latest block chain from the server. */ - bool update(); + void rebuild(); void addLocalCommunication(int64_t arbitrator, IoTString *hostName, int portNumber); int64_t getArbitrator(IoTString *key); @@ -257,6 +257,8 @@ public: IoTString *getCommitted(IoTString *key); IoTString *getSpeculative(IoTString *key); IoTString *getCommittedAtomic(IoTString *key); + IoTString *getSpeculativeAtomic(IoTString *key); + bool update(); bool createNewKey(IoTString *keyName, int64_t machineId); void startTransaction(); void addKV(IoTString *key, IoTString *value);