summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-12-21 12:16:31 +0000
committerGerrit Code Review <review@openstack.org>2022-12-21 12:16:31 +0000
commit39f3721209adc6a75d86c4cc165d9f73c266a564 (patch)
tree9aa012b3cab0a7ec46342f487ab234758d23a2a6
parent2686aeb695f5a7f08e58095079ac99ff745451a8 (diff)
parent463594b229017b30a1c457aaf6d4cdfef2bb421c (diff)
downloadceilometer-39f3721209adc6a75d86c4cc165d9f73c266a564.tar.gz
Merge "NoUniqueMatch: ClientException on Gnocchi publisher"
-rw-r--r--ceilometer/publisher/gnocchi.py43
-rw-r--r--ceilometer/tests/unit/publisher/test_gnocchi.py11
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 '