Fixed soft service recoveries.

This commit is contained in:
Gunnar Beutner 2013-02-10 15:07:32 +01:00
parent 0e7a3c67ec
commit 0d1cad864c
1 changed files with 7 additions and 2 deletions

View File

@ -287,11 +287,15 @@ void Service::ApplyCheckResult(const Dictionary::Ptr& cr)
{
ServiceState old_state = GetState();
ServiceStateType old_stateType = GetStateType();
bool hardChange = false;
long attempt = GetCurrentCheckAttempt();
if (cr->Get("state") == StateOK) {
if (GetState() == StateOK)
if (old_state != StateOK && old_stateType == StateTypeHard)
hardChange = true; // hard recovery
if (old_state == StateOK)
SetStateType(StateTypeHard);
attempt = 1;
@ -299,6 +303,7 @@ void Service::ApplyCheckResult(const Dictionary::Ptr& cr)
if (attempt >= GetMaxCheckAttempts()) {
SetStateType(StateTypeHard);
attempt = 1;
hardChange = true;
} else if (GetStateType() == StateTypeSoft || GetState() == StateOK) {
SetStateType(StateTypeSoft);
attempt++;
@ -341,7 +346,7 @@ void Service::ApplyCheckResult(const Dictionary::Ptr& cr)
if (GetState() != StateOK)
TriggerDowntimes();
if (GetStateType() == StateTypeHard && (old_state != GetState() || old_stateType == StateTypeSoft)) {
if (hardChange) {
SetLastHardStateChange(now);
/* Make sure the notification component sees the updated