diff --git a/docs/StorageManagerMetaVersioning.md b/docs/StorageManagerMetaVersioning.md deleted file mode 100644 index ebeb21810..000000000 --- a/docs/StorageManagerMetaVersioning.md +++ /dev/null @@ -1,37 +0,0 @@ - -`Create meta version.` -```mermaid -sequenceDiagram - participant MetaVersionNew - participant StorageManager - participant S3Bucket - participant ControllerNode - StorageManager->>ControllerNode: Send command to freeze. (similar to readonly) - StorageManager->>MetaVersionNew: Create new meta version - StorageManager->>S3Bucket: Pack and put file with meta version on S3. - StorageManager->>ControllerNode: Send command to unfreeze. -``` - -`Regular work flow.` -```mermaid -sequenceDiagram - participant MetaVersion - participant StorageManager - participant S3Bucket - StorageManager->>S3Bucket: Request object from S3 - S3Bucket->>StorageManager: Send object to worker node - StorageManager->>S3Bucket: Update and put new object on S3 - StorageManager->>MetaVersion: Check object in meta version - StorageManager->>S3Bucket: Delete object if not in MetaVersion -``` - -`On rollback to version.` -```mermaid -sequenceDiagram - participant MetaVersion - participant StorageManager - participant S3Bucket - StorageManager->>S3Bucket: Request meta version. - S3Bucket->>StorageManager: Send meta version to worker node. - StorageManager->>MetaVersion: Unpack metaversion. -``` diff --git a/versioning/BRM/brmtypes.cpp b/versioning/BRM/brmtypes.cpp index 89d92d05a..3992b5c61 100644 --- a/versioning/BRM/brmtypes.cpp +++ b/versioning/BRM/brmtypes.cpp @@ -444,40 +444,7 @@ void TableLockInfo::deserialize(istream& i) dbrootList.resize(dbrootListSize); for (uint32_t j = 0; j < dbrootListSize; j++) - i.read((char*)&dbrootList[j], sizeof(uint32_t)); -} - -uint32_t TableLockInfo::getInternalSize() const -{ - const uint32_t nameLen = ownerName.length(); - const uint32_t dbrootListSize = dbrootList.size(); - return (32 + sizeof(time_t) + nameLen + (dbrootListSize * sizeof(uint32_t))); -} - -void TableLockInfo::serializeElement(char* buffer, const char* src, const uint32_t size, uint32_t& offset) -{ - std::memcpy(&buffer[offset], src, size); - offset += size; -} - -void TableLockInfo::serialize(char* buffer, uint32_t& offset) -{ - const uint32_t nameLen = ownerName.length(); - const uint32_t dbrootListSize = dbrootList.size(); - - serializeElement(buffer, (char*)&id, 8, offset); - serializeElement(buffer, (char*)&tableOID, 4, offset); - serializeElement(buffer, (char*)&ownerPID, 4, offset); - serializeElement(buffer, (char*)&state, 4, offset); - serializeElement(buffer, (char*)&ownerSessionID, 4, offset); - serializeElement(buffer, (char*)&ownerTxnID, 4, offset); - serializeElement(buffer, (char*)&creationTime, sizeof(time_t), offset); - serializeElement(buffer, (char*)&nameLen, 2, offset); - serializeElement(buffer, (char*)ownerName.c_str(), nameLen, offset); - serializeElement(buffer, (char*)&dbrootListSize, 2, offset); - - for (uint32_t j = 0; j < dbrootListSize; j++) - serializeElement(buffer, (char*)&dbrootList[j], sizeof(uint32_t), offset); + i.read((char*)&dbrootList[j], 4); } void TableLockInfo::serialize(IDBDataFile* o) const diff --git a/versioning/BRM/brmtypes.h b/versioning/BRM/brmtypes.h index 594319b49..a399e103b 100644 --- a/versioning/BRM/brmtypes.h +++ b/versioning/BRM/brmtypes.h @@ -254,12 +254,7 @@ struct TableLockInfo : public messageqcpp::Serializeable EXPORT void deserialize(messageqcpp::ByteStream& bs); EXPORT void serialize(idbdatafile::IDBDataFile*) const; EXPORT void deserialize(idbdatafile::IDBDataFile*); - EXPORT void serialize(char* buffer, uint32_t& offset); - EXPORT uint32_t getInternalSize() const; bool operator<(const TableLockInfo&) const; - - private: - void serializeElement(char* buffer, const char* src, const uint32_t size, uint32_t& offset); }; /// A Serializeable version of InlineLBIDRange diff --git a/versioning/BRM/slavecomm.cpp b/versioning/BRM/slavecomm.cpp index b4f648eb7..a9e88decc 100644 --- a/versioning/BRM/slavecomm.cpp +++ b/versioning/BRM/slavecomm.cpp @@ -191,6 +191,7 @@ SlaveComm::SlaveComm() slave = std::make_unique(); } + void SlaveComm::stop() { die = true; @@ -1927,8 +1928,7 @@ void SlaveComm::do_confirm() { if (!currentSaveFile) { - currentSaveFile.reset( - IDBDataFile::open(IDBPolicy::getType(tmp.c_str(), IDBPolicy::WRITEENG), tmp.c_str(), "wb", 0)); + currentSaveFile.reset(IDBDataFile::open(IDBPolicy::getType(tmp.c_str(), IDBPolicy::WRITEENG), tmp.c_str(), "wb", 0)); } if (currentSaveFile == NULL) @@ -1951,8 +1951,7 @@ void SlaveComm::do_confirm() if (err < (int)relative.length()) { ostringstream os; - os << "WorkerComm: currentfile write() returned " << err << " file pointer is " - << currentSaveFile.get(); + os << "WorkerComm: currentfile write() returned " << err << " file pointer is " << currentSaveFile.get(); if (err < 0) os << " errno: " << strerror(errno); @@ -1967,7 +1966,7 @@ void SlaveComm::do_confirm() ; journalh.reset(IDBDataFile::open(IDBPolicy::getType(journalName.c_str(), IDBPolicy::WRITEENG), - journalName.c_str(), "w+b", 0)); + journalName.c_str(), "w+b", 0)); if (!journalh) throw runtime_error("Could not open the BRM journal for writing!"); @@ -2183,16 +2182,11 @@ void SlaveComm::saveDelta() { try { - const uint32_t deltaLen = delta.length(); - const uint32_t bufferSize = sizeof(deltaLen) + deltaLen; - std::unique_ptr buffer(new char[bufferSize]); - uint32_t offset = 0; - std::memcpy(&buffer[offset], (char*)&deltaLen, sizeof(deltaLen)); - offset += sizeof(deltaLen); - std::memcpy(&buffer[offset], (char*)delta.buf(), deltaLen); + uint32_t len = delta.length(); journalh->seek(0, SEEK_END); - journalh->write((const char*)buffer.get(), bufferSize); + journalh->write((const char*)&len, sizeof(len)); + journalh->write((const char*)delta.buf(), delta.length()); journalh->flush(); journalCount++; } @@ -2332,3 +2326,4 @@ void SlaveComm::do_dmlReleaseLBIDRanges(ByteStream& msg) } } // namespace BRM + diff --git a/versioning/BRM/tablelockserver.cpp b/versioning/BRM/tablelockserver.cpp index 238605269..fd13d211e 100644 --- a/versioning/BRM/tablelockserver.cpp +++ b/versioning/BRM/tablelockserver.cpp @@ -70,21 +70,14 @@ void TableLockServer::save() if (!out) throw runtime_error("TableLockServer::save(): could not open save file"); - uint32_t bufferSize = 4; - for (const auto& lock : locks) - bufferSize += lock.second.getInternalSize(); - - std::unique_ptr buffer(new char[bufferSize]); - uint32_t offset = 0; - std::memcpy(&buffer[offset], (char*)&count, 4); - offset += 4; + out->write((char*)&count, 4); for (it = locks.begin(); it != locks.end(); ++it) { if (!out) throw runtime_error("TableLockServer::save(): could not write save file"); - it->second.serialize(buffer.get(), offset); + it->second.serialize(out.get()); } }