diff options
Diffstat (limited to 'src/zenserver')
| -rw-r--r-- | src/zenserver/admin/admin.cpp | 5 | ||||
| -rw-r--r-- | src/zenserver/cache/cachedisklayer.cpp | 5 | ||||
| -rw-r--r-- | src/zenserver/config.cpp | 10 | ||||
| -rw-r--r-- | src/zenserver/config.h | 1 | ||||
| -rw-r--r-- | src/zenserver/projectstore/projectstore.cpp | 4 | ||||
| -rw-r--r-- | src/zenserver/zenserver.cpp | 8 |
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 |