aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver')
-rw-r--r--src/zenserver/admin/admin.cpp5
-rw-r--r--src/zenserver/cache/cachedisklayer.cpp5
-rw-r--r--src/zenserver/config.cpp10
-rw-r--r--src/zenserver/config.h1
-rw-r--r--src/zenserver/projectstore/projectstore.cpp4
-rw-r--r--src/zenserver/zenserver.cpp8
6 files changed, 31 insertions, 2 deletions
diff --git a/src/zenserver/admin/admin.cpp b/src/zenserver/admin/admin.cpp
index 083086f50..89dae25af 100644
--- a/src/zenserver/admin/admin.cpp
+++ b/src/zenserver/admin/admin.cpp
@@ -228,6 +228,11 @@ HttpAdminService::HttpAdminService(GcScheduler& Scheduler,
}
}
+ if (auto Param = Params.GetValue("skipcid"); Param.empty() == false)
+ {
+ GcParams.SkipCid = Param == "true"sv;
+ }
+
const bool Started = m_GcScheduler.TriggerGc(GcParams);
CbObjectWriter Response;
diff --git a/src/zenserver/cache/cachedisklayer.cpp b/src/zenserver/cache/cachedisklayer.cpp
index 3cee3197b..d53d3f3f4 100644
--- a/src/zenserver/cache/cachedisklayer.cpp
+++ b/src/zenserver/cache/cachedisklayer.cpp
@@ -1197,6 +1197,11 @@ ZenCacheDiskLayer::CacheBucket::GatherReferences(GcContext& GcCtx)
continue;
}
+ if (GcCtx.SkipCid())
+ {
+ continue;
+ }
+
const DiskLocation& Loc = Payloads[Entry.second].Location;
if (Loc.IsFlagSet(DiskLocation::kStructured))
diff --git a/src/zenserver/config.cpp b/src/zenserver/config.cpp
index 64acdfe73..6daf7fe1c 100644
--- a/src/zenserver/config.cpp
+++ b/src/zenserver/config.cpp
@@ -920,6 +920,9 @@ ParseConfigFile(const std::filesystem::path& Path,
LuaOptions.AddOption("gc.lowdiskspacethreshold"sv,
ServerOptions.GcConfig.MinimumFreeDiskSpaceToAllowWrites,
"gc-low-diskspace-threshold"sv);
+ LuaOptions.AddOption("gc.lightweightntervalseconds"sv,
+ ServerOptions.GcConfig.LightweightIntervalSeconds,
+ "gc-lightweight-interval-seconds"sv);
////// gc
LuaOptions.AddOption("gc.cache.maxdurationseconds"sv, ServerOptions.GcConfig.Cache.MaxDurationSeconds, "gc-cache-duration-seconds"sv);
@@ -1358,6 +1361,13 @@ ParseCliOptions(int argc, char* argv[], ZenServerOptions& ServerOptions)
options.add_option("gc",
"",
+ "gc-lightweight-interval-seconds",
+ "Lightweight garbage collection interval in seconds. Default set to 900 (30 min).",
+ cxxopts::value<int32_t>(ServerOptions.GcConfig.LightweightIntervalSeconds)->default_value("900"),
+ "");
+
+ options.add_option("gc",
+ "",
"gc-cache-duration-seconds",
"Max duration in seconds before Z$ entries get evicted. Default set to 1209600 (2 weeks)",
cxxopts::value<int32_t>(ServerOptions.GcConfig.Cache.MaxDurationSeconds)->default_value("1209600"),
diff --git a/src/zenserver/config.h b/src/zenserver/config.h
index f5438489d..bb6e20bb6 100644
--- a/src/zenserver/config.h
+++ b/src/zenserver/config.h
@@ -89,6 +89,7 @@ struct ZenGcConfig
bool Enabled = true;
uint64_t DiskReserveSize = 1ul << 28;
uint64_t DiskSizeSoftLimit = 0;
+ int32_t LightweightIntervalSeconds = 0;
uint64_t MinimumFreeDiskSpaceToAllowWrites = 1ul << 28;
};
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index 70dc678a9..4ddbdded7 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -502,6 +502,10 @@ void
ProjectStore::Oplog::GatherReferences(GcContext& GcCtx)
{
ZEN_TRACE_CPU("Store::Oplog::GatherReferences");
+ if (GcCtx.SkipCid())
+ {
+ return;
+ }
tsl::robin_set<IoHash> AttachmentHashes;
IterateOplog([&](CbObject Op) {
diff --git a/src/zenserver/zenserver.cpp b/src/zenserver/zenserver.cpp
index fa7694573..e4143dc01 100644
--- a/src/zenserver/zenserver.cpp
+++ b/src/zenserver/zenserver.cpp
@@ -449,7 +449,10 @@ public:
m_VfsService->AddService(Ref<ZenCacheStore>(m_CacheStore));
m_Http->RegisterService(*m_VfsService);
- ZEN_INFO("initializing GC, enabled '{}', interval {}s", ServerOptions.GcConfig.Enabled, ServerOptions.GcConfig.IntervalSeconds);
+ ZEN_INFO("initializing GC, enabled '{}', interval {}s, lightweight interval {}s",
+ ServerOptions.GcConfig.Enabled,
+ ServerOptions.GcConfig.IntervalSeconds,
+ ServerOptions.GcConfig.LightweightIntervalSeconds);
zen::GcSchedulerConfig GcConfig{
.RootDirectory = m_DataRoot / "gc",
.MonitorInterval = std::chrono::seconds(ServerOptions.GcConfig.MonitorIntervalSeconds),
@@ -460,7 +463,8 @@ public:
.Enabled = ServerOptions.GcConfig.Enabled,
.DiskReserveSize = ServerOptions.GcConfig.DiskReserveSize,
.DiskSizeSoftLimit = ServerOptions.GcConfig.DiskSizeSoftLimit,
- .MinimumFreeDiskSpaceToAllowWrites = ServerOptions.GcConfig.MinimumFreeDiskSpaceToAllowWrites};
+ .MinimumFreeDiskSpaceToAllowWrites = ServerOptions.GcConfig.MinimumFreeDiskSpaceToAllowWrites,
+ .LightweightInterval = std::chrono::seconds(ServerOptions.GcConfig.LightweightIntervalSeconds)};
m_GcScheduler.Initialize(GcConfig);
// Create and register admin interface last to make sure all is properly initialized