diff --git a/src/system-health/health_checker/sysmonitor.py b/src/system-health/health_checker/sysmonitor.py index b3f43e447f7b..1357693c108a 100755 --- a/src/system-health/health_checker/sysmonitor.py +++ b/src/system-health/health_checker/sysmonitor.py @@ -407,10 +407,13 @@ def check_unit_status(self, event): self.dnsrvs_name.remove(event) srv_name,last = event.split('.') - key = 'ALL_SERVICE_STATUS|{}'.format(srv_name) - key_exists = self.state_db.exists(self.state_db.STATE_DB, key) - if key_exists == 1: - self.state_db.delete(self.state_db.STATE_DB, key) + # stop on service maybe propagated to timers and in that case, + # the state_db entry for the service should not be deleted + if last == "service": + key = 'ALL_SERVICE_STATUS|{}'.format(srv_name) + key_exists = self.state_db.exists(self.state_db.STATE_DB, key) + if key_exists == 1: + self.state_db.delete(self.state_db.STATE_DB, key) return 0 diff --git a/src/system-health/tests/test_system_health.py b/src/system-health/tests/test_system_health.py index 6793a116cad4..00923b1007d2 100644 --- a/src/system-health/tests/test_system_health.py +++ b/src/system-health/tests/test_system_health.py @@ -654,6 +654,15 @@ def test_check_unit_status(): assert 'mock_bgp.service' in sysmon.dnsrvs_name +@patch('health_checker.sysmonitor.Sysmonitor.get_all_service_list', MagicMock(return_value=['mock_snmp.service'])) +def test_check_unit_status_timer(): + sysmon = Sysmonitor() + sysmon.state_db = MagicMock() + sysmon.state_db.exists = MagicMock(return_value=1) + sysmon.state_db.delete = MagicMock() + sysmon.check_unit_status('mock_snmp.timer') + assert not sysmon.state_db.delete.called + @patch('health_checker.sysmonitor.Sysmonitor.run_systemctl_show', MagicMock(return_value=mock_srv_props['mock_radv.service'])) @patch('health_checker.sysmonitor.Sysmonitor.get_app_ready_status', MagicMock(return_value=('Up','-','-')))