From 52bf08afc4b9da9ccdd73089c8ebfc7bda859bd3 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Thu, 24 Mar 2022 22:41:46 +0100 Subject: Migration now works in larger disk IO chunks BasicFile and CasLogFile now has new explicit modes instead of create true/false --- zenstore/caslog.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'zenstore/caslog.cpp') 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(RecordSize), .LogId = Oid::NewOid(), .ValidatedTail = 0}; memcpy(Header.Magic, FileHeader::MagicSequence, sizeof Header.Magic); -- cgit v1.2.3