gnocchixyz / gnocchi

Timeseries database
Apache License 2.0
299 stars 85 forks source link

Metric status does not work with Python3 #1083

Closed paramite closed 3 years ago

paramite commented 3 years ago

Which version of Gnocchi are you using

rpm -qa gnocchi

python3-gnocchiclient-7.0.4-0.20200310205157.64814b9.el8ost.noarch gnocchi-common-4.3.5-0.20200310232918.8cbc9ee.el8ost.noarch gnocchi-api-4.3.5-0.20200310232918.8cbc9ee.el8ost.noarch
python3-gnocchi-4.3.5-0.20200310232918.8cbc9ee.el8ost.noarch

How to reproduce your problem

Deploy Gnochi on Python 3.6.8 and run "openstack metric status" via python-3-gnocchi client.

What is the result that you get

Gnocchi API throws following traceback:

[Tue Sep 29 13:39:24.857604 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] mod_wsgi (pid=25): Exception occurred processing WSGI script '/var/www/cgi-bin/gnocchi/app'. [Tue Sep 29 13:39:24.863003 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] Traceback (most recent call last): [Tue Sep 29 13:39:24.863161 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/dec.py", line 129, in call [Tue Sep 29 13:39:24.863168 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] resp = self.call_func(req, *args, kw) [Tue Sep 29 13:39:24.863176 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/dec.py", line 193, in call_func [Tue Sep 29 13:39:24.863180 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return self.func(req, *args, *kwargs) [Tue Sep 29 13:39:24.863187 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/oslo_middleware/base.py", line 130, in call [Tue Sep 29 13:39:24.863191 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] response = req.get_response(self.application) [Tue Sep 29 13:39:24.863198 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/request.py", line 1314, in send [Tue Sep 29 13:39:24.863202 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] application, catch_exc_info=False) [Tue Sep 29 13:39:24.863209 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/request.py", line 1278, in call_application [Tue Sep 29 13:39:24.863214 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] app_iter = application(self.environ, start_response) [Tue Sep 29 13:39:24.863221 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/paste/urlmap.py", line 216, in call [Tue Sep 29 13:39:24.863225 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return app(environ, start_response) [Tue Sep 29 13:39:24.863232 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/dec.py", line 129, in call [Tue Sep 29 13:39:24.863236 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] resp = self.call_func(req, args, kw) [Tue Sep 29 13:39:24.863243 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/dec.py", line 193, in call_func [Tue Sep 29 13:39:24.863247 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return self.func(req, *args, kwargs) [Tue Sep 29 13:39:24.863254 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/oslo_middleware/base.py", line 130, in call [Tue Sep 29 13:39:24.863258 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] response = req.get_response(self.application) [Tue Sep 29 13:39:24.863265 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/request.py", line 1314, in send [Tue Sep 29 13:39:24.863269 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] application, catch_exc_info=False) [Tue Sep 29 13:39:24.863276 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/request.py", line 1278, in call_application [Tue Sep 29 13:39:24.863280 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] app_iter = application(self.environ, start_response) [Tue Sep 29 13:39:24.863287 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/dec.py", line 129, in call [Tue Sep 29 13:39:24.863291 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] resp = self.call_func(req, *args, *kw) [Tue Sep 29 13:39:24.863298 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/dec.py", line 193, in call_func [Tue Sep 29 13:39:24.863302 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return self.func(req, args, kwargs) [Tue Sep 29 13:39:24.863317 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/keystonemiddleware/auth_token/init.py", line 341, in call [Tue Sep 29 13:39:24.863322 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] response = req.get_response(self._app) [Tue Sep 29 13:39:24.863329 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/request.py", line 1314, in send [Tue Sep 29 13:39:24.863333 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] application, catch_exc_info=False) [Tue Sep 29 13:39:24.863340 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/request.py", line 1278, in call_application [Tue Sep 29 13:39:24.863344 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] app_iter = application(self.environ, start_response) [Tue Sep 29 13:39:24.863351 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/webob/exc.py", line 1165, in call [Tue Sep 29 13:39:24.863355 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return self.application(environ, start_response) [Tue Sep 29 13:39:24.863362 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/gnocchi/rest/app.py", line 131, in call [Tue Sep 29 13:39:24.863366 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return self.app(environ, start_response) [Tue Sep 29 13:39:24.863373 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/pecan/middleware/recursive.py", line 56, in call [Tue Sep 29 13:39:24.863377 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return self.application(environ, start_response) [Tue Sep 29 13:39:24.863392 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/pecan/core.py", line 840, in call [Tue Sep 29 13:39:24.863399 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return super(Pecan, self).call(environ, start_response) [Tue Sep 29 13:39:24.863406 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/pecan/core.py", line 683, in call [Tue Sep 29 13:39:24.863410 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] self.invoke_controller(controller, args, kwargs, state) [Tue Sep 29 13:39:24.863417 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/pecan/core.py", line 604, in invoke_controller [Tue Sep 29 13:39:24.863422 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] result = self.render(template, result) [Tue Sep 29 13:39:24.863429 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/pecan/core.py", line 425, in render [Tue Sep 29 13:39:24.863433 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return renderer.render(template, namespace) [Tue Sep 29 13:39:24.863440 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/gnocchi/rest/app.py", line 145, in render [Tue Sep 29 13:39:24.863444 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return super(JsonRenderer, self).render(template_path, namespace) [Tue Sep 29 13:39:24.863451 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/pecan/templating.py", line 23, in render [Tue Sep 29 13:39:24.863455 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return encode(namespace) [Tue Sep 29 13:39:24.863462 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib/python3.6/site-packages/pecan/jsonify.py", line 133, in encode [Tue Sep 29 13:39:24.863466 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return _instance.encode(obj) [Tue Sep 29 13:39:24.863473 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib64/python3.6/json/encoder.py", line 199, in encode [Tue Sep 29 13:39:24.863480 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] chunks = self.iterencode(o, _one_shot=True) [Tue Sep 29 13:39:24.863487 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] File "/usr/lib64/python3.6/json/encoder.py", line 257, in iterencode [Tue Sep 29 13:39:24.863491 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] return _iterencode(o, 0) [Tue Sep 29 13:39:24.863510 2020] [wsgi:error] [pid 25] [remote 10.120.21.71:60074] TypeError: keys must be a string

It is caused by the fact that the dict response which is supposed to be JSON serialized contains bytes keys:

{'storage': {'summary': {'metrics': 0, 'measures': 0}}, 'metricd': {'processors': {b'controller-0.1.bb4bb372-f148-4320-8ad0-31314d26909e', b'controller-1.0.e9852552-9ada-4eb9-a625-3df110e2d38e', b'controller-2.0.3099a52a-18eb-4989-b239-9e69aabcc70c', b'controller-1.1.a55b8603-281d-4afd-8ac4-a575db1ba0a1', b'controller-0.0.5799e281-63b6-48c2-9a0a-86d0ca8400ab', b'controller-2.1.4789b143-337b-49ef-b0e1-6b697c8dff96'}, 'statistics': {b'controller-0.1.bb4bb372-f148-4320-8ad0-31314d26909e': {}, b'controller-1.0.e9852552-9ada-4eb9-a625-3df110e2d38e': {}, b'controller-2.0.3099a52a-18eb-4989-b239-9e69aabcc70c': {}, b'controller-1.1.a55b8603-281d-4afd-8ac4-a575db1ba0a1': {}, b'controller-0.0.5799e281-63b6-48c2-9a0a-86d0ca8400ab': {}, b'controller-2.1.4789b143-337b-49ef-b0e1-6b697c8dff96': {}}}}

What is result that you expected

Proper response for the client

paramite commented 3 years ago

This is already fixed with [1] and [2]. The problem is caused by running old version.

[1] https://github.com/gnocchixyz/gnocchi/commit/7a3ddc4ceb64bf648a5f383814632f72b8700a8f [2] https://github.com/gnocchixyz/gnocchi/commit/bd2cafadd0961231748cf4b67efd28c6db277b04