)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4dc614e5d0f02aeb6335e2a5204852e0f8387567","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"da73d4c5_5fe6b85b","updated":"2025-05-13 10:55:23.000000000","message":"check experimental","commit_id":"b08f2cb366402ceea8b194482ccb3887f60d3c47"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"23ecd851f68f95c3d9e757b50673d03a3912978e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"ab5153e4_62611bc9","updated":"2025-05-15 18:41:10.000000000","message":"Just making a note; I had to do a similar requirements change for networking-baremetal.","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e4e3e3966ef710f76d91807ea7d56115417c59e5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"0e31556a_899973da","updated":"2025-05-14 09:30:23.000000000","message":"recheck new oslo.service PS pushed","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6d0a9e3765f6c60352855d2aac6a539bcbc806a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"228beb6c_5d142868","updated":"2025-05-14 12:38:43.000000000","message":"recheck new oslo.service PS pushed","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da2069161a1e960a3c72fefebf329474c8b017bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"15d3edae_22fe5109","updated":"2025-06-05 18:19:48.000000000","message":"Looks good, just had some nits","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"}],"doc/source/eventlet_deprecation/index.rst":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da2069161a1e960a3c72fefebf329474c8b017bc","unresolved":true,"context_lines":[{"line_number":91,"context_line":"The L3 agent now uses the ``oslo_service.backend.BackendType.THREADING``"},{"line_number":92,"context_line":"backend, that doesn\u0027t import eventlet. The HA flavor replaces the"},{"line_number":93,"context_line":"``UnixDomainWSGIServer`` with the ``UnixDomainWSGIThreadServer``. This new"},{"line_number":94,"context_line":"Unix socket WSGI server is bases in ``socketserver.ThreadingUnixStreamServer``"},{"line_number":95,"context_line":"and doesn\u0027t use ``eventlet``."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Several functional and fullstack tests have been skipped until ``eventlet``"}],"source_content_type":"text/x-rst","patch_set":25,"id":"f2a76443_8ae512e4","line":94,"range":{"start_line":94,"start_character":27,"end_line":94,"end_character":35},"updated":"2025-06-05 18:19:48.000000000","message":"s/based on","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"316c88c57b5785473e498d8cf09e014b87f8da7e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"The L3 agent now uses the ``oslo_service.backend.BackendType.THREADING``"},{"line_number":92,"context_line":"backend, that doesn\u0027t import eventlet. The HA flavor replaces the"},{"line_number":93,"context_line":"``UnixDomainWSGIServer`` with the ``UnixDomainWSGIThreadServer``. This new"},{"line_number":94,"context_line":"Unix socket WSGI server is bases in ``socketserver.ThreadingUnixStreamServer``"},{"line_number":95,"context_line":"and doesn\u0027t use ``eventlet``."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Several functional and fullstack tests have been skipped until ``eventlet``"}],"source_content_type":"text/x-rst","patch_set":25,"id":"396562e6_f32fa753","line":94,"range":{"start_line":94,"start_character":27,"end_line":94,"end_character":35},"in_reply_to":"f2a76443_8ae512e4","updated":"2025-06-09 09:16:26.000000000","message":"Done","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da2069161a1e960a3c72fefebf329474c8b017bc","unresolved":true,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Several functional and fullstack tests have been skipped until ``eventlet``"},{"line_number":98,"context_line":"has been completely removed from the repository and the test frameworks. The"},{"line_number":99,"context_line":"WSGI server cannot be spawned in a ``eventlet`` patched environment. The thread"},{"line_number":100,"context_line":"that waits for new messages is a blocking function. In a kernel threads"},{"line_number":101,"context_line":"environment, where the threads are preemptive, it is not needed to manually"},{"line_number":102,"context_line":"yield the Python GIL; on the contrary, in a ``eventlet`` environment, the"}],"source_content_type":"text/x-rst","patch_set":25,"id":"e59623bf_5e88de45","line":99,"range":{"start_line":99,"start_character":33,"end_line":99,"end_character":34},"updated":"2025-06-05 18:19:48.000000000","message":"nit: s/an","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"316c88c57b5785473e498d8cf09e014b87f8da7e","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Several functional and fullstack tests have been skipped until ``eventlet``"},{"line_number":98,"context_line":"has been completely removed from the repository and the test frameworks. The"},{"line_number":99,"context_line":"WSGI server cannot be spawned in a ``eventlet`` patched environment. The thread"},{"line_number":100,"context_line":"that waits for new messages is a blocking function. In a kernel threads"},{"line_number":101,"context_line":"environment, where the threads are preemptive, it is not needed to manually"},{"line_number":102,"context_line":"yield the Python GIL; on the contrary, in a ``eventlet`` environment, the"}],"source_content_type":"text/x-rst","patch_set":25,"id":"dc265068_3fa0846a","line":99,"range":{"start_line":99,"start_character":33,"end_line":99,"end_character":34},"in_reply_to":"e59623bf_5e88de45","updated":"2025-06-09 09:16:26.000000000","message":"Done","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da2069161a1e960a3c72fefebf329474c8b017bc","unresolved":true,"context_lines":[{"line_number":99,"context_line":"WSGI server cannot be spawned in a ``eventlet`` patched environment. The thread"},{"line_number":100,"context_line":"that waits for new messages is a blocking function. In a kernel threads"},{"line_number":101,"context_line":"environment, where the threads are preemptive, it is not needed to manually"},{"line_number":102,"context_line":"yield the Python GIL; on the contrary, in a ``eventlet`` environment, the"},{"line_number":103,"context_line":"threads must yield the executor to the next one."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"1f7c87f4_648caf24","line":102,"range":{"start_line":102,"start_character":42,"end_line":102,"end_character":43},"updated":"2025-06-05 18:19:48.000000000","message":"nit: s/an","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"316c88c57b5785473e498d8cf09e014b87f8da7e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"WSGI server cannot be spawned in a ``eventlet`` patched environment. The thread"},{"line_number":100,"context_line":"that waits for new messages is a blocking function. In a kernel threads"},{"line_number":101,"context_line":"environment, where the threads are preemptive, it is not needed to manually"},{"line_number":102,"context_line":"yield the Python GIL; on the contrary, in a ``eventlet`` environment, the"},{"line_number":103,"context_line":"threads must yield the executor to the next one."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"68ebaddc_fd4a0d2e","line":102,"range":{"start_line":102,"start_character":42,"end_line":102,"end_character":43},"in_reply_to":"1f7c87f4_648caf24","updated":"2025-06-09 09:16:26.000000000","message":"Done","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a942e1195c1f20d4f58e43b7d39de66555e52203","unresolved":true,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        self._check_ha_router_process_status()"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        super().init_host()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def check_config(self):"},{"line_number":337,"context_line":"        if self.conf.cleanup_on_shutdown:"}],"source_content_type":"text/x-python","patch_set":13,"id":"68c19ed0_fac5089c","line":334,"range":{"start_line":334,"start_character":0,"end_line":334,"end_character":2},"updated":"2025-05-12 11:56:36.000000000","message":"To delete, repeated.","commit_id":"cb2f602dc1cb5d5b8616bca3a2990f7c3d0bfb97"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7999c07cb76c2228f0fb1aac76bd480733f5b9e8","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        self._check_ha_router_process_status()"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        super().init_host()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def check_config(self):"},{"line_number":337,"context_line":"        if self.conf.cleanup_on_shutdown:"}],"source_content_type":"text/x-python","patch_set":13,"id":"14c8d2d8_eb80d8c6","line":334,"range":{"start_line":334,"start_character":0,"end_line":334,"end_character":2},"in_reply_to":"68c19ed0_fac5089c","updated":"2025-05-13 10:57:02.000000000","message":"Done","commit_id":"cb2f602dc1cb5d5b8616bca3a2990f7c3d0bfb97"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da2069161a1e960a3c72fefebf329474c8b017bc","unresolved":true,"context_lines":[{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    def after_start(self):"},{"line_number":1011,"context_line":"        _loop \u003d threading.Thread(target\u003dself._process_routers_loop)"},{"line_number":1012,"context_line":"        _loop.start()"},{"line_number":1013,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":1014,"context_line":"        # Do the report state before we do the first full sync."},{"line_number":1015,"context_line":"        self._report_state()"}],"source_content_type":"text/x-python","patch_set":25,"id":"5b2dc320_1346264d","line":1012,"updated":"2025-06-05 18:19:48.000000000","message":"Since we never use _loop can this just be a single line:\n\nthreading.Thread(target\u003dself._process_routers_loop).start()","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"316c88c57b5785473e498d8cf09e014b87f8da7e","unresolved":false,"context_lines":[{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    def after_start(self):"},{"line_number":1011,"context_line":"        _loop \u003d threading.Thread(target\u003dself._process_routers_loop)"},{"line_number":1012,"context_line":"        _loop.start()"},{"line_number":1013,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":1014,"context_line":"        # Do the report state before we do the first full sync."},{"line_number":1015,"context_line":"        self._report_state()"}],"source_content_type":"text/x-python","patch_set":25,"id":"cec7c039_36e09d5b","line":1012,"in_reply_to":"5b2dc320_1346264d","updated":"2025-06-09 09:16:26.000000000","message":"Done","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"}],"neutron/tests/functional/agent/l3/test_keepalived_state_change.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf8ea2a3ec1ac7aa5a22f16fdfbf2cb006a5d2bf","unresolved":true,"context_lines":[{"line_number":54,"context_line":"            default_cmd_callback\u003dself._callback, run_as_root\u003dTrue,"},{"line_number":55,"context_line":"            pid_file\u003dself.pid_file)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # NOTE(ralonsoh): this section must be refactored once eventlet is"},{"line_number":58,"context_line":"        # removed. ``UnixDomainWSGIServer`` is no longer used."},{"line_number":59,"context_line":"        # server \u003d linux_utils.UnixDomainWSGIServer("},{"line_number":60,"context_line":"        #     \u0027neutron-keepalived-state-change\u0027, num_threads\u003d1)"}],"source_content_type":"text/x-python","patch_set":26,"id":"6a761ef5_17f484a5","line":57,"range":{"start_line":57,"start_character":10,"end_line":57,"end_character":14},"updated":"2025-06-11 07:22:56.000000000","message":"nitty nit: shouldn\u0027t be TODO instead of NOTE?","commit_id":"5292b13bbdd4e00dadbbef72400b737aab3dd0ff"}],"neutron/tests/functional/agent/l3/test_metadata_proxy.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"da2069161a1e960a3c72fefebf329474c8b017bc","unresolved":true,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _create_metadata_fake_server(self, status):"},{"line_number":73,"context_line":"        # NOTE(ralonsoh): this section must be refactored once eventlet is"},{"line_number":74,"context_line":"        # removed and eventlet removed. ``UnixDomainWSGIServer`` is no longer"},{"line_number":75,"context_line":"        # used."},{"line_number":76,"context_line":"        # server \u003d utils.UnixDomainWSGIServer(\u0027metadata-fake-server\u0027)"},{"line_number":77,"context_line":"        # self.addCleanup(server.stop)"}],"source_content_type":"text/x-python","patch_set":25,"id":"a38eaebd_9596b50a","line":74,"range":{"start_line":74,"start_character":18,"end_line":74,"end_character":38},"updated":"2025-06-05 18:19:48.000000000","message":"nit: extra words","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"316c88c57b5785473e498d8cf09e014b87f8da7e","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _create_metadata_fake_server(self, status):"},{"line_number":73,"context_line":"        # NOTE(ralonsoh): this section must be refactored once eventlet is"},{"line_number":74,"context_line":"        # removed and eventlet removed. ``UnixDomainWSGIServer`` is no longer"},{"line_number":75,"context_line":"        # used."},{"line_number":76,"context_line":"        # server \u003d utils.UnixDomainWSGIServer(\u0027metadata-fake-server\u0027)"},{"line_number":77,"context_line":"        # self.addCleanup(server.stop)"}],"source_content_type":"text/x-python","patch_set":25,"id":"404a4056_3588034f","line":74,"range":{"start_line":74,"start_character":18,"end_line":74,"end_character":38},"in_reply_to":"a38eaebd_9596b50a","updated":"2025-06-09 09:16:26.000000000","message":"Done","commit_id":"7fbaebbcb406d911700953f0ed2a908f1efd3cef"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf8ea2a3ec1ac7aa5a22f16fdfbf2cb006a5d2bf","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        self.skipTest(\u0027Skip test until eventlet is removed\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _create_metadata_fake_server(self, status):"},{"line_number":73,"context_line":"        # NOTE(ralonsoh): this section must be refactored once eventlet is"},{"line_number":74,"context_line":"        # removed. ``UnixDomainWSGIServer`` is no longer used."},{"line_number":75,"context_line":"        # server \u003d utils.UnixDomainWSGIServer(\u0027metadata-fake-server\u0027)"},{"line_number":76,"context_line":"        # self.addCleanup(server.stop)"}],"source_content_type":"text/x-python","patch_set":26,"id":"9e7b18c7_101a9ee4","line":73,"updated":"2025-06-11 07:22:56.000000000","message":"same","commit_id":"5292b13bbdd4e00dadbbef72400b737aab3dd0ff"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cf8ea2a3ec1ac7aa5a22f16fdfbf2cb006a5d2bf","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                os.path.dirname(self.agent.conf.metadata_proxy_socket), 0o555))"},{"line_number":84,"context_line":"        # server.start(MetadataFakeProxyHandler(status),"},{"line_number":85,"context_line":"        #              self.agent.conf.metadata_proxy_socket,"},{"line_number":86,"context_line":"        #              workers\u003d0, backlog\u003d4096, mode\u003dself.SOCKET_MODE)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_command(self, machine, ipv6\u003dFalse, interface\u003dNone):"},{"line_number":89,"context_line":"        if ipv6:"}],"source_content_type":"text/x-python","patch_set":26,"id":"ec982234_e3057295","line":86,"updated":"2025-06-11 07:22:56.000000000","message":"do we need those blocks of commented code to be still here?","commit_id":"5292b13bbdd4e00dadbbef72400b737aab3dd0ff"}],"requirements.txt":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"8c9bf9e85b20186d8a5c2cbdf1f7fa6efdac690a","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"# only temporary, oslo.service should pull this in with"},{"line_number":61,"context_line":"# the threading backend"},{"line_number":62,"context_line":"cotyledon\u003d\u003d\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":17,"id":"24bcd0cd_157b199d","line":62,"updated":"2025-05-14 08:34:44.000000000","message":"Just to be sure to understand, why are you doing this?\noslo.service rely on the same version of cotyledon [1] and that\u0027s also the latest version of cotyledon on pypi [2].\n\nIs it because oslo.service is new backend is not released and so not installed in a standard way?\n\n[1] https://review.opendev.org/c/openstack/oslo.service/+/945720/29/setup.cfg\n[2] https://pypi.org/project/cotyledon/#history","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"97011ce82e67691f34a08e24e481c297db3db6a8","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"# only temporary, oslo.service should pull this in with"},{"line_number":61,"context_line":"# the threading backend"},{"line_number":62,"context_line":"cotyledon\u003d\u003d\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":17,"id":"4bda97ae_2d62b775","line":62,"in_reply_to":"24bcd0cd_157b199d","updated":"2025-05-14 08:36:17.000000000","message":"I suppose this is due to, but please let me know if I\u0027m wrong https://zuul.opendev.org/t/openstack/build/2bc376fb60704dfc9230d96643455c3f/log/controller/logs/screen-q-l3.txt#20","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f43ed3ab371e5a4b54bd61072596e598be18824a","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"# only temporary, oslo.service should pull this in with"},{"line_number":61,"context_line":"# the threading backend"},{"line_number":62,"context_line":"cotyledon\u003d\u003d\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":17,"id":"c3472655_e48c82e9","line":62,"in_reply_to":"4bda97ae_2d62b775","updated":"2025-05-14 09:32:32.000000000","message":"Exactly, that was the reason. gibi suggested (in the eventlet channel) to add this requirement.","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"23ecd851f68f95c3d9e757b50673d03a3912978e","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"# only temporary, oslo.service should pull this in with"},{"line_number":61,"context_line":"# the threading backend"},{"line_number":62,"context_line":"cotyledon\u003d\u003d\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":17,"id":"e5ecd2ae_7e497ea1","line":62,"in_reply_to":"c3472655_e48c82e9","updated":"2025-05-15 18:41:10.000000000","message":"The package[optional] stuff is really not appropriate for libraries, IMO, because I don\u0027t believe we can express that dependency in a meaningful way in requirements. If we can, someone let me know how 😄","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9db4057cbf08dac36c9100add6349ee6e6e06ff8","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"# only temporary, oslo.service should pull this in with"},{"line_number":61,"context_line":"# the threading backend"},{"line_number":62,"context_line":"cotyledon\u003d\u003d\u003d2.0.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":17,"id":"f70ae7bc_832b1ad6","line":62,"in_reply_to":"e5ecd2ae_7e497ea1","updated":"2025-05-27 05:56:05.000000000","message":"I have the same opinion. If this library is needed by oslo.services, I would always install it, regardless of what backend is used. Right now, we don\u0027t have a way to install this conditional dependency.","commit_id":"336752d2b72ee11b4e9d46cb49e9f592c6ca3272"}]}
