Skip central agent interval_task when keystone fails
There is a chance when ceilometer-agent-central try to trigger interval_task but keystone is not available, then an exception is raised but not caught, the outside oslo.loopingcall will stop calling the task function, finally leading to the agent-central service is no longer available forever, even the keystone is available again. We can skip the particular interval_task when keystone is not available. Change-Id: I0849cafadac8fb8a7670aaa4cc76dc708bdb25a1 Closes-Bug: #1287613
This commit is contained in:
parent
bf2a745a32
commit
ffff1cb132
@ -20,6 +20,7 @@ from keystoneclient.v2_0 import client as ksclient
|
|||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
|
|
||||||
from ceilometer import agent
|
from ceilometer import agent
|
||||||
|
from ceilometer.openstack.common.gettextutils import _ # noqa
|
||||||
from ceilometer.openstack.common import log
|
from ceilometer.openstack.common import log
|
||||||
from ceilometer.openstack.common import service as os_service
|
from ceilometer.openstack.common import service as os_service
|
||||||
from ceilometer import service
|
from ceilometer import service
|
||||||
@ -35,15 +36,19 @@ class AgentManager(agent.AgentManager):
|
|||||||
super(AgentManager, self).__init__('central')
|
super(AgentManager, self).__init__('central')
|
||||||
|
|
||||||
def interval_task(self, task):
|
def interval_task(self, task):
|
||||||
self.keystone = ksclient.Client(
|
try:
|
||||||
username=cfg.CONF.service_credentials.os_username,
|
self.keystone = ksclient.Client(
|
||||||
password=cfg.CONF.service_credentials.os_password,
|
username=cfg.CONF.service_credentials.os_username,
|
||||||
tenant_id=cfg.CONF.service_credentials.os_tenant_id,
|
password=cfg.CONF.service_credentials.os_password,
|
||||||
tenant_name=cfg.CONF.service_credentials.os_tenant_name,
|
tenant_id=cfg.CONF.service_credentials.os_tenant_id,
|
||||||
cacert=cfg.CONF.service_credentials.os_cacert,
|
tenant_name=cfg.CONF.service_credentials.os_tenant_name,
|
||||||
auth_url=cfg.CONF.service_credentials.os_auth_url,
|
cacert=cfg.CONF.service_credentials.os_cacert,
|
||||||
region_name=cfg.CONF.service_credentials.os_region_name,
|
auth_url=cfg.CONF.service_credentials.os_auth_url,
|
||||||
insecure=cfg.CONF.service_credentials.insecure)
|
region_name=cfg.CONF.service_credentials.os_region_name,
|
||||||
|
insecure=cfg.CONF.service_credentials.insecure)
|
||||||
|
except Exception as e:
|
||||||
|
LOG.error(_('Skip interval_task because Keystone error: %s'), e)
|
||||||
|
return
|
||||||
|
|
||||||
super(AgentManager, self).interval_task(task)
|
super(AgentManager, self).interval_task(task)
|
||||||
|
|
||||||
|
@ -50,3 +50,12 @@ class TestRunTasks(agentbase.BaseAgentManagerTestCase):
|
|||||||
polling_tasks = self.mgr.setup_polling_tasks()
|
polling_tasks = self.mgr.setup_polling_tasks()
|
||||||
self.mgr.interval_task(polling_tasks.values()[0])
|
self.mgr.interval_task(polling_tasks.values()[0])
|
||||||
self.assertTrue(self.Pollster.resources)
|
self.assertTrue(self.Pollster.resources)
|
||||||
|
|
||||||
|
def test_skip_task_when_keystone_fail(self):
|
||||||
|
"""Test for https://bugs.launchpad.net/ceilometer/+bug/1287613."""
|
||||||
|
self.useFixture(mockpatch.Patch(
|
||||||
|
'keystoneclient.v2_0.client.Client',
|
||||||
|
side_effect=Exception))
|
||||||
|
polling_tasks = self.mgr.setup_polling_tasks()
|
||||||
|
self.mgr.interval_task(polling_tasks.values()[0])
|
||||||
|
self.assertFalse(self.Pollster.samples)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user