diff --git a/ceilometer/publisher/gnocchi.py b/ceilometer/publisher/gnocchi.py index b7914129b5..496c34d57e 100644 --- a/ceilometer/publisher/gnocchi.py +++ b/ceilometer/publisher/gnocchi.py @@ -246,7 +246,7 @@ class GnocchiPublisher(publisher.ConfigPublisherBase): self._already_logged_event_types = set() self._already_logged_metric_names = set() - self.ensures_archives_policies() + self._already_configured_archive_policies = False @staticmethod def _load_definitions(conf, archive_policy_override, @@ -273,11 +273,13 @@ class GnocchiPublisher(publisher.ConfigPublisherBase): return resource_defs, data.get("archive_policies", []) def ensures_archives_policies(self): - for ap in self.archive_policies_definition: - try: - self._gnocchi.archive_policy.get(ap["name"]) - except gnocchi_exc.ArchivePolicyNotFound: - self._gnocchi.archive_policy.create(ap) + if not self._already_configured_archive_policies: + for ap in self.archive_policies_definition: + try: + self._gnocchi.archive_policy.get(ap["name"]) + except gnocchi_exc.ArchivePolicyNotFound: + self._gnocchi.archive_policy.create(ap) + self._already_configured_archive_policies = True @property def gnocchi_project_id(self): @@ -325,6 +327,8 @@ class GnocchiPublisher(publisher.ConfigPublisherBase): return rd, operation def publish_samples(self, data): + self.ensures_archives_policies() + # NOTE(sileht): skip sample generated by gnocchi itself data = [s for s in data if not self._is_gnocchi_activity(s)] data.sort(key=operator.attrgetter('resource_id')) diff --git a/ceilometer/tests/unit/publisher/test_gnocchi.py b/ceilometer/tests/unit/publisher/test_gnocchi.py index c6e4f1f38f..76645c9b24 100644 --- a/ceilometer/tests/unit/publisher/test_gnocchi.py +++ b/ceilometer/tests/unit/publisher/test_gnocchi.py @@ -474,8 +474,6 @@ class PublisherWorkflowTest(base.BaseTestCase, self.useFixture(utils_fixture.TimeFixture(now)) expected_calls = [ - mock.call.archive_policy.get("ceilometer-low"), - mock.call.archive_policy.get("ceilometer-low-rate"), mock.call.resource.search('instance_network_interface', search_params), mock.call.resource.search('instance_disk', search_params), @@ -505,7 +503,7 @@ class PublisherWorkflowTest(base.BaseTestCase, IMAGE_DELETE_START, VOLUME_DELETE_START, FLOATINGIP_DELETE_END]) - self.assertEqual(10, len(fakeclient.mock_calls)) + self.assertEqual(8, len(fakeclient.mock_calls)) for call in expected_calls: self.assertIn(call, fakeclient.mock_calls)