)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"13ac5ab91431ecded2c566a747ee1a250fe3b750","unresolved":true,"context_lines":[{"line_number":10,"context_line":"connect to libvirt service."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This is a reaction to an observed situation,"},{"line_number":13,"context_line":"where nova restarted its containers and deleted"},{"line_number":14,"context_line":"and recreated the /run/libvirt folder."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Or, the compute agent is unable to connect to libvirt"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"6911337d_8e8ec806","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":10},"updated":"2025-03-01 09:38:11.000000000","message":"If restarting a nova service removes /run/libvirt then that\u0027s WRONG. If restarting a libvirt service does then it makes sense.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"13ac5ab91431ecded2c566a747ee1a250fe3b750","unresolved":true,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This is a reaction to an observed situation,"},{"line_number":13,"context_line":"where nova restarted its containers and deleted"},{"line_number":14,"context_line":"and recreated the /run/libvirt folder."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Or, the compute agent is unable to connect to libvirt"},{"line_number":17,"context_line":"service after it was recovered and brought to healthy"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"59486e30_37dde547","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":38},"updated":"2025-03-01 09:38:11.000000000","message":"I feel like there is something wrong in the way how you deploy services in containers. If a directory is shared between two containers then the directory itself should not be removed when one of these services are restarted.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"13ac5ab91431ecded2c566a747ee1a250fe3b750","unresolved":true,"context_lines":[{"line_number":13,"context_line":"where nova restarted its containers and deleted"},{"line_number":14,"context_line":"and recreated the /run/libvirt folder."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Or, the compute agent is unable to connect to libvirt"},{"line_number":17,"context_line":"service after it was recovered and brought to healthy"},{"line_number":18,"context_line":"status."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This caused the ceilometer container to not be able"},{"line_number":21,"context_line":"to read the libvirt socket and thus no metrics could"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"69b922a3_ddcfffeb","line":18,"range":{"start_line":16,"start_character":0,"end_line":18,"end_character":7},"updated":"2025-03-01 09:38:11.000000000","message":"IIUC the current implementation allows agent to detect disconnection and reconnect to libvirt when it comes back.\nIf the issue is specifically caused by the way how the directory is managed between these two containers then I think the problem should be fixed in the deployment tool.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"719b05faabe0feb502cf1cafc1c269ea2ad240ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3665f568_bd865bd8","updated":"2023-08-09 11:59:17.000000000","message":"Would it be an option to open the file for reading and to close it afterwards? In that case you wouldn\u0027t have to fiddle with trying to kill other processes?","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"cfd0a576f83ebab0c092fe9bc52c4adf66e8a96d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3997c3a2_5859635b","in_reply_to":"3665f568_bd865bd8","updated":"2023-08-14 11:40:24.000000000","message":"REF Matthias\u0027 comment the code would indeed try to open the socket again and even closes the old binding if it exists.\n\nI\u0027m wondering couple of things here:\n1) Do we ever retry? Are the libvirt error codes and domains correct in case the socket libvirt-python is trying to connect to socket that does not exists at the moment?\n2) If the result is actual retry on the libvirt connect attempts, I think 3 tries totalling 21sec wait time is very short. As explained in the commit message for the intention of this is to get the container restarted, well this would result the container restarting every half a minute or so. Should we give it (honestly quite significant amount) more time? Especially if the expected use case is around nova-compute restarts assuming that operation is not exactly in a scale of few seconds. This bouncing container will cause a lot of clutter if the socket does not come back and we\u0027re in restart loop.\n3) Is this a case of ceilometer failing due to missing socket temporarily or is the actual reason container configuration problem where that socket will never be available in the ceilometer container after recreated?\n\nIs there a bug for this issue?\n\nAny testing that this actually behaves as intended?","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"ee57e4badcce1f30cdcc3e9a1853b50865cf76e4","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f287ff5f_d093d11b","in_reply_to":"3997c3a2_5859635b","updated":"2023-08-21 10:02:10.000000000","message":"1) I\u0027m not sure, I\u0027ll test that.\n2) I saw the retry_on_disconnect and I thought it\u0027s quite suitable for this. I can create a new decorator with longer timeouts. Does 5 attempts with multiplier\u003d5 and min\u003d1 sound good? That should take about 2 minutes and 36 seconds.\n3) After the socket got recreated, I wasn\u0027t able to access it from the ceilometer container ever again. The only way to make ceilometer work again was to restart the container. The socket on the host is in /run/libvirt/virtqemud-sock-ro. The container mounts /run/libvirt. It looks like the whole /run/libvirt folder is deleted and created again, but inside the container we probably still have mounted the old one. I tried to ls the folder from inside the container and got a permission denied.\n\nWe have a bz here: https://bugzilla.redhat.com/show_bug.cgi?id\u003d2223410\n\nI tested this in a podified environment created by the install_yamls. When the libvirt folder recreated, the ceilemeter container restarted and it was working afterwards.","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"a6a5cde43db5a68a74698b1f607d8f280a6c2ab4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0e899c47_5fb1096d","updated":"2023-08-23 13:41:52.000000000","message":"As discussed before, I made the description of the configuration variable a bit longer and hopefully clearer. I also prolonged the time it takes before the exit.\n\nI tried to test a situation, where the socket file is missing. First I deleted all the socket files in /run/libvirt, then I deleted the whole /run/libvirt folder (this was while a ceilometer container was already running). I left the container running like that for a few hours, but ceilometer continued working like nothing happend. I couldn\u0027t see anything out of the ordinary in the logs. I guess the opened file descriptor might still stay valid even after the file is deleted? After that I tried to manually restart the ceilometer container while the socket files are deleted (the /run/libvirt folder is there, just empty) to simulate a situation of ceilometer starting before the socket files reappear. When doing that, it fell into a restart loop as expected, restarting every about 2.5 mins. When restarting without the /run/libvirt folder on the host, the container wouldn\u0027t even start, since it couldn\u0027t mount the volume.\n\nBack to the bug, each time the libvirt folder got recreated, the ceilometer container restarted exactly once. After the restart, everything seemed to be working as it should.","commit_id":"e37553ad9090eeb0ef06ce2e2f71cce8b334723e"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"aa2231e480f88c8d9bd98dedb3742d1db935cd24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3b0a9bd0_33ddd7f1","updated":"2023-08-24 05:57:04.000000000","message":"fails with \"bad request\" in with keystone? \nhttps://zuul.opendev.org/t/openstack/build/46367039a4914883b064dd471dae2be2/log/job-output.txt#26202-26204","commit_id":"e37553ad9090eeb0ef06ce2e2f71cce8b334723e"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"d8d43fd58e900b8fe8e1692e2478a8911d485369","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b56de47a_20914d22","in_reply_to":"3b0a9bd0_33ddd7f1","updated":"2023-08-24 07:27:11.000000000","message":"There seems to be a few issues with the CI right now. There is this keystone issue as well as some aodh issue. I found https://review.opendev.org/c/openstack/aodh/+/891576 . Which attempts to solve the aodh one, I\u0027m not sure if anyone is looking into keystone.","commit_id":"e37553ad9090eeb0ef06ce2e2f71cce8b334723e"},{"author":{"_account_id":32240,"name":"Yadnesh Kulkarni","email":"yadnesh_kulkarni@proton.me","username":"ykulkarn"},"change_message_id":"30c65cc116c307c5b640787615a97eba62d5365e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a12f9227_f5dae63e","updated":"2023-11-22 10:24:27.000000000","message":"Tested this fix locally, after starting nova_libvirt service, it now continously reports this\n```\n2023-11-22 10:23:17.863 17 DEBUG ceilometer.polling.manager [-] Skip pollster memory.swap.out, no  resources found this cycle poll_and_notify /usr/lib/python3.6/site-packages/ceilometer/polling/manager.py:195\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager [-] Unable to discover resources: invalid connection pointer in virConnectIsAlive: libvirt.libvirtError: invalid connection pointer in virConnectIsAlive\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager Traceback (most recent call last):\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/ceilometer/polling/manager.py\", line 585, in discover\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     discovered \u003d discoverer.discover(self, param)\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/ceilometer/compute/discovery.py\", line 119, in discover\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     return self.discover_libvirt_polling(manager, param\u003dNone)\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/tenacity/__init__.py\", line 329, in wrapped_f\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     return self.call(f, *args, **kw)\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/tenacity/__init__.py\", line 409, in call\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     do \u003d self.iter(retry_state\u003dretry_state)\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/tenacity/__init__.py\", line 356, in iter\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     return fut.result()\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib64/python3.6/concurrent/futures/_base.py\", line 425, in result\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     return self.__get_result()\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib64/python3.6/concurrent/futures/_base.py\", line 384, in __get_result\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     raise self._exception\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/tenacity/__init__.py\", line 412, in call\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     result \u003d fn(*args, **kwargs)\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/ceilometer/compute/discovery.py\", line 139, in discover_libvirt_polling\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     for domain in self.connection.listAllDomains():\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/ceilometer/compute/discovery.py\", line 112, in connection\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     return libvirt_utils.refresh_libvirt_connection(self.conf, self)\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib/python3.6/site-packages/ceilometer/compute/virt/libvirt/utils.py\", line 159, in refresh_libvirt_connection\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     if not connection or not connection.isAlive():\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager   File \"/usr/lib64/python3.6/site-packages/libvirt.py\", line 4751, in isAlive\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager     raise libvirtError(\u0027virConnectIsAlive() failed\u0027)\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager libvirt.libvirtError: invalid connection pointer in virConnectIsAlive\n2023-11-22 10:23:17.863 17 ERROR ceilometer.polling.manager \n```","commit_id":"151e9224b356438e22748fda08aa5efe9949cec5"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"93b18e39027b23007b36d48494e2e6b2b3b889c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a94ac7b4_2947c1e2","updated":"2023-09-14 05:56:07.000000000","message":"recheck","commit_id":"151e9224b356438e22748fda08aa5efe9949cec5"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"5df73939fe4b7231aa37ab038d5a2f6b7b99e7b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9495af2c_74fc58e9","updated":"2023-11-27 13:47:45.000000000","message":"I wasn\u0027t able to replicate the bug in podified again. So I can\u0027t check if this fixes the original issue. But we\u0027ve seen a number of similar issues in other environments and this solves the issues in them. If we see the issue reappear in podified, I\u0027ll revive the idea with exiting the process in a different patch. This LGTM. Thanks Yadnesh for looking into this.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"c830af4a60338ebf853acc5d0cd026c3e0b0c7d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"4a3526c1_8a4960b6","updated":"2023-12-15 12:04:20.000000000","message":"Is the current state of the code actually addressing the original issue? If the libvirt socket never comes back to the ceilometer\u0027s availability isn\u0027t this going to just loop forever?\n\nWould be amazing if we could establish tests for this as I don\u0027t think the behaviour here is obvious.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"7af933b1a6b8b538db414c2a4a2f7e3d1e3facc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6c10d38a_586b64d3","updated":"2024-08-07 09:11:27.000000000","message":"It is a good established pattern to fail quickly on failure in a container orchestration environment.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"ff1d69ea2a399cdc0a427330177110818f2decd6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c5bf0332_42c94d21","updated":"2025-03-01 09:40:24.000000000","message":"What is still uncertain to me is whether the described problem about deleted /run/libvirt is specific to your deployment pattern or it\u0027s applicable to deployments without container layer.\n\nI kind of feel that the current behavior to ignore any metrics when it fails to connect to libvirt when it starts is a kind of troublesome so am positive about adding retry to save such case.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"268989f152207b9b53de280bc739dea972d08e3c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9ee54d5d_ad9a7bbe","in_reply_to":"4a3526c1_8a4960b6","updated":"2023-12-15 15:50:08.000000000","message":"I don\u0027t know. The only place where I was able to replicate the original issues were our \"next-gen\" deployments and it seems, that whatever nova was doing got fixed and I don\u0027t know a way how to replicate it now. But I\u0027ve seen other very similar bzs (Yadnesh might have some links) with similar issues, which should be getting fixed by this patch.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"5ae8f7f18117b5084599d0db390377191c252515","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"431337ed_a6f80df3","in_reply_to":"6a2c9e46_ebb2266b","updated":"2025-03-03 10:04:14.000000000","message":"The plan sounds reasonable to me.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"98ff1495a551e9e883a17e1ec32ace0f1578c9bb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"550585f4_6238d90d","in_reply_to":"9ee54d5d_ad9a7bbe","updated":"2024-08-07 09:10:41.000000000","message":"IMHO, restart forever is a better behaviour that just sit there logging errors constantly. If libvirt is not there or we cannot access it, it does not make any sense keep the ceilometer-compute-agent running.\n\nAFAIK, this fix only closes ceilometer, does not restart it. The restart is done by an external system (docker, podman, kubernetes) as a self-healing behaviour. However, if we are not retrieving any libvirt metrics, we be better restarting.\n\nThe moment libvirt is available again, we will be reconnecting and stop restarting.\n\nThis is considered a good pattern in the container orchestration world.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"f93f4cd9ff436599cdd9eb04298a0190180b05fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6a2c9e46_ebb2266b","in_reply_to":"c5bf0332_42c94d21","updated":"2025-03-03 10:01:45.000000000","message":"This issue appeared a looong time ago. Since then I think we changed some bits around how we deploy nova and some selinux rules and so on, so the issue actually disappeared on it\u0027s own. There may be some good ideas here, but it\u0027s pretty hard to verify them as I don\u0027t even know how to replicate the original issue.\n\nSo unless there are objections, I propose to just close the review later this week without merging it. If a similar issue pops up again in the future, people can either resubmit or reimplement the code proposed here.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"}],"ceilometer/compute/virt/libvirt/utils.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"cfd0a576f83ebab0c092fe9bc52c4adf66e8a96d","unresolved":true,"context_lines":[{"line_number":41,"context_line":"                    \u0027(which is dependent on libvirt_type).\u0027),"},{"line_number":42,"context_line":"    cfg.BoolOpt(\u0027exit_on_libvirt_failure\u0027,"},{"line_number":43,"context_line":"                default\u003dFalse,"},{"line_number":44,"context_line":"                help\u003d\u0027Terminate ceilometer if it cannot\u0027"},{"line_number":45,"context_line":"                     \u0027connect to the libvirt socket\u0027)"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"LIBVIRT_PER_TYPE_URIS \u003d dict(uml\u003d\u0027uml:///system\u0027, lxc\u003d\u0027lxc:///\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d0bf3c11_7e528a0a","line":45,"range":{"start_line":44,"start_character":21,"end_line":45,"end_character":52},"updated":"2023-08-14 11:40:24.000000000","message":"I think this help text would deserve bit more meat around the bones for the reasoning explained in the commit message.","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"ee57e4badcce1f30cdcc3e9a1853b50865cf76e4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                    \u0027(which is dependent on libvirt_type).\u0027),"},{"line_number":42,"context_line":"    cfg.BoolOpt(\u0027exit_on_libvirt_failure\u0027,"},{"line_number":43,"context_line":"                default\u003dFalse,"},{"line_number":44,"context_line":"                help\u003d\u0027Terminate ceilometer if it cannot\u0027"},{"line_number":45,"context_line":"                     \u0027connect to the libvirt socket\u0027)"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"LIBVIRT_PER_TYPE_URIS \u003d dict(uml\u003d\u0027uml:///system\u0027, lxc\u003d\u0027lxc:///\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4aadb310_2e2c400a","line":45,"range":{"start_line":44,"start_character":21,"end_line":45,"end_character":52},"in_reply_to":"d0bf3c11_7e528a0a","updated":"2023-08-21 10:02:10.000000000","message":"Ack","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"cfd0a576f83ebab0c092fe9bc52c4adf66e8a96d","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    if not libvirt:"},{"line_number":97,"context_line":"        return False"},{"line_number":98,"context_line":"    return (isinstance(e, libvirt.libvirtError)"},{"line_number":99,"context_line":"            and e.get_error_code() in (libvirt.VIR_ERR_SYSTEM_ERROR,"},{"line_number":100,"context_line":"                                       libvirt.VIR_ERR_INTERNAL_ERROR)"},{"line_number":101,"context_line":"            and e.get_error_domain() in (libvirt.VIR_FROM_REMOTE,"},{"line_number":102,"context_line":"                                         libvirt.VIR_FROM_RPC))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"retry_on_disconnect \u003d tenacity.retry("}],"source_content_type":"text/x-python","patch_set":1,"id":"f59cd46c_8f0359fb","line":102,"range":{"start_line":99,"start_character":12,"end_line":102,"end_character":63},"updated":"2023-08-14 11:40:24.000000000","message":"Are these domains and error codes correct in case the socket is missing?","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"13ac5ab91431ecded2c566a747ee1a250fe3b750","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    if not libvirt:"},{"line_number":97,"context_line":"        return False"},{"line_number":98,"context_line":"    return (isinstance(e, libvirt.libvirtError)"},{"line_number":99,"context_line":"            and e.get_error_code() in (libvirt.VIR_ERR_SYSTEM_ERROR,"},{"line_number":100,"context_line":"                                       libvirt.VIR_ERR_INTERNAL_ERROR)"},{"line_number":101,"context_line":"            and e.get_error_domain() in (libvirt.VIR_FROM_REMOTE,"},{"line_number":102,"context_line":"                                         libvirt.VIR_FROM_RPC))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"retry_on_disconnect \u003d tenacity.retry("}],"source_content_type":"text/x-python","patch_set":1,"id":"56bcb7d4_7c471b59","line":102,"range":{"start_line":99,"start_character":12,"end_line":102,"end_character":63},"in_reply_to":"f59cd46c_8f0359fb","updated":"2025-03-01 09:38:11.000000000","message":"Looking at https://libvirt.org/html/libvirt-virterror.html#virErrorNumber I think we may need a few different codes such as VIR_ERR_NO_CONNECT . If we need different sets then the function should be split.","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"cfd0a576f83ebab0c092fe9bc52c4adf66e8a96d","unresolved":true,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"retry_on_disconnect \u003d tenacity.retry("},{"line_number":106,"context_line":"    retry\u003dtenacity.retry_if_exception(is_disconnection_exception),"},{"line_number":107,"context_line":"    stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":108,"context_line":"    wait\u003dtenacity.wait_exponential(multiplier\u003d3, min\u003d1, max\u003d60))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"@retry_on_disconnect"}],"source_content_type":"text/x-python","patch_set":1,"id":"2422bc87_0f902c30","line":108,"range":{"start_line":107,"start_character":4,"end_line":108,"end_character":63},"updated":"2023-08-14 11:40:24.000000000","message":"This is bit confusing as the actual max on third try is only 12s totalling to only 21s across.","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"d5bd1c8a3ee6a05961a8a63db17d87a034e07727","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"retry_on_disconnect \u003d tenacity.retry("},{"line_number":106,"context_line":"    retry\u003dtenacity.retry_if_exception(is_disconnection_exception),"},{"line_number":107,"context_line":"    stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":108,"context_line":"    wait\u003dtenacity.wait_exponential(multiplier\u003d3, min\u003d1, max\u003d60))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"@retry_on_disconnect"}],"source_content_type":"text/x-python","patch_set":1,"id":"7d416848_fdf201a2","line":108,"range":{"start_line":107,"start_character":4,"end_line":108,"end_character":63},"in_reply_to":"2422bc87_0f902c30","updated":"2023-11-22 10:38:35.000000000","message":"retry_on_connection_failure decorator with better values was created to address this.","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"cfd0a576f83ebab0c092fe9bc52c4adf66e8a96d","unresolved":true,"context_lines":[{"line_number":133,"context_line":"            connection \u003d new_libvirt_connection(conf)"},{"line_number":134,"context_line":"        except tenacity.RetryError:"},{"line_number":135,"context_line":"            if conf.exit_on_libvirt_failure:"},{"line_number":136,"context_line":"                LOG.error(\"Couldn\u0027t connect to libvirt socket. \""},{"line_number":137,"context_line":"                          \"Sending SIGKILL to the main ceilometer process\")"},{"line_number":138,"context_line":"                parent_pid \u003d os.getppid()"},{"line_number":139,"context_line":"                if is_process_ceilometer(parent_pid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"d0d8479f_1f4c3c75","line":136,"updated":"2023-08-14 11:40:24.000000000","message":"This should be LOG.critical as the service is killed as result.","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"ee57e4badcce1f30cdcc3e9a1853b50865cf76e4","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            connection \u003d new_libvirt_connection(conf)"},{"line_number":134,"context_line":"        except tenacity.RetryError:"},{"line_number":135,"context_line":"            if conf.exit_on_libvirt_failure:"},{"line_number":136,"context_line":"                LOG.error(\"Couldn\u0027t connect to libvirt socket. \""},{"line_number":137,"context_line":"                          \"Sending SIGKILL to the main ceilometer process\")"},{"line_number":138,"context_line":"                parent_pid \u003d os.getppid()"},{"line_number":139,"context_line":"                if is_process_ceilometer(parent_pid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"6c7f1e34_8c3da82d","line":136,"in_reply_to":"d0d8479f_1f4c3c75","updated":"2023-08-21 10:02:10.000000000","message":"Ack","commit_id":"aeafb2847e5f45743fe684f9c2f8339cf55d388a"},{"author":{"_account_id":32240,"name":"Yadnesh Kulkarni","email":"yadnesh_kulkarni@proton.me","username":"ykulkarn"},"change_message_id":"6dd798c93e15db0b0322a00a285057b57318f4c2","unresolved":true,"context_lines":[{"line_number":134,"context_line":"def is_process_ceilometer(pid):"},{"line_number":135,"context_line":"    with open(f\"/proc/{pid}/cmdline\", \"r\") as cmd_file:"},{"line_number":136,"context_line":"        cmd \u003d cmd_file.readline()"},{"line_number":137,"context_line":"        return cmd[:18] \u003d\u003d \"ceilometer-polling\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"}],"source_content_type":"text/x-python","patch_set":2,"id":"d7217d2b_4246e698","line":137,"range":{"start_line":137,"start_character":7,"end_line":137,"end_character":47},"updated":"2023-08-25 08:55:42.000000000","message":"Can we try to check here whether it\u0027s the compute agent that we are killing ? There should be \"--namespace compute\" in the process arguments.","commit_id":"e37553ad9090eeb0ef06ce2e2f71cce8b334723e"},{"author":{"_account_id":32240,"name":"Yadnesh Kulkarni","email":"yadnesh_kulkarni@proton.me","username":"ykulkarn"},"change_message_id":"bcf37d5aac991d8c7a59e53ad26ee885ff5938cf","unresolved":true,"context_lines":[{"line_number":134,"context_line":"def is_process_ceilometer(pid):"},{"line_number":135,"context_line":"    with open(f\"/proc/{pid}/cmdline\", \"r\") as cmd_file:"},{"line_number":136,"context_line":"        cmd \u003d cmd_file.readline()"},{"line_number":137,"context_line":"        return cmd[:18] \u003d\u003d \"ceilometer-polling\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"}],"source_content_type":"text/x-python","patch_set":2,"id":"8a3ee6ca_26735eea","line":137,"range":{"start_line":137,"start_character":7,"end_line":137,"end_character":47},"in_reply_to":"1f90a818_9414efd9","updated":"2023-08-28 09:58:32.000000000","message":"Yes, that should be acceptable.","commit_id":"e37553ad9090eeb0ef06ce2e2f71cce8b334723e"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"7b333f862b02eafc1c8bf3d5200313351a2dbaea","unresolved":false,"context_lines":[{"line_number":134,"context_line":"def is_process_ceilometer(pid):"},{"line_number":135,"context_line":"    with open(f\"/proc/{pid}/cmdline\", \"r\") as cmd_file:"},{"line_number":136,"context_line":"        cmd \u003d cmd_file.readline()"},{"line_number":137,"context_line":"        return cmd[:18] \u003d\u003d \"ceilometer-polling\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"}],"source_content_type":"text/x-python","patch_set":2,"id":"d315bf87_17a3bdd8","line":137,"range":{"start_line":137,"start_character":7,"end_line":137,"end_character":47},"in_reply_to":"8a3ee6ca_26735eea","updated":"2023-09-15 05:16:26.000000000","message":"Done","commit_id":"e37553ad9090eeb0ef06ce2e2f71cce8b334723e"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"a75f7b9e795b3b9377ca51a65c6fb64c3cc6e13c","unresolved":true,"context_lines":[{"line_number":134,"context_line":"def is_process_ceilometer(pid):"},{"line_number":135,"context_line":"    with open(f\"/proc/{pid}/cmdline\", \"r\") as cmd_file:"},{"line_number":136,"context_line":"        cmd \u003d cmd_file.readline()"},{"line_number":137,"context_line":"        return cmd[:18] \u003d\u003d \"ceilometer-polling\""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f90a818_9414efd9","line":137,"range":{"start_line":137,"start_character":7,"end_line":137,"end_character":47},"in_reply_to":"d7217d2b_4246e698","updated":"2023-08-28 06:21:18.000000000","message":"I can expand the check. When looking at the contents of that file on my environment, there is:\n\n`ceilometer-polling: master process [/usr/bin/ceilometer-polling --polling-namespaces compute --logfile /var/log/containers/ceilometer/compute.log]`\n\nI\u0027m not sure if the format will be always exactly the same everywhere, so I don\u0027t want to check the whole string. But what about:\n\nreturn \"ceilometer\" in cmd and \"--polling-namespaces compute\" in cmd","commit_id":"e37553ad9090eeb0ef06ce2e2f71cce8b334723e"},{"author":{"_account_id":32240,"name":"Yadnesh Kulkarni","email":"yadnesh_kulkarni@proton.me","username":"ykulkarn"},"change_message_id":"6cd55490730caebcd0122af6f2ada957d2f5f38c","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"},{"line_number":141,"context_line":"    connection \u003d getattr(klass, \u0027_libvirt_connection\u0027, None)"},{"line_number":142,"context_line":"    if not connection or not connection.isAlive():"},{"line_number":143,"context_line":"        if connection and not connection.isAlive():"},{"line_number":144,"context_line":"            connection.close()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            connection \u003d new_libvirt_connection(conf)"},{"line_number":147,"context_line":"        except tenacity.RetryError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"00b7038b_ba9bccb0","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":30},"updated":"2023-09-14 14:23:35.000000000","message":"I ran into an expcetion while checking how it handles the connection if libvirt is not running\n```\n\u003e /opt/stack/ceilometer/ceilometer/compute/virt/libvirt/utils.py(142)refresh_libvirt_connection()\n-\u003e connection \u003d getattr(klass, \u0027_libvirt_connection\u0027, None)\n(Pdb) n\n\u003e /opt/stack/ceilometer/ceilometer/compute/virt/libvirt/utils.py(143)refresh_libvirt_connection()\n-\u003e if not connection or not connection.isAlive():\n(Pdb) n\nlibvirt.libvirtError: invalid connection pointer in virConnectIsAlive\n\u003e /opt/stack/ceilometer/ceilometer/compute/virt/libvirt/utils.py(143)refresh_libvirt_connection()\n```\n\nIt\u0027s the isAlive() function that causes it\n```\n(Pdb) connection\n\u003clibvirt.virConnect object at 0x7fa9ee52efd0\u003e\n(Pdb) connection.isAlive()\n*** libvirt.libvirtError: invalid connection pointer in virConnectIsAlive\n```\n\nShould I be reproducing this in a different way ?","commit_id":"151e9224b356438e22748fda08aa5efe9949cec5"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"7b333f862b02eafc1c8bf3d5200313351a2dbaea","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"},{"line_number":141,"context_line":"    connection \u003d getattr(klass, \u0027_libvirt_connection\u0027, None)"},{"line_number":142,"context_line":"    if not connection or not connection.isAlive():"},{"line_number":143,"context_line":"        if connection and not connection.isAlive():"},{"line_number":144,"context_line":"            connection.close()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            connection \u003d new_libvirt_connection(conf)"},{"line_number":147,"context_line":"        except tenacity.RetryError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f74d90c_516d151a","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":30},"in_reply_to":"00b7038b_ba9bccb0","updated":"2023-09-15 05:16:26.000000000","message":"That seems to be the original behavior. The isAlive() was always there and we should get some error in this case. If we want it to react differently, I guess I could include that change here.\n\nAs for reproducing the behavior from this change... It isn\u0027t very easily reproducible. The only way we were able to reproduce this was in a podified environment. I created an env following the steps from the telemetry-operator readme. After that, if you ssh into one of the edpm nodes, you should see the libvirt containers restart every couple of hours. That caused the behavior this patch is fixing.\n\nThinking about it now, maybe if you change permissions of the /run/libvirt so that ceilometer isn\u0027t allowed to read from the folder, maybe it would be the same, but I didn\u0027t test if that really reproduces the bug.","commit_id":"151e9224b356438e22748fda08aa5efe9949cec5"},{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"e0cd4184ce99a2962e9116f4a70c6397e2af7a5f","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"},{"line_number":141,"context_line":"    connection \u003d getattr(klass, \u0027_libvirt_connection\u0027, None)"},{"line_number":142,"context_line":"    if not connection or not connection.isAlive():"},{"line_number":143,"context_line":"        if connection and not connection.isAlive():"},{"line_number":144,"context_line":"            connection.close()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            connection \u003d new_libvirt_connection(conf)"},{"line_number":147,"context_line":"        except tenacity.RetryError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"2b0102e1_3db8b7f5","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":30},"in_reply_to":"1f74d90c_516d151a","updated":"2023-09-15 09:27:44.000000000","message":"wouldn\u0027t the issue be reproducible every time when libvirt is restarted on the compute node?","commit_id":"151e9224b356438e22748fda08aa5efe9949cec5"},{"author":{"_account_id":34975,"name":"Jaromír Wysoglad","email":"jwysogla@redhat.com","username":"jwysogla"},"change_message_id":"dc638e543e3c33a638986e9b148a25cd0b795b7b","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"},{"line_number":141,"context_line":"    connection \u003d getattr(klass, \u0027_libvirt_connection\u0027, None)"},{"line_number":142,"context_line":"    if not connection or not connection.isAlive():"},{"line_number":143,"context_line":"        if connection and not connection.isAlive():"},{"line_number":144,"context_line":"            connection.close()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            connection \u003d new_libvirt_connection(conf)"},{"line_number":147,"context_line":"        except tenacity.RetryError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dd4ecce6_9515f1c0","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":30},"in_reply_to":"2b0102e1_3db8b7f5","updated":"2023-09-15 12:55:38.000000000","message":"That was one of the first things we tried when trying to replicate the bug. Just podman restart libvirt* but that didn\u0027t trigger the bug. Unfortunately the only thing I found was just waiting. I\u0027m not sure what exactly nova does with the containers.","commit_id":"151e9224b356438e22748fda08aa5efe9949cec5"},{"author":{"_account_id":32240,"name":"Yadnesh Kulkarni","email":"yadnesh_kulkarni@proton.me","username":"ykulkarn"},"change_message_id":"a8d2d7db13fce90150f2d9ef6a2ba07be0a0a619","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def refresh_libvirt_connection(conf, klass):"},{"line_number":141,"context_line":"    connection \u003d getattr(klass, \u0027_libvirt_connection\u0027, None)"},{"line_number":142,"context_line":"    if not connection or not connection.isAlive():"},{"line_number":143,"context_line":"        if connection and not connection.isAlive():"},{"line_number":144,"context_line":"            connection.close()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            connection \u003d new_libvirt_connection(conf)"},{"line_number":147,"context_line":"        except tenacity.RetryError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"c398d354_5e3593af","line":144,"range":{"start_line":142,"start_character":0,"end_line":144,"end_character":30},"in_reply_to":"dd4ecce6_9515f1c0","updated":"2023-09-20 04:59:01.000000000","message":"I wondering if we have something in edpm-ansible to establish a dependency between nova and ceilometer such that compute agent is always created after nova_libvirt.\n\nIn tripleo we used a depends_on to start compute agent after libvirt https://github.com/openstack/tripleo-heat-templates/blob/stable/wallaby/deployment/ceilometer/ceilometer-agent-compute-container-puppet.yaml#L122-L123","commit_id":"151e9224b356438e22748fda08aa5efe9949cec5"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"13ac5ab91431ecded2c566a747ee1a250fe3b750","unresolved":true,"context_lines":[{"line_number":125,"context_line":"    # check if existing libvirt connection is alive"},{"line_number":126,"context_line":"    if connection:"},{"line_number":127,"context_line":"        try:"},{"line_number":128,"context_line":"            if connection.isAlive():"},{"line_number":129,"context_line":"                return connection"},{"line_number":130,"context_line":"        except libvirt.libvirtError as e:"},{"line_number":131,"context_line":"            LOG.error(e)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a77441ff_1be6a4d5","line":128,"range":{"start_line":128,"start_character":26,"end_line":128,"end_character":33},"updated":"2025-03-01 09:38:11.000000000","message":"I wonder when we expect this raises an exception rather than returning false ?","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"13ac5ab91431ecded2c566a747ee1a250fe3b750","unresolved":true,"context_lines":[{"line_number":136,"context_line":"        setattr(klass, \u0027_libvirt_connection\u0027, connection)"},{"line_number":137,"context_line":"        return connection"},{"line_number":138,"context_line":"    except libvirt.libvirtError as e:"},{"line_number":139,"context_line":"        LOG.error(\"Failed to establish connection with libvirt: %s\", e)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def raise_nodata_if_unsupported(method):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5e663030_17943122","line":139,"range":{"start_line":139,"start_character":8,"end_line":139,"end_character":71},"updated":"2025-03-01 09:38:11.000000000","message":"Current logic results in returning None, which may result in wired errors in callers. We should raise an exception rather than hiding it.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"c830af4a60338ebf853acc5d0cd026c3e0b0c7d3","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        return connection"},{"line_number":138,"context_line":"    except libvirt.libvirtError as e:"},{"line_number":139,"context_line":"        LOG.error(\"Failed to establish connection with libvirt: %s\", e)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"def raise_nodata_if_unsupported(method):"},{"line_number":143,"context_line":"    def inner(in_self, instance, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7fd5c1b5_1c0affd0","line":140,"updated":"2023-12-15 12:04:20.000000000","message":"We should be handling the ImportError from L#115 here. Otherwise that will always result to stack trace (if we ever see it due to that tenacity wrap, I think we do as tenacity should not retry in the case this is raised and just reraise it to the caller).\n\nSame with the tenacity RetryError handling which was removed between PS 3 and 4. Even if we don\u0027t want to have that same logic killing the service, we do know that the retry limits will be reached in some cases and should not let that fail uncontrollably. I\u0027m actually not sure if we ever receive the libvirt error itself due to the tenacity wrapping of that retry_on_connection_failure wrap unless it\u0027s something else than in the retry domain.","commit_id":"95868ebb1e72d7a645557416e6399eba266a20fa"}]}
