X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iotcloud.git;a=blobdiff_plain;f=version2%2Fsrc%2FC%2FCommitPart.cc;h=d137a75e1611b1e36cc02700f8baa14061355b95;hp=3b3a10e0c280cf60d753af7436c5adab677cbda9;hb=fc3e0b967949a83c40622b339a115900c07fd253;hpb=d6c27611d268cac2b4371bb333f50d79fc41bf14 diff --git a/version2/src/C/CommitPart.cc b/version2/src/C/CommitPart.cc index 3b3a10e..d137a75 100644 --- a/version2/src/C/CommitPart.cc +++ b/version2/src/C/CommitPart.cc @@ -1,122 +1,101 @@ +#include "CommitPart.h" +#include "ByteBuffer.h" + +CommitPart::CommitPart(Slot *s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, Array *_data, bool _isLastPart) : + Entry(s), + machineId(_machineId), + sequenceNumber(_sequenceNumber), + transactionSequenceNumber(_transactionSequenceNumber), + partNumber(_partNumber), + fldisLastPart(_isLastPart), + data(_data), + partId(new Pair(sequenceNumber, partNumber)), + commitId(new Pair(machineId, sequenceNumber)) { +} +int CommitPart::getSize() { + if (data == NULL) { + return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)); + } + return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data->length(); +} +void CommitPart::setSlot(Slot* s) { + parentslot = s; +} +int CommitPart::getPartNumber() { + return partNumber; +} -class CommitPart extends Entry{ - - // Max size of the part excluding the fixed size header - static final int MAX_NON_HEADER_SIZE = 512; - - - // Sequence number of the transaction this commit is for, -1 if not a cloud transaction - int64_t machineId = -1; // Machine Id of the device that made the commit - int64_t sequenceNumber = -1; // commit sequence number for this arbitrator - int64_t transactionSequenceNumber = -1; - int partNumber = -1; // Parts position in the - Boolean isLastPart = false; - char[] data = NULL; - - Pair partId = NULL; - Pair commitId = NULL; - - - CommitPart(Slot s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, char[] _data, Boolean _isLastPart) { - super(s); - machineId = _machineId; - sequenceNumber = _sequenceNumber; - transactionSequenceNumber = _transactionSequenceNumber; - partNumber = _partNumber; - isLastPart = _isLastPart; - data = _data; - - partId = new Pair(sequenceNumber, partNumber); - commitId = new Pair(machineId, sequenceNumber); - } - - int getSize() { - if (data == NULL) { - return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)); - } - return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length; - } - - void setSlot(Slot s) { - parentslot = s; - } +int CommitPart::getDataSize() { + return data->length(); +} - int getPartNumber() { - return partNumber; - } +Array *CommitPart::getData() { + return data; +} - int getDataSize() { - return data.length; - } +Pair *CommitPart::getPartId() { + return partId; +} - char[] getData() { - return data; - } +Pair *CommitPart::getCommitId() { + return commitId; +} - Pair getPartId() { - return partId; - } +bool CommitPart::isLastPart() { + return fldisLastPart; +} - Pair getCommitId() { - return commitId; - } +int64_t CommitPart::getMachineId() { + return machineId; +} - Boolean isLastPart() { - return isLastPart; - } +int64_t CommitPart::getTransactionSequenceNumber() { + return transactionSequenceNumber; +} - int64_t getMachineId() { - return machineId; - } +int64_t CommitPart::getSequenceNumber() { + return sequenceNumber; +} - int64_t getTransactionSequenceNumber() { - return transactionSequenceNumber; - } +Entry *CommitPart_decode(Slot *s, ByteBuffer *bb) { + int64_t machineId = bb->getLong(); + int64_t sequenceNumber = bb->getLong(); + int64_t transactionSequenceNumber = bb->getLong(); + int partNumber = bb->getInt(); + int dataSize = bb->getInt(); + bool isLastPart = bb->get() == 1; - int64_t getSequenceNumber() { - return sequenceNumber; - } + // Get the data + Array *data = new Array(dataSize); + bb->get(data); - static Entry decode(Slot s, ByteBuffer bb) { - int64_t machineId = bb->getLong(); - int64_t sequenceNumber = bb->getLong(); - int64_t transactionSequenceNumber = bb->getLong(); - int partNumber = bb->getInt(); - int dataSize = bb->getInt(); - Boolean isLastPart = bb->get() == 1; + return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart); +} - // Get the data - char[] data = new char[dataSize]; - bb->get(data); +void CommitPart::encode(ByteBuffer *bb) { + bb->put(TypeCommitPart); + bb->putLong(machineId); + bb->putLong(sequenceNumber); + bb->putLong(transactionSequenceNumber); + bb->putInt(partNumber); + bb->putInt(data->length()); + + if (fldisLastPart) { + bb->put((char)1); + } else { + bb->put((char)0); + } + + bb->put(data); +} - return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart); - } +char CommitPart::getType() { + return TypeCommitPart; +} - void encode(ByteBuffer bb) { - bb->put(Entry.TypeCommitPart); - bb->putLong(machineId); - bb->putLong(sequenceNumber); - bb->putLong(transactionSequenceNumber); - bb->putInt(partNumber); - bb->putInt(data.length); - - if (isLastPart) { - bb->put((char)1); - } else { - bb->put((char)0); - } - - bb->put(data); - } - - char getType() { - return Entry.TypeCommitPart; - } - - Entry getCopy(Slot s) { - return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart); - } +Entry *CommitPart::getCopy(Slot *s) { + return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, fldisLastPart); }