Merge pull request #8429 from Icinga/bugfix/last-reload-attempt-failed-8428

Share "Last reload attempt failed" time across Icinga process tree on *nix
This commit is contained in:
Julian Brost 2023-05-30 11:42:21 +02:00 committed by GitHub
commit b0899d9ab4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 1 deletions

View File

@ -62,7 +62,12 @@ int Application::m_ArgC;
char **Application::m_ArgV;
double Application::m_StartTime;
bool Application::m_ScriptDebuggerEnabled = false;
double Application::m_LastReloadFailed;
#ifdef _WIN32
double Application::m_LastReloadFailed = 0;
#else /* _WIN32 */
SharedMemory<Application::AtomicTs> Application::m_LastReloadFailed (0);
#endif /* _WIN32 */
#ifdef _WIN32
static LPTOP_LEVEL_EXCEPTION_FILTER l_DefaultUnhandledExceptionFilter = nullptr;
@ -1208,12 +1213,20 @@ void Application::SetScriptDebuggerEnabled(bool enabled)
double Application::GetLastReloadFailed()
{
#ifdef _WIN32
return m_LastReloadFailed;
#else /* _WIN32 */
return m_LastReloadFailed.Get().load();
#endif /* _WIN32 */
}
void Application::SetLastReloadFailed(double ts)
{
#ifdef _WIN32
m_LastReloadFailed = ts;
#else /* _WIN32 */
m_LastReloadFailed.Get().store(ts);
#endif /* _WIN32 */
}
void Application::ValidateName(const Lazy<String>& lvalue, const ValidationUtils& utils)

View File

@ -4,9 +4,11 @@
#define APPLICATION_H
#include "base/i2-base.hpp"
#include "base/atomic.hpp"
#include "base/application-ti.hpp"
#include "base/logger.hpp"
#include "base/configuration.hpp"
#include "base/shared-memory.hpp"
#include <iosfwd>
namespace icinga
@ -137,7 +139,13 @@ private:
static double m_StartTime;
static double m_MainTime;
static bool m_ScriptDebuggerEnabled;
#ifdef _WIN32
static double m_LastReloadFailed;
#else /* _WIN32 */
typedef Atomic<double> AtomicTs;
static_assert(AtomicTs::is_always_lock_free);
static SharedMemory<AtomicTs> m_LastReloadFailed;
#endif /* _WIN32 */
#ifdef _WIN32
static BOOL WINAPI CtrlHandler(DWORD type);

View File

@ -813,6 +813,7 @@ int DaemonCommand::Run(const po::variables_map& vm, const std::vector<std::strin
break;
case -2:
Log(LogCritical, "Application", "Found error in config: reloading aborted");
Application::SetLastReloadFailed(Utility::GetTime());
break;
default:
Log(LogInformation, "Application")
@ -820,6 +821,7 @@ int DaemonCommand::Run(const po::variables_map& vm, const std::vector<std::strin
NotifyStatus("Shutting down old instance...");
Application::SetLastReloadFailed(0);
(void)kill(currentWorker, SIGTERM);
{