Don't use gnocchiclient during publisher init
We can't create archive policies in publisher init because if it fail because Gnocchi is not yet ready the publisher fail to load. Ceilometer will work, but samples will go to nowhere. This change creates/checks archive policies when we publish a sample for the very first time. If that fail because Gnocchi is not ready, this will just retry next time Ceilometer will publish samples. Closes-Bug: #1752420 Change-Id: Ib6b4da54592ad99a4e6561a73473b6c7ec73a21f
This commit is contained in:
parent
e4c513b476
commit
14906f8672
@ -246,7 +246,7 @@ class GnocchiPublisher(publisher.ConfigPublisherBase):
|
|||||||
self._already_logged_event_types = set()
|
self._already_logged_event_types = set()
|
||||||
self._already_logged_metric_names = set()
|
self._already_logged_metric_names = set()
|
||||||
|
|
||||||
self.ensures_archives_policies()
|
self._already_configured_archive_policies = False
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _load_definitions(conf, archive_policy_override,
|
def _load_definitions(conf, archive_policy_override,
|
||||||
@ -273,11 +273,13 @@ class GnocchiPublisher(publisher.ConfigPublisherBase):
|
|||||||
return resource_defs, data.get("archive_policies", [])
|
return resource_defs, data.get("archive_policies", [])
|
||||||
|
|
||||||
def ensures_archives_policies(self):
|
def ensures_archives_policies(self):
|
||||||
|
if not self._already_configured_archive_policies:
|
||||||
for ap in self.archive_policies_definition:
|
for ap in self.archive_policies_definition:
|
||||||
try:
|
try:
|
||||||
self._gnocchi.archive_policy.get(ap["name"])
|
self._gnocchi.archive_policy.get(ap["name"])
|
||||||
except gnocchi_exc.ArchivePolicyNotFound:
|
except gnocchi_exc.ArchivePolicyNotFound:
|
||||||
self._gnocchi.archive_policy.create(ap)
|
self._gnocchi.archive_policy.create(ap)
|
||||||
|
self._already_configured_archive_policies = True
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def gnocchi_project_id(self):
|
def gnocchi_project_id(self):
|
||||||
@ -325,6 +327,8 @@ class GnocchiPublisher(publisher.ConfigPublisherBase):
|
|||||||
return rd, operation
|
return rd, operation
|
||||||
|
|
||||||
def publish_samples(self, data):
|
def publish_samples(self, data):
|
||||||
|
self.ensures_archives_policies()
|
||||||
|
|
||||||
# NOTE(sileht): skip sample generated by gnocchi itself
|
# NOTE(sileht): skip sample generated by gnocchi itself
|
||||||
data = [s for s in data if not self._is_gnocchi_activity(s)]
|
data = [s for s in data if not self._is_gnocchi_activity(s)]
|
||||||
data.sort(key=operator.attrgetter('resource_id'))
|
data.sort(key=operator.attrgetter('resource_id'))
|
||||||
|
@ -474,8 +474,6 @@ class PublisherWorkflowTest(base.BaseTestCase,
|
|||||||
self.useFixture(utils_fixture.TimeFixture(now))
|
self.useFixture(utils_fixture.TimeFixture(now))
|
||||||
|
|
||||||
expected_calls = [
|
expected_calls = [
|
||||||
mock.call.archive_policy.get("ceilometer-low"),
|
|
||||||
mock.call.archive_policy.get("ceilometer-low-rate"),
|
|
||||||
mock.call.resource.search('instance_network_interface',
|
mock.call.resource.search('instance_network_interface',
|
||||||
search_params),
|
search_params),
|
||||||
mock.call.resource.search('instance_disk', search_params),
|
mock.call.resource.search('instance_disk', search_params),
|
||||||
@ -505,7 +503,7 @@ class PublisherWorkflowTest(base.BaseTestCase,
|
|||||||
IMAGE_DELETE_START,
|
IMAGE_DELETE_START,
|
||||||
VOLUME_DELETE_START,
|
VOLUME_DELETE_START,
|
||||||
FLOATINGIP_DELETE_END])
|
FLOATINGIP_DELETE_END])
|
||||||
self.assertEqual(10, len(fakeclient.mock_calls))
|
self.assertEqual(8, len(fakeclient.mock_calls))
|
||||||
for call in expected_calls:
|
for call in expected_calls:
|
||||||
self.assertIn(call, fakeclient.mock_calls)
|
self.assertIn(call, fakeclient.mock_calls)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user