diff --git a/ceilometer/pipeline.py b/ceilometer/pipeline.py index ce1a15d1c..6b5462e50 100644 --- a/ceilometer/pipeline.py +++ b/ceilometer/pipeline.py @@ -623,8 +623,13 @@ class PipelineManager(object): cfg) LOG.info(_('detected decoupled pipeline config format')) sources = [p_type['source'](s) for s in cfg.get('sources', [])] - sinks = dict((s['name'], p_type['sink'](s, transformer_manager)) - for s in cfg.get('sinks', [])) + sinks = {} + for s in cfg.get('sinks', []): + if s['name'] in sinks: + raise PipelineException("Duplicated sink names: %s" % + s['name'], self) + else: + sinks[s['name']] = p_type['sink'](s, transformer_manager) for source in sources: source.check_sinks(sinks) for target in source.sinks: diff --git a/ceilometer/tests/test_decoupled_pipeline.py b/ceilometer/tests/test_decoupled_pipeline.py index 283e811c8..541af5e3f 100644 --- a/ceilometer/tests/test_decoupled_pipeline.py +++ b/ceilometer/tests/test_decoupled_pipeline.py @@ -267,3 +267,13 @@ class TestDecoupledPipeline(pipeline_base.BasePipelineTestCase): self._do_test_rate_of_change_in_boilerplate_pipeline_cfg(3, meters, units) + + def test_duplicated_sinks_names(self): + self.pipeline_cfg['sinks'].append({ + 'name': 'test_sink', + 'publishers': ['except'], + }) + self.assertRaises(pipeline.PipelineException, + pipeline.PipelineManager, + self.pipeline_cfg, + self.transformer_manager)