]> granicus.if.org Git - icinga2/commitdiff
Fix check behavior on restart
authorJean Flach <jean-marcel.flach@icinga.com>
Tue, 10 Apr 2018 13:50:45 +0000 (15:50 +0200)
committerJean Flach <jean-marcel.flach@icinga.com>
Tue, 10 Apr 2018 13:52:50 +0000 (15:52 +0200)
This patch changes the way checkresults are handled during a restart.

  1. Check results coming in during a shutdown are ignored.
  2. Upon start, checks which should have ran (next_check in the past),
  are re-scheduled within the first minute.

This new behavior means there will be no more "Unknown - Terminated"
checkresults during a restart and checks with high check_interval will
be run earlier if they were already scheduled to run. The downside is
that after Icinga2 was down for a while, there will be a lot of checks
within the first minute. Our max concurrent check should take care of
this though.

lib/icinga/checkable-check.cpp
lib/icinga/checkable.cpp

index 8bf1fed74152e7c4c7536fe48cea7d4877f89f91..76b2cc37e8bca6de233e52649d30467b240f08e3 100644 (file)
@@ -107,7 +107,7 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
                m_CheckRunning = false;
        }
 
-       if (!cr)
+       if (!cr || !IsActive())
                return;
 
        double now = Utility::GetTime();
@@ -428,8 +428,6 @@ void Checkable::ExecuteCheck()
        double scheduled_start = GetNextCheck();
        double before_check = Utility::GetTime();
 
-       UpdateNextCheck();
-
        bool reachable = IsReachable();
 
        {
index 69af2c5813241fc4be9ca073ca4a18e593014d32..fe52e37efdce29804ea2b0ec4792b1fcc1437022 100644 (file)
@@ -73,8 +73,11 @@ void Checkable::Start(bool runtimeCreated)
 {
        double now = Utility::GetTime();
 
-       if (GetNextCheck() < now + 300)
-               UpdateNextCheck();
+       if (GetNextCheck() < now + 60) {
+               double delta = std::min(GetCheckInterval(), 60.0);
+               delta *= (double)std::rand() / RAND_MAX;
+               SetNextCheck(now + delta);
+       }
 
        ObjectImpl<Checkable>::Start(runtimeCreated);
 }