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):
|
def service_manage_report(self):
|
||||||
cnxt = context.get_admin_context()
|
cnxt = context.get_admin_context()
|
||||||
|
|
||||||
if self.service_id is not None:
|
if self.service_id is 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:
|
|
||||||
service_ref = service_objects.Service.create(
|
service_ref = service_objects.Service.create(
|
||||||
cnxt,
|
cnxt,
|
||||||
dict(host=self.host,
|
dict(host=self.host,
|
||||||
|
@ -1621,11 +1614,18 @@ class EngineService(service.Service):
|
||||||
report_interval=cfg.CONF.periodic_interval)
|
report_interval=cfg.CONF.periodic_interval)
|
||||||
)
|
)
|
||||||
self.service_id = service_ref['id']
|
self.service_id = service_ref['id']
|
||||||
|
LOG.info(_LI('Service %s is started'), self.service_id)
|
||||||
|
|
||||||
|
try:
|
||||||
service_objects.Service.update_by_id(
|
service_objects.Service.update_by_id(
|
||||||
cnxt,
|
cnxt,
|
||||||
self.service_id,
|
self.service_id,
|
||||||
dict(deleted_at=None))
|
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):
|
def service_manage_cleanup(self):
|
||||||
cnxt = context.get_admin_context()
|
cnxt = context.get_admin_context()
|
||||||
|
|
|
@ -116,6 +116,17 @@ class ServiceEngineTest(common.HeatTestCase):
|
||||||
'mock_id',
|
'mock_id',
|
||||||
dict(deleted_at=None))
|
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):
|
def test_stop_rpc_server(self):
|
||||||
with mock.patch.object(self.eng,
|
with mock.patch.object(self.eng,
|
||||||
'_rpc_server') as mock_rpc_server:
|
'_rpc_server') as mock_rpc_server:
|
||||||
|
|
Loading…
Reference in New Issue