aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/projectstore/projectstore.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-04-24 13:25:32 +0200
committerGitHub Enterprise <[email protected]>2024-04-24 13:25:32 +0200
commit8be0f10d5fb575f343d91a2398a6d603eb84a445 (patch)
treebea4650f6e83a26069a558a8d3701c0764a3b38f /src/zenserver/projectstore/projectstore.cpp
parentbump vcpkg and xmake to latest (#40) (diff)
downloadzen-8be0f10d5fb575f343d91a2398a6d603eb84a445.tar.xz
zen-8be0f10d5fb575f343d91a2398a6d603eb84a445.zip
safer gcv2 on error (#60)
- Bugfix: Harden GCv2 when errors occur and gracefully abort GC operation on error
Diffstat (limited to 'src/zenserver/projectstore/projectstore.cpp')
-rw-r--r--src/zenserver/projectstore/projectstore.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index 27e8b2463..874715818 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -3683,7 +3683,7 @@ public:
{
}
- virtual void CompactStore(GcCtx& Ctx, GcCompactStoreStats& Stats, const std::function<uint64_t()>&)
+ virtual void CompactStore(GcCtx& Ctx, GcCompactStoreStats& Stats, const std::function<uint64_t()>&) override
{
ZEN_TRACE_CPU("Store::CompactStore");
@@ -3747,6 +3747,8 @@ public:
m_OplogPathsToRemove.clear();
}
+ virtual std::string GetGcName(GcCtx&) override { return fmt::format("projectstore: '{}'", m_BasePath.string()); }
+
private:
std::filesystem::path m_BasePath;
std::vector<std::filesystem::path> m_OplogPathsToRemove;
@@ -3902,10 +3904,17 @@ public:
virtual ~ProjectStoreReferenceChecker()
{
- m_OplogLock.reset();
- if (m_OplogCaptureEnabled)
+ try
+ {
+ m_OplogLock.reset();
+ if (m_OplogCaptureEnabled)
+ {
+ m_Oplog.DisableUpdateCapture();
+ }
+ }
+ catch (const std::exception& Ex)
{
- m_Oplog.DisableUpdateCapture();
+ ZEN_ERROR("~ProjectStoreReferenceChecker threw exception: '{}'", Ex.what());
}
}