diff options
| author | Dan Engelbrecht <[email protected]> | 2022-03-24 22:41:46 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-03-31 11:29:27 +0200 |
| commit | 52bf08afc4b9da9ccdd73089c8ebfc7bda859bd3 (patch) | |
| tree | 87fdb172c98fd05b5c64398cce6b1c6be6db257e /zenstore/caslog.cpp | |
| parent | clean up paths (diff) | |
| download | zen-52bf08afc4b9da9ccdd73089c8ebfc7bda859bd3.tar.xz zen-52bf08afc4b9da9ccdd73089c8ebfc7bda859bd3.zip | |
Migration now works in larger disk IO chunks
BasicFile and CasLogFile now has new explicit modes instead of create true/false
Diffstat (limited to 'zenstore/caslog.cpp')
| -rw-r--r-- | zenstore/caslog.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/zenstore/caslog.cpp b/zenstore/caslog.cpp index 909605af9..906c97348 100644 --- a/zenstore/caslog.cpp +++ b/zenstore/caslog.cpp @@ -39,13 +39,23 @@ CasLogFile::~CasLogFile() } void -CasLogFile::Open(std::filesystem::path FileName, size_t RecordSize, bool IsCreate) +CasLogFile::Open(std::filesystem::path FileName, size_t RecordSize, EMode Mode) { m_RecordSize = RecordSize; - std::error_code Ec; - m_File.Open(FileName, IsCreate, Ec); + std::error_code Ec; + BasicFile::EMode FileMode = BasicFile::EMode::kRead; + switch (Mode) + { + case EMode::kWrite: + FileMode = BasicFile::EMode::kWrite; + break; + case EMode::kTruncate: + FileMode = BasicFile::EMode::kTruncate; + break; + } + m_File.Open(FileName, FileMode, Ec); if (Ec) { throw std::system_error(Ec, fmt::format("Failed to open log file '{}'", FileName)); @@ -53,8 +63,12 @@ CasLogFile::Open(std::filesystem::path FileName, size_t RecordSize, bool IsCreat uint64_t AppendOffset = 0; - if (IsCreate || (m_File.FileSize() < sizeof(FileHeader))) + if ((Mode == EMode::kTruncate) || (m_File.FileSize() < sizeof(FileHeader))) { + if (Mode == EMode::kRead) + { + throw std::runtime_error(fmt::format("Mangled log header (file to small) in '{}'", FileName)); + } // Initialize log by writing header FileHeader Header = {.RecordSize = gsl::narrow<uint32_t>(RecordSize), .LogId = Oid::NewOid(), .ValidatedTail = 0}; memcpy(Header.Magic, FileHeader::MagicSequence, sizeof Header.Magic); |