metricq / metricq-python

🐍 The MetricQ Python interface
https://metricq.github.io/metricq-python/
BSD 3-Clause "New" or "Revised" License
18 stars 7 forks source link

Handle channel errors in `HistoryClient` #108

Closed phijor closed 3 years ago

phijor commented 3 years ago

We should make sure that every channel operation of a HistoryClient handles channel errors (ChannelInvalidStateError, ChannelLockedResource), like other clients do:

https://github.com/metricq/metricq-python/blob/2f1775cbc63577cfc7d78f55efac631da8bbc789/metricq/agent.py#L367-L374

We then might raise our own (more descriptive and documented) exceptions and let application code handle that.

tilsche commented 3 years ago
Sep 16 09:57:34 metricq metricq-grafana[35050]: 2021-09-16 09:57:34,841 [ERROR   ] [aiohttp.server      ] Error handling request
Sep 16 09:57:34 metricq metricq-grafana[35050]: Traceback (most recent call last):
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 422, in _handle_request
Sep 16 09:57:34 metricq metricq-grafana[35050]:     resp = await self._request_handler(request)
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/aiohttp/web_app.py", line 499, in _handle
Sep 16 09:57:34 metricq metricq-grafana[35050]:     resp = await handler(request)
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/metricq_grafana/views.py", line 25, in query
Sep 16 09:57:34 metricq metricq-grafana[35050]:     resp = await get_history_data(request.app, req_json)
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/metricq_grafana/amqp.py", line 44, in get_history_data
Sep 16 09:57:34 metricq metricq-grafana[35050]:     results = await asyncio.gather(
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/metricq_grafana/target.py", line 47, in get_response
Sep 16 09:57:34 metricq metricq-grafana[35050]:     ((data, time_delta_ns), metadata) = await asyncio.gather(
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/metricq_grafana/target.py", line 75, in _get_data
Sep 16 09:57:34 metricq metricq-grafana[35050]:     data = await app["history_client"].history_data_request(
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/metricq/history_client.py", line 433, in history_data_request
Sep 16 09:57:34 metricq metricq-grafana[35050]:     await self.history_exchange.publish(msg, routing_key=metric)
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/aio_pika/exchange.py", line 233, in publish
Sep 16 09:57:34 metricq metricq-grafana[35050]:     return await asyncio.wait_for(
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/usr/local/lib/python3.9/asyncio/tasks.py", line 442, in wait_for
Sep 16 09:57:34 metricq metricq-grafana[35050]:     return await fut
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/aiormq/channel.py", line 508, in basic_publish
Sep 16 09:57:34 metricq metricq-grafana[35050]:     async with self.lock:
Sep 16 09:57:34 metricq metricq-grafana[35050]:   File "/opt/metricq-grafana/lib/python3.9/site-packages/aiormq/channel.py", line 90, in lock
Sep 16 09:57:34 metricq metricq-grafana[35050]:     raise ChannelInvalidStateError("%r closed" % self)
Sep 16 09:57:34 metricq metricq-grafana[35050]: aiormq.exceptions.ChannelInvalidStateError: <Channel: "1"> closed