{"sha":"a0e2230e3b9dc0f741bb71060950260c4c33148b","node_id":"C_kwDOAGVcL9oAKGEwZTIyMzBlM2I5ZGMwZjc0MWJiNzEwNjA5NTAyNjBjNGMzMzE0OGI","commit":{"author":{"name":"Zuul","email":"zuul@review.opendev.org","date":"2023-12-01T13:41:26Z"},"committer":{"name":"Gerrit Code Review","email":"review@openstack.org","date":"2023-12-01T13:41:26Z"},"message":"Merge \"Make multiple attempts to obtain gnocchiclient\" into stable/zed","tree":{"sha":"1cc35470752499ac81585cad3165627ba14c824c","url":"https://api.github.com/repos/openstack/ceilometer/git/trees/1cc35470752499ac81585cad3165627ba14c824c"},"url":"https://api.github.com/repos/openstack/ceilometer/git/commits/a0e2230e3b9dc0f741bb71060950260c4c33148b","comment_count":0,"verification":{"verified":false,"reason":"unsigned","signature":null,"payload":null,"verified_at":null}},"url":"https://api.github.com/repos/openstack/ceilometer/commits/a0e2230e3b9dc0f741bb71060950260c4c33148b","html_url":"https://github.com/openstack/ceilometer/commit/a0e2230e3b9dc0f741bb71060950260c4c33148b","comments_url":"https://api.github.com/repos/openstack/ceilometer/commits/a0e2230e3b9dc0f741bb71060950260c4c33148b/comments","author":null,"committer":{"login":"openstack-gerrit","id":903479,"node_id":"MDQ6VXNlcjkwMzQ3OQ==","avatar_url":"https://avatars.githubusercontent.com/u/903479?v=4","gravatar_id":"","url":"https://api.github.com/users/openstack-gerrit","html_url":"https://github.com/openstack-gerrit","followers_url":"https://api.github.com/users/openstack-gerrit/followers","following_url":"https://api.github.com/users/openstack-gerrit/following{/other_user}","gists_url":"https://api.github.com/users/openstack-gerrit/gists{/gist_id}","starred_url":"https://api.github.com/users/openstack-gerrit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openstack-gerrit/subscriptions","organizations_url":"https://api.github.com/users/openstack-gerrit/orgs","repos_url":"https://api.github.com/users/openstack-gerrit/repos","events_url":"https://api.github.com/users/openstack-gerrit/events{/privacy}","received_events_url":"https://api.github.com/users/openstack-gerrit/received_events","type":"User","user_view_type":"public","site_admin":false},"parents":[{"sha":"bb2ea2650694b54606d4dcdf41b27f6cfa5b8354","url":"https://api.github.com/repos/openstack/ceilometer/commits/bb2ea2650694b54606d4dcdf41b27f6cfa5b8354","html_url":"https://github.com/openstack/ceilometer/commit/bb2ea2650694b54606d4dcdf41b27f6cfa5b8354"},{"sha":"c8217dc80cea8e911b85004750ab088569d33291","url":"https://api.github.com/repos/openstack/ceilometer/commits/c8217dc80cea8e911b85004750ab088569d33291","html_url":"https://github.com/openstack/ceilometer/commit/c8217dc80cea8e911b85004750ab088569d33291"}],"stats":{"total":31,"additions":28,"deletions":3},"files":[{"sha":"810887ebc02c04db01a80536dc2e89e580250b5b","filename":"ceilometer/declarative.py","status":"modified","additions":1,"deletions":1,"changes":2,"blob_url":"https://github.com/openstack/ceilometer/blob/a0e2230e3b9dc0f741bb71060950260c4c33148b/ceilometer%2Fdeclarative.py","raw_url":"https://github.com/openstack/ceilometer/raw/a0e2230e3b9dc0f741bb71060950260c4c33148b/ceilometer%2Fdeclarative.py","contents_url":"https://api.github.com/repos/openstack/ceilometer/contents/ceilometer%2Fdeclarative.py?ref=a0e2230e3b9dc0f741bb71060950260c4c33148b","patch":"@@ -195,5 +195,5 @@ def load_definitions(conf, defaults, config_file, fallback_file=None):\n                   \"Using default config.\")\n         definition_cfg = defaults\n \n-    LOG.info(\"Definitions: %s\", definition_cfg)\n+    LOG.debug(\"Definitions: %s\", definition_cfg)\n     return definition_cfg"},{"sha":"9193af41adff047d45fa3a8cdcc8225afd50a36b","filename":"ceilometer/publisher/gnocchi.py","status":"modified","additions":18,"deletions":2,"changes":20,"blob_url":"https://github.com/openstack/ceilometer/blob/a0e2230e3b9dc0f741bb71060950260c4c33148b/ceilometer%2Fpublisher%2Fgnocchi.py","raw_url":"https://github.com/openstack/ceilometer/raw/a0e2230e3b9dc0f741bb71060950260c4c33148b/ceilometer%2Fpublisher%2Fgnocchi.py","contents_url":"https://api.github.com/repos/openstack/ceilometer/contents/ceilometer%2Fpublisher%2Fgnocchi.py?ref=a0e2230e3b9dc0f741bb71060950260c4c33148b","patch":"@@ -18,6 +18,7 @@\n import json\n import operator\n import pkg_resources\n+import tenacity\n import threading\n \n from gnocchiclient import exceptions as gnocchi_exc\n@@ -213,13 +214,28 @@ def __init__(self, conf, parsed_url):\n         self._gnocchi_project_id_lock = threading.Lock()\n         self._gnocchi_resource_lock = LockedDefaultDict(threading.Lock)\n \n-        self._gnocchi = gnocchi_client.get_gnocchiclient(\n-            conf, request_timeout=timeout)\n+        try:\n+            self._gnocchi = self._get_gnocchi_client(conf, timeout)\n+        except tenacity.RetryError as e:\n+            raise e.last_attempt._exception from None\n+\n         self._already_logged_event_types = set()\n         self._already_logged_metric_names = set()\n \n         self._already_configured_archive_policies = False\n \n+    @tenacity.retry(\n+        stop=tenacity.stop_after_attempt(10),\n+        wait=tenacity.wait_fixed(5),\n+        retry=(\n+            tenacity.retry_if_exception_type(ka_exceptions.ServiceUnavailable)\n+            | tenacity.retry_if_exception_type(ka_exceptions.DiscoveryFailure)\n+            | tenacity.retry_if_exception_type(ka_exceptions.ConnectTimeout)\n+        ),\n+        reraise=False)\n+    def _get_gnocchi_client(self, conf, timeout):\n+        return gnocchi_client.get_gnocchiclient(conf, request_timeout=timeout)\n+\n     @staticmethod\n     def _load_definitions(conf, archive_policy_override,\n                           resources_definition_file):"},{"sha":"3d16cfaa70e14269ff7e1572c8ad7bb6a7a4fb77","filename":"ceilometer/tests/unit/publisher/test_gnocchi.py","status":"modified","additions":9,"deletions":0,"changes":9,"blob_url":"https://github.com/openstack/ceilometer/blob/a0e2230e3b9dc0f741bb71060950260c4c33148b/ceilometer%2Ftests%2Funit%2Fpublisher%2Ftest_gnocchi.py","raw_url":"https://github.com/openstack/ceilometer/raw/a0e2230e3b9dc0f741bb71060950260c4c33148b/ceilometer%2Ftests%2Funit%2Fpublisher%2Ftest_gnocchi.py","contents_url":"https://api.github.com/repos/openstack/ceilometer/contents/ceilometer%2Ftests%2Funit%2Fpublisher%2Ftest_gnocchi.py?ref=a0e2230e3b9dc0f741bb71060950260c4c33148b","patch":"@@ -343,6 +343,15 @@ def test_activity_gnocchi_project_not_found(self, logger):\n             'Filtered project [service] not found in keystone, ignoring the '\n             'filter_project option')\n \n+    @mock.patch('ceilometer.publisher.gnocchi.GnocchiPublisher'\n+                '._get_gnocchi_client')\n+    def test_get_gnocchi_client(self, gnocchi_cli):\n+        url = netutils.urlsplit(\"gnocchi://\")\n+        gnocchi_cli.side_effect = ka_exceptions.DiscoveryFailure\n+        cfg = self.conf.conf\n+        publisher = gnocchi.GnocchiPublisher\n+        self.assertRaises(ka_exceptions.DiscoveryFailure, publisher, cfg, url)\n+\n     def test_activity_filter_match_swift_event(self):\n         self.samples[0].name = 'storage.objects.outgoing.bytes'\n         self.samples[0].resource_id = 'a2d42c23-d518-46b6-96ab-3fba2e146859'"}]}