diff options
| author | Dan Engelbrecht <[email protected]> | 2022-03-22 22:59:53 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-03-31 11:29:26 +0200 |
| commit | 0b410ddd6e5862d55656fd84f643106900dbb92e (patch) | |
| tree | e3d6e614970c64d6165fb4fcfca7cd4045a11e67 /zenstore/compactcas.cpp | |
| parent | Proper stats for Moved Chunks (diff) | |
| download | zen-0b410ddd6e5862d55656fd84f643106900dbb92e.tar.xz zen-0b410ddd6e5862d55656fd84f643106900dbb92e.zip | |
Try to recreate gc reserve after successful garbage collect if it is not present
Diffstat (limited to 'zenstore/compactcas.cpp')
| -rw-r--r-- | zenstore/compactcas.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp index 00149593b..4e379194a 100644 --- a/zenstore/compactcas.cpp +++ b/zenstore/compactcas.cpp @@ -820,6 +820,35 @@ CasContainerStrategy::CollectGarbage(GcContext& GcCtx) DeletedChunks.size(), MovedChunks.size(), TotalChunkCount); + + std::filesystem::path GCReservePath = m_Config.RootDirectory / (m_ContainerBaseName + ".gc.reserve.ucas"); + if (std::filesystem::is_regular_file(GCReservePath)) + { + return; + } + + std::error_code Error; + DiskSpace Space = DiskSpaceInfo(m_Config.RootDirectory, Error); + if (Error) + { + ZEN_ERROR("get disk space in {} FAILED, reason '{}'", m_ContainerBaseName, Error.message()); + return; + } + if (Space.Free < m_MaxBlockSize) + { + ZEN_INFO("not enough space for garbage collect reserve '{}' FAILED, required disk space {}, free {}", + m_Config.RootDirectory / m_ContainerBaseName, + m_MaxBlockSize, + NiceBytes(Space.Free)); + return; + } + BasicFile GCReserveFile; + GCReserveFile.Open(GCReservePath, true); + GCReserveFile.SetFileSize(m_MaxBlockSize); + + ZEN_DEBUG("recreated garbage collect reserve '{}' FAILED, {} bytes", + m_Config.RootDirectory / m_ContainerBaseName, + NiceBytes(Space.Free)); } void @@ -1260,6 +1289,11 @@ CasContainerStrategy::OpenContainer(bool IsNewStore) { GCReserveFile.SetFileSize(m_MaxBlockSize); } + else + { + // We need it to be the proper size if we are to use it + std::filesystem::remove(GCReservePath); + } } } } |