diff options
| author | Dan Engelbrecht <[email protected]> | 2022-03-16 12:16:13 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-03-31 11:28:32 +0200 |
| commit | 59e0d013af93088d61ea0c8f9100ef2a74776d12 (patch) | |
| tree | 3ba04ed3d8762bec6635a14f7f904c7e9cd5cc0f /zenstore/compactcas.cpp | |
| parent | Use proper hash function m_ChunkSet (diff) | |
| download | zen-59e0d013af93088d61ea0c8f9100ef2a74776d12.tar.xz zen-59e0d013af93088d61ea0c8f9100ef2a74776d12.zip | |
Moved ChunkBlock to be internal class
Added logging
Diffstat (limited to 'zenstore/compactcas.cpp')
| -rw-r--r-- | zenstore/compactcas.cpp | 56 |
1 files changed, 41 insertions, 15 deletions
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp index 126a18102..8204e5731 100644 --- a/zenstore/compactcas.cpp +++ b/zenstore/compactcas.cpp @@ -72,24 +72,47 @@ namespace { } // namespace -ChunkBlock::ChunkBlock(const std::filesystem::path& RootDirectory, const std::string_view ContainerBaseName, uint16_t BlockIndex) +struct CasContainerStrategy::ChunkBlock +{ + ChunkBlock(const std::filesystem::path& RootDirectory, const std::string_view ContainerBaseName, uint16_t BlockIndex); + ~ChunkBlock(); + const std::filesystem::path GetPath() const; + void Open(); + void Create(uint64_t InitialSize); + void MarkAsDeleteOnClose(); + uint64_t FileSize(); + IoBuffer GetRange(uint64_t Offset, uint64_t Size); + void Read(void* Data, uint64_t Size, uint64_t FileOffset); + void Write(const void* Data, uint64_t Size, uint64_t FileOffset); + void Flush(); + void StreamByteRange(uint64_t FileOffset, uint64_t Size, std::function<void(const void* Data, uint64_t Size)>&& ChunkFun); + +private: + std::filesystem::path m_Path; + BasicFile m_SmallObjectFile; + IoBuffer m_IoBuffer; +}; + +CasContainerStrategy::ChunkBlock::ChunkBlock(const std::filesystem::path& RootDirectory, + const std::string_view ContainerBaseName, + uint16_t BlockIndex) : m_Path(BuildUcasPath(RootDirectory, ContainerBaseName, BlockIndex)) { } -ChunkBlock::~ChunkBlock() +CasContainerStrategy::ChunkBlock::~ChunkBlock() { m_SmallObjectFile.Detach(); } const std::filesystem::path -ChunkBlock::GetPath() const +CasContainerStrategy::ChunkBlock::GetPath() const { return m_Path; } void -ChunkBlock::Open() +CasContainerStrategy::ChunkBlock::Open() { void* FileHandle = m_SmallObjectFile.Handle(); if (FileHandle != nullptr) @@ -102,7 +125,7 @@ ChunkBlock::Open() } void -ChunkBlock::Create(uint64_t InitialSize) +CasContainerStrategy::ChunkBlock::Create(uint64_t InitialSize) { void* FileHandle = m_SmallObjectFile.Handle(); if (FileHandle != nullptr) @@ -119,13 +142,13 @@ ChunkBlock::Create(uint64_t InitialSize) } uint64_t -ChunkBlock::FileSize() +CasContainerStrategy::ChunkBlock::FileSize() { return m_SmallObjectFile.FileSize(); } void -ChunkBlock::MarkAsDeleteOnClose() +CasContainerStrategy::ChunkBlock::MarkAsDeleteOnClose() { void* FileHandle = m_SmallObjectFile.Handle(); if (FileHandle == nullptr) @@ -136,33 +159,33 @@ ChunkBlock::MarkAsDeleteOnClose() } IoBuffer -ChunkBlock::GetRange(uint64_t Offset, uint64_t Size) +CasContainerStrategy::ChunkBlock::GetRange(uint64_t Offset, uint64_t Size) { - // What happens if we write to the file and it gets bigger and we - // request a new range that was not available when we called ChunkBlock::Open() return IoBuffer(m_IoBuffer, Offset, Size); } void -ChunkBlock::Read(void* Data, uint64_t Size, uint64_t FileOffset) +CasContainerStrategy::ChunkBlock::Read(void* Data, uint64_t Size, uint64_t FileOffset) { m_SmallObjectFile.Read(Data, Size, FileOffset); } void -ChunkBlock::Write(const void* Data, uint64_t Size, uint64_t FileOffset) +CasContainerStrategy::ChunkBlock::Write(const void* Data, uint64_t Size, uint64_t FileOffset) { m_SmallObjectFile.Write(Data, Size, FileOffset); } void -ChunkBlock::Flush() +CasContainerStrategy::ChunkBlock::Flush() { m_SmallObjectFile.Flush(); } void -ChunkBlock::StreamByteRange(uint64_t FileOffset, uint64_t Size, std::function<void(const void* Data, uint64_t Size)>&& ChunkFun) +CasContainerStrategy::ChunkBlock::StreamByteRange(uint64_t FileOffset, + uint64_t Size, + std::function<void(const void* Data, uint64_t Size)>&& ChunkFun) { m_SmallObjectFile.StreamByteRange(FileOffset, Size, std::move(ChunkFun)); } @@ -865,7 +888,8 @@ CasContainerStrategy::OpenContainer(bool IsNewStore) { if (std::filesystem::exists(LegacySobsPath)) { - std::error_code Error; + ZEN_INFO("migrating store {} from {} to chunks", m_Config.RootDirectory / m_ContainerBaseName, LegacySobsPath); + std::error_code Error; DiskSpace Space = DiskSpaceInfo(m_Config.RootDirectory, Error); if (Error) { @@ -962,6 +986,8 @@ CasContainerStrategy::OpenContainer(bool IsNewStore) SmallObjectFile.Close(); std::filesystem::remove(LegacySobsPath); + + ZEN_INFO("migrated store {} to {} to chunks", m_Config.RootDirectory / m_ContainerBaseName, NewBlockIndex + 1); } if (std::filesystem::exists(SidxPath)) |