)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"84d6b4e612c30a7aa969f47080fef892f003957d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"50e99770_261c7b4e","updated":"2023-08-07 12:08:38.000000000","message":"I tested this patch on my devstack, it looks like 2-3 minutes after removing /var/run/octavia/status.sock and restarting devstack@o-api, running `openstack loadbalancer provider list` does fail as mentioned in the story.\n\nI see in the API logs the error message as required. Afterwards I can run `openstack loadbalancer provider list` and I see ovn as one of the available providers, even though /var/run/octavia/status.sock does not exist.\n\nAfter restarting all Octavia services I do have that socket again.\n\nI think it is ok, looks good to me","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f72dfd2bdb0147f3fc3c3e28edcda1137e7e50f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e3ddbc7f_6e2311ea","updated":"2024-02-05 22:00:06.000000000","message":"Please let me know if there\u0027s anything else I can do to move this forward, thanks!","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6917c6abf0cf402f68e15e92292055c389fe5b91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ea11be29_4ff8b736","updated":"2024-01-10 15:17:05.000000000","message":"recheck to get new logs\n\nping reviewers :)","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"247bdd7aa47e154cb96cee9fdaf0245a08c463c2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6772a427_07ac65aa","in_reply_to":"b21410e8_e528ecae","updated":"2024-02-06 08:37:22.000000000","message":"Thanks for the heads up Brian, I\u0027m going to test it (and all the possible corner cases)","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"2977a768fcc2674b8a5df6834802e26ad1f7751b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b21410e8_e528ecae","in_reply_to":"e3ddbc7f_6e2311ea","updated":"2024-02-06 08:24:22.000000000","message":"The best you can do is to join the upstream IRC meeting on Wednesdays and tell the guys there that this patch should be prioritized. Second thing you can do is to review other octavia patches yourself like for instance https://review.opendev.org/q/topic:%22mypy%22+repo:openstack/octavia.","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"70b58dddecec88a4fcd3879f1072463d79f5f525","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7cc71f35_989a5b37","updated":"2024-07-03 20:53:46.000000000","message":"Just rebased to master, still need to address comments.","commit_id":"da0bf0d39db584cf95518d8e2ad3b672cf043e7e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e4f2d375f0d04a52bdb83e3441d5e76a0ed4306","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1b935bd1_ba052cf2","updated":"2025-01-15 03:58:04.000000000","message":"I think we ned to take this farther.","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e1e179a5302a59fe89da7318088a25463f2bd63a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ccaa5715_d4413eab","updated":"2024-08-21 21:34:21.000000000","message":"The -tips failure seems to have nothing to do with this change, there is somehow an extra item in the returned dictionary:\n\n\u0027vnic_type\u0027: None,\n\nStrange.","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9c27283de93650e7db972dc568e7bd0a3bc8d72b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f241cf21_21ffd253","updated":"2024-10-08 15:03:01.000000000","message":"recheck to see if -tips issue fixed","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a5b46bd1dd001740a509ecf6c1b85360d31bd027","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"71befc98_afd784a4","updated":"2024-08-21 23:36:09.000000000","message":"the -tips issue is due to a upper-constraints change that is stuck waiting for review.","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b776abff3cc45094506b1032efbb3617f707b790","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5c4177f6_d9e4d0ba","in_reply_to":"71befc98_afd784a4","updated":"2024-08-22 13:46:09.000000000","message":"Thanks Michael, I\u0027ll try and test this some more while I wait for that.","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"59d7ea429ea27a3dd31155a3b884a3d0568a7446","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d43339b0_5bf23562","updated":"2025-08-07 16:31:28.000000000","message":"Just wondering if there were any comments on my latest PS. Thanks!","commit_id":"c6e067e50cc47429d5a9e70cf2f70317ac8b3bff"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b5974753862b688e1b0f0f587adb143203d85477","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"76bac6ac_273758f7","in_reply_to":"5accdee1_3de9aeb4","updated":"2025-08-21 21:11:46.000000000","message":"Hi Greg, thanks for taking a look. Since it was my first time using asyncio I probably got something wrong, I\u0027ll have to test it again locally.\n\nLooking at how this has changed over the year(s) I\u0027m now wondering if all this complexity is worth it. Is something like PS1 just as good to just get this fixed, or do we really need to disable and remove the broken driver? One of those the enemy of good is perfect type things.\n\nThanks, Brian","commit_id":"c6e067e50cc47429d5a9e70cf2f70317ac8b3bff"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"97f332f96404b2b49aa39de9eb0ef67933af0ccd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5accdee1_3de9aeb4","in_reply_to":"d43339b0_5bf23562","updated":"2025-08-19 11:44:51.000000000","message":"Hey, I\u0027m testing it in my devstack env.\nI\u0027m trying to reproduce an issue that we had here, Octavia was configured with ovn-provider but ovn was not available on the host, so it ended with an infinite number of messages like:\n\n```\nERROR ovsdbapp.backend.ovs_idl.idlutils [-] Unable to open stream to tcp:xx.xx.xx.xxx:xxxx to retrieve schema: Connection refused\n```\n\nduring the initialization of the ovn-provider and it blocked the Octavia API.\n\nso on my devstack, I updated octavia.conf to put an invalid port number in ovn.ovn_nb_connection.\n\nbut it doesn\u0027t seem to time out after 30sec, I\u0027m still stuck in an infinite loop or \"Connection refused\" messages.\nany ideas?","commit_id":"c6e067e50cc47429d5a9e70cf2f70317ac8b3bff"},{"author":{"_account_id":38360,"name":"Zachary Mark Raines","display_name":"Zachary Raines","email":"zachary.raines@canonical.com","username":"raineszm","status":"Sustaining Engineer @ Canonical"},"change_message_id":"eaf21ba40cc2b502ce63bb9a6fe3c3cbb45e7940","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"630ec40f_5e5a8320","updated":"2025-10-15 17:57:13.000000000","message":"Following discussion in the meeting this week (https://meetings.opendev.org/meetings/octavia/2025/octavia.2025-10-15-16.01.log.html) reverted to patchset 4. While it would be nice to be able to timeout plugins which hang on startup, due to the the nature of the python thread model it gets pretty involved to handle this well. \n\nIn particular, the issue that came up with patchset 6 are caused by a driver starting a new thread which loops forever. The abstractions provided by asyncio are only able to request cancellation of the task, which is on the driver to handle, and the abstractions provided by python threads and futures are not aware of the other thread. It would be possible to handle this by spawning a new process but that is unlikely to play well with the rest of octavia.\n\nWith all that in mind, the current patchset addresses drivers erroring on start without getting into the weeds about the above issues.","commit_id":"592564392f9ad97de05cb8ee26538ff1551d11c0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"fb7f7ac698fe4b8786236cb38121e2b105a7b23c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"53899d2a_7861faee","updated":"2025-11-19 16:09:37.000000000","message":"I think this is still an improvement, so moving forward with it","commit_id":"6fc1abb780a2fc1413d5b206cec4b033a638c3c4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"31008e4bc9a1b8cf60e2f48129957abd72a920eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"0ae5a8e2_28fe996b","updated":"2025-11-12 21:38:50.000000000","message":"What do others think?","commit_id":"6fc1abb780a2fc1413d5b206cec4b033a638c3c4"}],"octavia/api/app.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"cf3b2be668f81ac92da216a445f2736cc13345a1","unresolved":true,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            driver_factory.get_driver(provider)"},{"line_number":48,"context_line":"        except Exception:"},{"line_number":49,"context_line":"            LOG.exception(\"Cannot load driver \u0027%s\u0027.\", provider)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"186f2f43_4c3d985f","line":49,"updated":"2021-03-12 10:57:48.000000000","message":"Could we expand a bit more the log message to mention that the API service will continue without said missing/faulty provider driver and to check [api_settings]/enabled_provider_drivers in /etc/octavia/octavia.conf ?","commit_id":"8cdf12ee05d22aba5a223e794fffbc8cc305c81e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"13f67dccefbf201b6dfa96274b4ebff845e822b0","unresolved":true,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            driver_factory.get_driver(provider)"},{"line_number":48,"context_line":"        except Exception:"},{"line_number":49,"context_line":"            LOG.exception(\"Cannot load driver \u0027%s\u0027.\", provider)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ca17cf4e_07d86b4c","line":49,"in_reply_to":"186f2f43_4c3d985f","updated":"2021-03-22 23:46:32.000000000","message":"Yeah, we could either exit or remove the driver from the available list.\nOtherwise it\u0027s going to be a bunch of ERROR resources....","commit_id":"8cdf12ee05d22aba5a223e794fffbc8cc305c81e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e99ad77bbdc1497a26538d38ba4dc1a259444319","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            driver_factory.get_driver(provider)"},{"line_number":48,"context_line":"        except Exception:"},{"line_number":49,"context_line":"            LOG.exception(\"Cannot load driver \u0027%s\u0027.\", provider)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c25fdfc5_a26067e0","line":49,"in_reply_to":"ca17cf4e_07d86b4c","updated":"2023-08-04 20:01:01.000000000","message":"Done","commit_id":"8cdf12ee05d22aba5a223e794fffbc8cc305c81e"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"3eb020f8ebaff8ff0de0f4a736ab05d72a876f2f","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                          \"[api_settings]/enabled_provider_drivers in \""},{"line_number":53,"context_line":"                          \"octavia.conf for correctness.\", provider)"},{"line_number":54,"context_line":"            providers_to_remove.append(provider)"},{"line_number":55,"context_line":"    for provider in providers_to_remove:"},{"line_number":56,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"b889f7ed_c3525127","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":64},"updated":"2023-08-11 19:53:44.000000000","message":"You should check if you still have at least 1 left provider. If no provider is valid, octavia will fail anyways somewhere else, but would be nice to log it here and abort the program and make easier to detect.","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3501691e954d557e77a44f21cda32ad74ae0a25d","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                          \"octavia.conf for correctness.\", provider)"},{"line_number":54,"context_line":"            providers_to_remove.append(provider)"},{"line_number":55,"context_line":"    for provider in providers_to_remove:"},{"line_number":56,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"90c4ed5d_afc85378","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":51},"updated":"2024-02-06 08:49:06.000000000","message":"that doesn\u0027t seem to work as expected.\nI guess the intend is to remove the entries from the loadbalancer provider list API call, but I still see the \"broken\" drivers there (CONF is probably a different object/in a different context)\nSo I don\u0027t know if we should keep it like that, or just do nothing with the provider list","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"62d5b8341d1e24927285e9324d8ad012d0172aed","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                          \"[api_settings]/enabled_provider_drivers in \""},{"line_number":53,"context_line":"                          \"octavia.conf for correctness.\", provider)"},{"line_number":54,"context_line":"            providers_to_remove.append(provider)"},{"line_number":55,"context_line":"    for provider in providers_to_remove:"},{"line_number":56,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"2a1f0598_d75bcf3d","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":64},"in_reply_to":"02682a6f_a93722bd","updated":"2023-10-27 20:11:57.000000000","message":"Also, just to note, that the amphora driver will always be in this list, and I can\u0027t imagine that failing to initialize. And looking at the code it seems to support having this as {} - octavia isn\u0027t very useful but should not crash.","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"5ea22a2a17b9f3fa16cda1dfa05ec483e5049458","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                          \"[api_settings]/enabled_provider_drivers in \""},{"line_number":53,"context_line":"                          \"octavia.conf for correctness.\", provider)"},{"line_number":54,"context_line":"            providers_to_remove.append(provider)"},{"line_number":55,"context_line":"    for provider in providers_to_remove:"},{"line_number":56,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"cee1b02d_8b1798c4","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":64},"in_reply_to":"2a1f0598_d75bcf3d","updated":"2023-11-03 14:18:45.000000000","message":"Makes sense.","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3c271a0dc2ae04c4bcc0cb540ddf5a0e27de39e2","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                          \"octavia.conf for correctness.\", provider)"},{"line_number":54,"context_line":"            providers_to_remove.append(provider)"},{"line_number":55,"context_line":"    for provider in providers_to_remove:"},{"line_number":56,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa806f3f_255922db","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":51},"in_reply_to":"90c4ed5d_afc85378","updated":"2024-02-07 22:09:33.000000000","message":"Hi Gregory - so you mean the code over in ProviderController class? That is the only other place I really see using enabled_provider_drivers.\n\nIs it enough to just catch the failure here but still leave the entry in the provider list? i.e. trying to use it will just fail?","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9ca889b3cf0fc81b6f72da7d3ad6a85ea0a8d735","unresolved":true,"context_lines":[{"line_number":52,"context_line":"                          \"[api_settings]/enabled_provider_drivers in \""},{"line_number":53,"context_line":"                          \"octavia.conf for correctness.\", provider)"},{"line_number":54,"context_line":"            providers_to_remove.append(provider)"},{"line_number":55,"context_line":"    for provider in providers_to_remove:"},{"line_number":56,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"02682a6f_a93722bd","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":64},"in_reply_to":"b889f7ed_c3525127","updated":"2023-08-25 22:05:21.000000000","message":"I guess I thought the list could technically be empty, but I\u0027ve never tried it.","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":35648,"name":"Alan Baghumian","display_name":"Alan Baghumian","email":"alan.baghumian@canonical.com","username":"alanbach"},"change_message_id":"ee1489dce4577dc8f55683189822a121ffc96c29","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                          \"octavia.conf for correctness.\", provider)"},{"line_number":54,"context_line":"            providers_to_remove.append(provider)"},{"line_number":55,"context_line":"    for provider in providers_to_remove:"},{"line_number":56,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def setup_app(pecan_config\u003dNone, debug\u003dFalse, argv\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"4e6e077d_0ced7c7e","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":51},"in_reply_to":"fa806f3f_255922db","updated":"2024-12-16 21:36:58.000000000","message":"Hello @gthiemon@redhat.com @tweining@redhat.com Would you please do another review on this when you get a chance? Much appreciated!","commit_id":"285c0ea74de75429a56dbbbce9c8d00b82a3a95c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e4f2d375f0d04a52bdb83e3441d5e76a0ed4306","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    enabled_providers \u003d driver_factory.get_providers()"},{"line_number":48,"context_line":"    for provider in enabled_providers:"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            driver_factory.get_driver(provider)"},{"line_number":51,"context_line":"        except Exception:"},{"line_number":52,"context_line":"            LOG.exception(\"Cannot load driver \u0027%s\u0027, will remove from \""},{"line_number":53,"context_line":"                          \"service. Please check \""}],"source_content_type":"text/x-python","patch_set":5,"id":"4ace4242_a3b9e76e","line":50,"updated":"2025-01-15 03:58:04.000000000","message":"I think we need a timeout wrapper on this. Multiple times we have seen the OVN provider go into an endless loop and hang the API startup.\nOr we can add that to the driver factory. Either way, we need to protect ourselves from buggy providers.","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ce19b8637fc5295a9066bc3a0cb875e9bc2813d0","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    enabled_providers \u003d driver_factory.get_providers()"},{"line_number":48,"context_line":"    for provider in enabled_providers:"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            driver_factory.get_driver(provider)"},{"line_number":51,"context_line":"        except Exception:"},{"line_number":52,"context_line":"            LOG.exception(\"Cannot load driver \u0027%s\u0027, will remove from \""},{"line_number":53,"context_line":"                          \"service. Please check \""}],"source_content_type":"text/x-python","patch_set":5,"id":"978605f2_a7fb544a","line":50,"in_reply_to":"4512dc2c_eff0d385","updated":"2025-03-05 21:26:27.000000000","message":"Just pinging again to see if there is a reference I can follow for this.","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"81c1c3b857c02f1ef01411b59562cd60a4987184","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    enabled_providers \u003d driver_factory.get_providers()"},{"line_number":48,"context_line":"    for provider in enabled_providers:"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            driver_factory.get_driver(provider)"},{"line_number":51,"context_line":"        except Exception:"},{"line_number":52,"context_line":"            LOG.exception(\"Cannot load driver \u0027%s\u0027, will remove from \""},{"line_number":53,"context_line":"                          \"service. Please check \""}],"source_content_type":"text/x-python","patch_set":5,"id":"4512dc2c_eff0d385","line":50,"in_reply_to":"4ace4242_a3b9e76e","updated":"2025-01-21 16:35:24.000000000","message":"Hi Michael - do you have an example of somewhere in the code this is done? I\u0027d rather just copy/paste than reinvent the wheel. Thanks.","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c1e473c35a2728a36a766fd83dd75d80c858186d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    enabled_providers \u003d driver_factory.get_providers()"},{"line_number":48,"context_line":"    for provider in enabled_providers:"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            driver_factory.get_driver(provider)"},{"line_number":51,"context_line":"        except Exception:"},{"line_number":52,"context_line":"            LOG.exception(\"Cannot load driver \u0027%s\u0027, will remove from \""},{"line_number":53,"context_line":"                          \"service. Please check \""}],"source_content_type":"text/x-python","patch_set":5,"id":"3c4c59ca_7f152f24","line":50,"in_reply_to":"978605f2_a7fb544a","updated":"2025-07-13 20:28:36.000000000","message":"Done","commit_id":"c018a602f5bd7e6879d7c4e9fffbcef4e61bda21"}],"octavia/api/drivers/driver_factory.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"31008e4bc9a1b8cf60e2f48129957abd72a920eb","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    # Presumably these provider drivers failed to load, remove so they do not"},{"line_number":55,"context_line":"    # show up in the available list"},{"line_number":56,"context_line":"    for provider in providers:"},{"line_number":57,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def get_providers():"}],"source_content_type":"text/x-python","patch_set":10,"id":"bdce4bfb_a548962b","line":57,"updated":"2025-11-12 21:38:50.000000000","message":"There is a bug here, but I\u0027m not sure it matters as much.\nThe wsgi runners (mod_wsgi, uwsgi, etc.) are multi-process so there is a chance that one process would fail to load the provider, but the other would be successful. This could would only remove the provider from one processes\u0027s config causing repeated calls to return different results.\nThis can be worked around with a multiprocessing manager, but I\u0027m not sure it\u0027s worth the effort. This is incrementally better than the current code.","commit_id":"6fc1abb780a2fc1413d5b206cec4b033a638c3c4"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"d3cf689c93617eb92a09501ef44a633494f228f1","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    # Presumably these provider drivers failed to load, remove so they do not"},{"line_number":55,"context_line":"    # show up in the available list"},{"line_number":56,"context_line":"    for provider in providers:"},{"line_number":57,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def get_providers():"}],"source_content_type":"text/x-python","patch_set":10,"id":"f7690273_c423eeb2","line":57,"in_reply_to":"5b762bed_6358774a","updated":"2025-11-14 06:41:59.000000000","message":"I think the patch is ok, it improves the current behavior.\nMaybe we can do better in a followup patch but that would add a lot of complexity in the code if we want to do inter-process communication there.","commit_id":"6fc1abb780a2fc1413d5b206cec4b033a638c3c4"},{"author":{"_account_id":38360,"name":"Zachary Mark Raines","display_name":"Zachary Raines","email":"zachary.raines@canonical.com","username":"raineszm","status":"Sustaining Engineer @ Canonical"},"change_message_id":"2b49b4dafb2f7f15a6dc525954854182053d0a95","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    # Presumably these provider drivers failed to load, remove so they do not"},{"line_number":55,"context_line":"    # show up in the available list"},{"line_number":56,"context_line":"    for provider in providers:"},{"line_number":57,"context_line":"        CONF.api_settings.enabled_provider_drivers.pop(provider)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def get_providers():"}],"source_content_type":"text/x-python","patch_set":10,"id":"5b762bed_6358774a","line":57,"in_reply_to":"bdce4bfb_a548962b","updated":"2025-11-13 22:38:04.000000000","message":"That’s a fair point. For driver issues that are consistent it shouldn’t be a problem since every process would fail in the same way, but I can see there being an issue with an intermittent or stochastic failure. \n\nMy inclination is that this resolves the initial issue of everything failing because of an issue in a single driver simply, while as you said being incrementally better than the current code.","commit_id":"6fc1abb780a2fc1413d5b206cec4b033a638c3c4"}]}
