diff options
author | Zuul <zuul@review.opendev.org> | 2022-12-21 12:16:31 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-12-21 12:16:31 +0000 |
commit | 39f3721209adc6a75d86c4cc165d9f73c266a564 (patch) | |
tree | 9aa012b3cab0a7ec46342f487ab234758d23a2a6 | |
parent | 2686aeb695f5a7f08e58095079ac99ff745451a8 (diff) | |
parent | 463594b229017b30a1c457aaf6d4cdfef2bb421c (diff) | |
download | ceilometer-39f3721209adc6a75d86c4cc165d9f73c266a564.tar.gz |
Merge "NoUniqueMatch: ClientException on Gnocchi publisher"
-rw-r--r-- | ceilometer/publisher/gnocchi.py | 43 | ||||
-rw-r--r-- | ceilometer/tests/unit/publisher/test_gnocchi.py | 11 |
2 files changed, 42 insertions, 12 deletions
diff --git a/ceilometer/publisher/gnocchi.py b/ceilometer/publisher/gnocchi.py index 90e4a207..45f32766 100644 --- a/ceilometer/publisher/gnocchi.py +++ b/ceilometer/publisher/gnocchi.py @@ -261,22 +261,31 @@ class GnocchiPublisher(publisher.ConfigPublisherBase): return self._gnocchi_project_id with self._gnocchi_project_id_lock: if self._gnocchi_project_id is None: + if not self.filter_project: + LOG.debug( + "Multiple executions were locked on " + "self._gnocchi_project_id_lock`. This execution " + "should no call `_internal_gnocchi_project_discovery` " + "as `self.filter_project` is None.") + return None try: project = self._ks_client.projects.find( name=self.filter_project, domain=self.filter_domain) except ka_exceptions.NotFound: - LOG.warning('project %s not found in keystone,' - ' ignoring the filter_project ' - 'option', self.filter_project) + LOG.warning('Filtered project [%s] not found in keystone, ' + 'ignoring the filter_project option' % + self.filter_project) + self.filter_project = None return None except Exception: - LOG.exception('fail to retrieve filtered project ') + LOG.exception('Failed to retrieve filtered project [%s].' + % self.filter_project) raise self._gnocchi_project_id = project.id - LOG.debug("filtered project found: %s", - self._gnocchi_project_id) + LOG.debug("Filtered project [%s] found with ID [%s].", + self.filter_project, self._gnocchi_project_id) return self._gnocchi_project_id def _is_swift_account_sample(self, sample): @@ -301,11 +310,29 @@ class GnocchiPublisher(publisher.ConfigPublisherBase): if operation: return rd, operation + def filter_gnocchi_activity_openstack(self, samples): + """Skip sample generated by gnocchi itself + + This method will filter out the samples that are generated by + Gnocchi itself. + """ + filtered_samples = [] + for sample in samples: + if not self._is_gnocchi_activity(sample): + filtered_samples.append(sample) + LOG.debug("Sample [%s] is not a Gnocchi activity; therefore, " + "we do not filter it out and push it to Gnocchi.", + sample) + else: + LOG.debug("Sample [%s] is a Gnocchi activity; therefore, " + "we filter it out and do not push it to Gnocchi.", + sample) + return filtered_samples + 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 = self.filter_gnocchi_activity_openstack(data) def value_to_sort(object_to_sort): value = object_to_sort.resource_id diff --git a/ceilometer/tests/unit/publisher/test_gnocchi.py b/ceilometer/tests/unit/publisher/test_gnocchi.py index 741594d5..e8264f85 100644 --- a/ceilometer/tests/unit/publisher/test_gnocchi.py +++ b/ceilometer/tests/unit/publisher/test_gnocchi.py @@ -339,9 +339,9 @@ class PublisherTest(base.BaseTestCase): def test_activity_gnocchi_project_not_found(self, logger): self.ks_client.projects.find.side_effect = ka_exceptions.NotFound self._do_test_activity_filter(2) - logger.warning.assert_called_with('project %s not found in ' - 'keystone, ignoring the ' - 'filter_project option', 'service') + logger.warning.assert_called_with( + 'Filtered project [service] not found in keystone, ignoring the ' + 'filter_project option') def test_activity_filter_match_swift_event(self): self.samples[0].name = 'storage.objects.outgoing.bytes' @@ -749,8 +749,11 @@ class PublisherWorkflowTest(base.BaseTestCase, resource_type = resource_definition.cfg['resource_type'] expected_debug = [ - mock.call('filtered project found: %s', + mock.call('Filtered project [%s] found with ID [%s].', 'service', 'a2d42c23-d518-46b6-96ab-3fba2e146859'), + mock.call('Sample [%s] is not a Gnocchi activity; therefore, we ' + 'do not filter it out and push it to Gnocchi.', + self.sample), mock.call('Processing sample [%s] for resource ID [%s].', self.sample, resource_id), mock.call('Executing batch resource metrics measures for resource ' |