Handle malformed resource definitions gracefully

Closes-bug: #1542189

Conflicts:
	ceilometer/dispatcher/gnocchi.py
	ceilometer/tests/unit/dispatcher/test_gnocchi.py

Change-Id: Ibfe49741ad5df82a57cc1c344a471be4d23fdffb
(cherry picked from commit 02b1e1399b)
This commit is contained in:
Pradeep Kilambi 2016-02-05 14:03:28 -05:00
parent b8ac0c4c0d
commit 99a56e707a
3 changed files with 24 additions and 6 deletions

View File

@ -208,9 +208,17 @@ class GnocchiDispatcher(dispatcher.Base):
data = {}
legacy_archive_policies = cls._load_archive_policy(conf)
return [ResourcesDefinition(r, conf.dispatcher_gnocchi.archive_policy,
legacy_archive_policies)
for r in data.get('resources', [])]
resource_defs = []
for resource in data.get('resources', []):
try:
resource_defs.append(ResourcesDefinition(
resource,
conf.dispatcher_gnocchi.archive_policy,
legacy_archive_policies))
except Exception as exc:
LOG.error(_LE("Failed to load resource due to error %s") %
exc)
return resource_defs
@classmethod
def _load_archive_policy(cls, conf):

View File

@ -108,7 +108,8 @@ class DispatcherTest(base.BaseTestCase):
self.assertIn('instance', names)
self.assertIn('volume', names)
def test_broken_config_load(self):
@mock.patch('ceilometer.dispatcher.gnocchi.LOG')
def test_broken_config_load(self, mylog):
contents = [("---\n"
"resources:\n"
" - resource_type: foobar\n"),
@ -135,8 +136,9 @@ class DispatcherTest(base.BaseTestCase):
self.conf.config(filter_service_activity=False,
resources_definition_file=temp,
group='dispatcher_gnocchi')
self.assertRaises(gnocchi.ResourcesDefinitionException,
gnocchi.GnocchiDispatcher, self.conf.conf)
d = gnocchi.GnocchiDispatcher(self.conf.conf)
self.assertTrue(mylog.error.called)
self.assertEqual(0, len(d.resources_definition))
@mock.patch('ceilometer.dispatcher.gnocchi.GnocchiDispatcher'
'._process_resource')

View File

@ -0,0 +1,8 @@
---
fixes:
- >
[`bug 1542189 <https://bugs.launchpad.net/ceilometer/+bug/1542189>`_]
Handle malformed resource definitions in gnocchi_resources.yaml
gracefully. Currently we raise an exception once we hit a bad
resource and skip the rest. Instead the patch skips the bad
resource and proceeds with rest of the definitions.