aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/zenserverprocess.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-11-16 18:50:27 +0100
committerGitHub <[email protected]>2023-11-16 18:50:27 +0100
commit573907447db3e19d49c0bcaf3f659cf2d599c738 (patch)
tree9374a390ad5ab89ce6991398e2eb11154a3dcb4e /src/zenutil/zenserverprocess.cpp
parentadd wipe prevention via file in data root dir (#548) (diff)
downloadzen-573907447db3e19d49c0bcaf3f659cf2d599c738.tar.xz
zen-573907447db3e19d49c0bcaf3f659cf2d599c738.zip
blocking queue fix (#550)
* make BlockingQueue::m_CompleteAdding non-atomic * ZenCacheDiskLayer::Flush logging * name worker threads in ZenCacheDiskLayer::DiscoverBuckets * name worker threads in gcv2 * improved logging in ZenServerInstance * scrub threadpool naming * remove waitpid handling, we should just call wait to kill zombie processes
Diffstat (limited to 'src/zenutil/zenserverprocess.cpp')
-rw-r--r--src/zenutil/zenserverprocess.cpp46
1 files changed, 35 insertions, 11 deletions
diff --git a/src/zenutil/zenserverprocess.cpp b/src/zenutil/zenserverprocess.cpp
index 3e735dc07..2971b0fab 100644
--- a/src/zenutil/zenserverprocess.cpp
+++ b/src/zenutil/zenserverprocess.cpp
@@ -487,20 +487,33 @@ ZenServerInstance::SignalShutdown()
void
ZenServerInstance::Shutdown()
{
- if (m_Process.IsValid() && m_ShutdownOnDestroy)
+ if (m_Process.IsValid())
{
- if (m_Terminate)
+ if (m_ShutdownOnDestroy)
{
- ZEN_INFO("Terminating zenserver process");
- m_Process.Terminate(111);
- m_Process.Reset();
+ if (m_Terminate)
+ {
+ ZEN_INFO("Terminating zenserver process {}", m_Name);
+ m_Process.Terminate(111);
+ m_Process.Reset();
+ ZEN_DEBUG("zenserver process {} ({}) terminated", m_Name, m_Process.Pid());
+ }
+ else
+ {
+ ZEN_DEBUG("Requesting zenserver process {} ({}) to shut down", m_Name, m_Process.Pid());
+ SignalShutdown();
+ ZEN_DEBUG("Waiting for zenserver process {} ({}) to shut down", m_Name, m_Process.Pid());
+ while (!m_Process.Wait(5000))
+ {
+ ZEN_WARN("Waiting for zenserver process {} ({}) timed out", m_Name, m_Process.Pid());
+ }
+ m_Process.Reset();
+ }
+ ZEN_DEBUG("zenserver process {} ({}) exited", m_Name, m_Process.Pid());
}
else
{
- SignalShutdown();
- ZEN_DEBUG("Waiting for zenserver process {} to shut down", m_Process.Pid());
- m_Process.Wait();
- m_Process.Reset();
+ ZEN_DEBUG("Detached from zenserver process {} ({})", m_Name, m_Process.Pid());
}
}
}
@@ -521,6 +534,7 @@ ZenServerInstance::SpawnServer(int BasePort, std::string_view AdditionalServerAr
ExtendableStringBuilder<32> LogId;
LogId << "Zen" << ChildId;
+ m_Name = LogId.ToString();
ExtendableStringBuilder<512> CommandLine;
CommandLine << "zenserver" ZEN_EXE_SUFFIX_LITERAL; // see CreateProc() call for actual binary path
@@ -534,7 +548,7 @@ ZenServerInstance::SpawnServer(int BasePort, std::string_view AdditionalServerAr
m_OwnerPid = MyPid;
}
- CommandLine << " --test --log-id " << LogId;
+ CommandLine << " --test --log-id " << m_Name;
CommandLine << " --no-sentry";
}
@@ -613,7 +627,7 @@ ZenServerInstance::SpawnServer(int BasePort, std::string_view AdditionalServerAr
{
if (!WaitUntilReady(WaitTimeoutMs))
{
- throw std::runtime_error(fmt::format("server start timeout after {}", NiceTimeSpanMs(WaitTimeoutMs)));
+ throw std::runtime_error(fmt::format("server start of {} timeout after {}", m_Name, NiceTimeSpanMs(WaitTimeoutMs)));
}
// Determine effective base port
@@ -737,4 +751,14 @@ ZenServerInstance::SetTestDir(std::filesystem::path TestDir)
m_TestDir = TestDir;
}
+bool
+ZenServerInstance::IsRunning()
+{
+ if (!m_Process.IsValid())
+ {
+ return false;
+ }
+ return m_Process.IsRunning();
+}
+
} // namespace zen