aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver
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/zenserver
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/zenserver')
-rw-r--r--src/zenserver/admin/admin.cpp6
-rw-r--r--src/zenserver/config.cpp8
-rw-r--r--src/zenserver/config.h1
-rw-r--r--src/zenserver/zenserver.cpp3
4 files changed, 17 insertions, 1 deletions
diff --git a/src/zenserver/admin/admin.cpp b/src/zenserver/admin/admin.cpp
index 75ff03912..1eeb5637a 100644
--- a/src/zenserver/admin/admin.cpp
+++ b/src/zenserver/admin/admin.cpp
@@ -290,6 +290,7 @@ HttpAdminService::HttpAdminService(GcScheduler& Scheduler,
Response << "UseGCVersion" << ((State.Config.UseGCVersion == GcVersion::kV1) ? "1" : "2");
Response << "CompactBlockUsageThresholdPercent" << State.Config.CompactBlockUsageThresholdPercent;
Response << "Verbose" << State.Config.Verbose;
+ Response << "SingleThreaded" << State.Config.SingleThreaded;
}
Response.EndObject();
Response << "AreDiskWritesBlocked" << State.AreDiskWritesBlocked;
@@ -410,6 +411,11 @@ HttpAdminService::HttpAdminService(GcScheduler& Scheduler,
GcParams.Verbose = Param == "true"sv;
}
+ if (auto Param = Params.GetValue("singlethreaded"); Param.empty() == false)
+ {
+ GcParams.SingleThreaded = Param == "true"sv;
+ }
+
const bool Started = m_GcScheduler.TriggerGc(GcParams);
CbObjectWriter Response;
diff --git a/src/zenserver/config.cpp b/src/zenserver/config.cpp
index 56d14b4a9..55c90cbe1 100644
--- a/src/zenserver/config.cpp
+++ b/src/zenserver/config.cpp
@@ -517,6 +517,7 @@ ParseConfigFile(const std::filesystem::path& Path,
ServerOptions.GcConfig.CompactBlockUsageThresholdPercent,
"gc-compactblock-threshold"sv);
LuaOptions.AddOption("gc.verbose"sv, ServerOptions.GcConfig.Verbose, "gc-verbose"sv);
+ LuaOptions.AddOption("gc.single-threaded"sv, ServerOptions.GcConfig.SingleThreaded, "gc-single-threaded"sv);
////// gc
LuaOptions.AddOption("gc.cache.maxdurationseconds"sv, ServerOptions.GcConfig.Cache.MaxDurationSeconds, "gc-cache-duration-seconds"sv);
@@ -982,6 +983,13 @@ ParseCliOptions(int argc, char* argv[], ZenServerOptions& ServerOptions)
cxxopts::value<bool>(ServerOptions.GcConfig.Verbose)->default_value("false"),
"");
+ options.add_option("gc",
+ "",
+ "gc-single-threaded",
+ "Force GC to run single threaded.",
+ cxxopts::value<bool>(ServerOptions.GcConfig.SingleThreaded)->default_value("false"),
+ "");
+
options.add_option("objectstore",
"",
"objectstore-enabled",
diff --git a/src/zenserver/config.h b/src/zenserver/config.h
index fec871a0e..41e05c7ea 100644
--- a/src/zenserver/config.h
+++ b/src/zenserver/config.h
@@ -75,6 +75,7 @@ struct ZenGcConfig
bool UseGCV2 = false;
uint32_t CompactBlockUsageThresholdPercent = 90;
bool Verbose = false;
+ bool SingleThreaded = false;
};
struct ZenOpenIdProviderConfig
diff --git a/src/zenserver/zenserver.cpp b/src/zenserver/zenserver.cpp
index 48ea89204..62c9227fe 100644
--- a/src/zenserver/zenserver.cpp
+++ b/src/zenserver/zenserver.cpp
@@ -312,7 +312,8 @@ ZenServer::Initialize(const ZenServerOptions& ServerOptions, ZenServerState::Zen
.LightweightInterval = std::chrono::seconds(ServerOptions.GcConfig.LightweightIntervalSeconds),
.UseGCVersion = ServerOptions.GcConfig.UseGCV2 ? GcVersion::kV2 : GcVersion::kV1,
.CompactBlockUsageThresholdPercent = ServerOptions.GcConfig.CompactBlockUsageThresholdPercent,
- .Verbose = ServerOptions.GcConfig.Verbose};
+ .Verbose = ServerOptions.GcConfig.Verbose,
+ .SingleThreaded = ServerOptions.GcConfig.SingleThreaded};
m_GcScheduler.Initialize(GcConfig);
// Create and register admin interface last to make sure all is properly initialized