Catch exceptions in service status report

If db throw any exceptions during service status report, service
will not report its status forever. This patch catch errors during
status report and log them in to log files.

Change-Id: I6775b3446caffabd3135d5e24098ab0ee31975ac
Closes-Bug: #1464188
changes/47/190647/4
Ethan Lynn 8 years ago
parent 13db9ccfee
commit 4e21b371d8

@ -1603,14 +1603,7 @@ class EngineService(service.Service):
def service_manage_report(self):
cnxt = context.get_admin_context()
if self.service_id is not None:
# Service is already running
service_objects.Service.update_by_id(
cnxt,
self.service_id,
dict(deleted_at=None))
LOG.info(_LI('Service %s is updated'), self.service_id)
else:
if self.service_id is None:
service_ref = service_objects.Service.create(
cnxt,
dict(host=self.host,
@ -1621,11 +1614,18 @@ class EngineService(service.Service):
report_interval=cfg.CONF.periodic_interval)
)
self.service_id = service_ref['id']
LOG.info(_LI('Service %s is started'), self.service_id)
try:
service_objects.Service.update_by_id(
cnxt,
self.service_id,
dict(deleted_at=None))
LOG.info(_LI('Service %s is started'), self.service_id)
LOG.info(_LI('Service %s is updated'), self.service_id)
except Exception as ex:
LOG.error(_LE('Service %(service_id)s update '
'failed: %(error)s'),
{'service_id': self.service_id, 'error': ex})
def service_manage_cleanup(self):
cnxt = context.get_admin_context()

@ -116,6 +116,17 @@ class ServiceEngineTest(common.HeatTestCase):
'mock_id',
dict(deleted_at=None))
@mock.patch.object(service_objects.Service, 'update_by_id')
@mock.patch.object(context, 'get_admin_context')
def test_service_manage_report_update_fail(self, mock_admin_context,
mock_service_update):
self.eng.service_id = 'mock_id'
mock_admin_context.return_value = self.ctx
mock_service_update.side_effect = Exception()
self.eng.service_manage_report()
msg = 'Service %s update failed' % self.eng.service_id
self.assertIn(msg, self.LOG.output)
def test_stop_rpc_server(self):
with mock.patch.object(self.eng,
'_rpc_server') as mock_rpc_server:

Loading…
Cancel
Save