aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-08-07 13:46:34 +0200
committerGitHub Enterprise <[email protected]>2024-08-07 13:46:34 +0200
commit159f1cb99647f936ed6946586b7541ea0c65efec (patch)
treef18302ea2c8d900dae6b98d6528412d2e6dfd03b /src/zenstore
parentstop exceptions from leaking on threaded work (#102) (diff)
downloadzen-159f1cb99647f936ed6946586b7541ea0c65efec.tar.xz
zen-159f1cb99647f936ed6946586b7541ea0c65efec.zip
add gc single threaded option (#104)
* add option to force gcv2 to run single threaded
Diffstat (limited to 'src/zenstore')
-rw-r--r--src/zenstore/gc.cpp13
-rw-r--r--src/zenstore/include/zenstore/gc.h5
2 files changed, 13 insertions, 5 deletions
diff --git a/src/zenstore/gc.cpp b/src/zenstore/gc.cpp
index 8db34b9c5..dc75a29f2 100644
--- a/src/zenstore/gc.cpp
+++ b/src/zenstore/gc.cpp
@@ -1767,6 +1767,7 @@ GcScheduler::SchedulerThread()
GcVersion UseGCVersion = m_Config.UseGCVersion;
uint32_t CompactBlockUsageThresholdPercent = m_Config.CompactBlockUsageThresholdPercent;
bool Verbose = m_Config.Verbose;
+ bool SingleThreaded = m_Config.SingleThreaded;
bool DiskSpaceGCTriggered = false;
bool TimeBasedGCTriggered = false;
@@ -1803,8 +1804,9 @@ GcScheduler::SchedulerThread()
UseGCVersion = TriggerParams.ForceGCVersion.value_or(UseGCVersion);
CompactBlockUsageThresholdPercent =
TriggerParams.CompactBlockUsageThresholdPercent.value_or(CompactBlockUsageThresholdPercent);
- Verbose = TriggerParams.Verbose.value_or(Verbose);
- DoGc = true;
+ Verbose = TriggerParams.Verbose.value_or(Verbose);
+ SingleThreaded = TriggerParams.SingleThreaded.value_or(SingleThreaded);
+ DoGc = true;
}
if (m_TriggerScrubParams)
@@ -2021,7 +2023,8 @@ GcScheduler::SchedulerThread()
SkipCid,
UseGCVersion,
CompactBlockUsageThresholdPercent,
- Verbose);
+ Verbose,
+ SingleThreaded);
m_GcManager.SetCancelGC(false);
@@ -2108,7 +2111,8 @@ GcScheduler::CollectGarbage(const GcClock::TimePoint& CacheExpireTime,
bool SkipCid,
GcVersion UseGCVersion,
uint32_t CompactBlockUsageThresholdPercent,
- bool Verbose)
+ bool Verbose,
+ bool SingleThreaded)
{
ZEN_TRACE_CPU("GcScheduler::CollectGarbage");
@@ -2177,6 +2181,7 @@ GcScheduler::CollectGarbage(const GcClock::TimePoint& CacheExpireTime,
.IsDeleteMode = Delete,
.SkipCidDelete = SkipCid,
.Verbose = Verbose,
+ .SingleThread = SingleThreaded,
.CompactBlockUsageThresholdPercent = CompactBlockUsageThresholdPercent,
.DiskReservePath = m_Config.RootDirectory / "reserve.gc"};
GcClock::TimePoint GcStartTime = GcClock::Now();
diff --git a/src/zenstore/include/zenstore/gc.h b/src/zenstore/include/zenstore/gc.h
index c3a71baa6..2edb5e0a5 100644
--- a/src/zenstore/include/zenstore/gc.h
+++ b/src/zenstore/include/zenstore/gc.h
@@ -444,6 +444,7 @@ struct GcSchedulerConfig
GcVersion UseGCVersion = GcVersion::kV1;
uint32_t CompactBlockUsageThresholdPercent = 90;
bool Verbose = false;
+ bool SingleThreaded = false;
};
struct GcSchedulerState
@@ -517,6 +518,7 @@ public:
std::optional<GcVersion> ForceGCVersion;
std::optional<uint32_t> CompactBlockUsageThresholdPercent;
std::optional<bool> Verbose;
+ std::optional<bool> SingleThreaded;
};
bool TriggerGc(const TriggerGcParams& Params);
@@ -542,7 +544,8 @@ private:
bool SkipCid,
GcVersion UseGCVersion,
uint32_t CompactBlockUsageThresholdPercent,
- bool Verbose);
+ bool Verbose,
+ bool SingleThreaded);
void ScrubStorage(bool DoDelete, bool SkipCid, std::chrono::seconds TimeSlice);
LoggerRef Log() { return m_Log; }
virtual bool AreDiskWritesAllowed() const override { return !m_AreDiskWritesBlocked.load(); }