From aeb7a4a70b41c549102418c2d0ef4dbf6a233bea Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 24 May 2016 11:05:29 +0200 Subject: [PATCH] Fix incorrect check interval for SOFT->HARD transitions fixes #11825 --- lib/icinga/checkable-check.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/lib/icinga/checkable-check.cpp b/lib/icinga/checkable-check.cpp index 7d129fdfc..2922631aa 100644 --- a/lib/icinga/checkable-check.cpp +++ b/lib/icinga/checkable-check.cpp @@ -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 -- 2.40.0