From a584ef296ae077c98c1a18ace47dcf2656b68000 Mon Sep 17 00:00:00 2001 From: Nikhil B Date: Tue, 16 Aug 2016 11:50:23 +0530 Subject: [PATCH] making sure alarmgen timers run correctly Earlier, main processing loop of alarmgen, run_uve_processing was expected to run atleast once every second but that assumption may not be correct. Changes are made to make sure that timers are run correctly in those cases: Closes-Bug: #1612426 Change-Id: I71d9ddfa19b8047554f6cfdc8ea947fd6eb783bc (cherry picked from commit ac297e61b80943c512fbe9811f560f265354699a) --- src/opserver/alarmgen.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/opserver/alarmgen.py b/src/opserver/alarmgen.py index 582a1f34a72..242086ba274 100644 --- a/src/opserver/alarmgen.py +++ b/src/opserver/alarmgen.py @@ -230,6 +230,7 @@ def process_alarms(self, ext, uv, local_uve): class AlarmStateMachine: tab_alarms_timer = {} + last_timers_run = None def __init__(self, tab, uv, nm, sandesh, activeTimer, idleTimer, freqCheck_Times, freqCheck_Seconds, freqExceededCheck): self._sandesh = sandesh @@ -488,9 +489,12 @@ def run_timers(curr_time, tab_alarms): 'delete_alarm', 'timeout_val', 'old_to']) delete_alarms = [] update_alarms = [] - if curr_time in AlarmStateMachine.tab_alarms_timer: + if AlarmStateMachine.last_timers_run is None: + AlarmStateMachine.last_timers_run = curr_time + for next_timer in range(AlarmStateMachine.last_timers_run, curr_time + 1): + if next_timer in AlarmStateMachine.tab_alarms_timer: update_timers = [] - for (tab, uv, nm) in AlarmStateMachine.tab_alarms_timer[curr_time]: + for (tab, uv, nm) in AlarmStateMachine.tab_alarms_timer[next_timer]: asm = tab_alarms[tab][uv][nm] delete_alarm, update_alarm, timeout_val = \ asm.run_uve_soaking_timer() @@ -500,12 +504,13 @@ def run_timers(curr_time, tab_alarms): update_alarms.append((asm.tab, asm.uv, asm.nm)) update_timers.append(inputs(tab=asm.tab, uv=asm.uv, nm=asm.nm, delete_alarm=delete_alarm, - timeout_val=timeout_val, old_to=curr_time)) + timeout_val=timeout_val, old_to=next_timer)) for timer in update_timers: if timer.timeout_val is not None or timer.delete_alarm: AlarmStateMachine.update_tab_alarms_timer(timer.tab, timer.uv, timer.nm, timer.old_to, timer.timeout_val, tab_alarms) + AlarmStateMachine.last_timers_run = curr_time + 1 return delete_alarms, update_alarms @staticmethod