]> granicus.if.org Git - icinga2/commitdiff
Fix incorrect check interval for SOFT->HARD transitions
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 24 May 2016 09:05:29 +0000 (11:05 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 24 May 2016 09:05:29 +0000 (11:05 +0200)
fixes #11825

lib/icinga/checkable-check.cpp

index 7d129fdfc1c8a7f86373b038e743d0a2b96eb79c..2922631aaad03f1d7f56620b0bfe04b95f1fc233 100644 (file)
@@ -79,6 +79,8 @@ void Checkable::UpdateNextCheck(const MessageOrigin::Ptr& origin)
        if (interval > 1)
                adj = fmod(now * 100 + GetSchedulingOffset(), interval * 100) / 100.0;
 
+       adj = std::min(0.5 + fmod(GetSchedulingOffset(), interval * 5) / 100.0, adj);
+
        SetNextCheck(now - adj + interval, false, origin);
 }
 
@@ -326,17 +328,7 @@ void Checkable::ProcessCheckResult(const CheckResult::Ptr& cr, const MessageOrig
        is_flapping = IsFlapping();
 
        if (cr->GetActive()) {
-               /* If there was a OK -> NOT-OK state change for actively scheduled checks,
-                * update the next check time using the retry_interval.
-                * Important: Add the cluster message origin. */
-               if (GetStateType() == StateTypeSoft) {
-                       UpdateNextCheck(origin);
-               } else if (hardChange) {
-                       /* A hard state change must enforce the check interval again.
-                        * UpdateNextCheck() will use the scheduling offset which generates
-                        * an incorrect check time from the previous retry interval. */
-                       SetNextCheck(Utility::GetTime() + GetCheckInterval(), false, origin);
-               }
+               UpdateNextCheck(origin);
        } else {
                /* Reschedule the next check for passive check results. The side effect of
                 * this is that for as long as we receive passive results for a service we