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
This commit is contained in:
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…
Reference in New Issue