aboutsummaryrefslogtreecommitdiff
path: root/zenstore/compactcas.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-03-16 12:16:13 +0100
committerDan Engelbrecht <[email protected]>2022-03-31 11:28:32 +0200
commit59e0d013af93088d61ea0c8f9100ef2a74776d12 (patch)
tree3ba04ed3d8762bec6635a14f7f904c7e9cd5cc0f /zenstore/compactcas.cpp
parentUse proper hash function m_ChunkSet (diff)
downloadzen-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.cpp56
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))