)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fdb4337fd14c7584383f48a4a74f4fb915899da5","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch replaces the usage of ``eventlet.spawn_n`` in the L3"},{"line_number":10,"context_line":"agent code, explicitly creating a ``threading.Thread`` instead."},{"line_number":11,"context_line":"This code must be compatiblwe with and without monkey patching"},{"line_number":12,"context_line":"the kernel libraries, in particular ``threading``."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partial-Bug: #2087943"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"067be42b_0a7cbaf0","line":11,"updated":"2025-01-08 14:47:06.000000000","message":"compatible","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"49860cf80843027705632656226d77a04c676ac0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch replaces the usage of ``eventlet.spawn_n`` in the L3"},{"line_number":10,"context_line":"agent code, explicitly creating a ``threading.Thread`` instead."},{"line_number":11,"context_line":"This code must be compatiblwe with and without monkey patching"},{"line_number":12,"context_line":"the kernel libraries, in particular ``threading``."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partial-Bug: #2087943"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"19320f39_2e9deed0","line":11,"in_reply_to":"067be42b_0a7cbaf0","updated":"2025-01-13 08:24:02.000000000","message":"Done","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fdb4337fd14c7584383f48a4a74f4fb915899da5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"eb4e5047_75d2e69d","updated":"2025-01-08 14:47:06.000000000","message":"I may be clueless, happy to learn.","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fc2aabc33543ac4a638ccfe95492ea4e998ed731","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"51cfc6b5_d570e73f","updated":"2025-01-07 11:23:04.000000000","message":"recheck neutron-functional","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f6f5ed242b98a48f79679596af26fd2622678718","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2ea589f9_913e59e3","updated":"2025-01-13 15:53:05.000000000","message":"This looks fine assuming we are Ok with the parent. I know there were a couple of comments on that one so won\u0027t vote on this now.","commit_id":"c9b12ce58bb79ab8491b92d92200c5a044fc4475"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f572d5b288a2ea50416ea627a0be53727ade0906","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"19b892b2_9f4d29ff","updated":"2025-04-22 06:37:51.000000000","message":"recheck parent patch","commit_id":"d6baf954f38563743afa008269d4bad7c2a1103e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f91d809edabd6590ba28fc2e7332d2d336251ba1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"2c4959db_61023876","updated":"2025-04-21 09:18:53.000000000","message":"recheck parent patch","commit_id":"d6baf954f38563743afa008269d4bad7c2a1103e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7400fc71120df66dfeba6c8cab6ceae444caab45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"c8c6b19e_8aa65bfa","updated":"2025-04-22 14:58:47.000000000","message":"recheck unrelated neutron-functional","commit_id":"d6baf954f38563743afa008269d4bad7c2a1103e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"278e0e9e1a35623a4ca2bb7c33c8dc348f1c8337","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e26959d7_033ab44f","updated":"2025-04-22 09:51:11.000000000","message":"recheck unrelated neutron.tests.fullstack.test_local_ip.LocalIPTestCase","commit_id":"d6baf954f38563743afa008269d4bad7c2a1103e"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"864e6f21992a3b2643a356742ba4d60a84f591bb","unresolved":true,"context_lines":[{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"    # NOTE(kevinbenton): this is set to 1 second because the actual interval"},{"line_number":852,"context_line":"    # is controlled by a FixedIntervalLoopingCall in neutron/service.py that"}],"source_content_type":"text/x-python","patch_set":1,"id":"c8a0eb44_5607676d","line":849,"updated":"2025-01-05 19:00:12.000000000","message":"Why do you join here?","commit_id":"7f4c2fc0334c685f940a683a065417876a50ba37"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7ab2002b8072eb9f9c68b144482decfbc1caf330","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"    # NOTE(kevinbenton): this is set to 1 second because the actual interval"},{"line_number":852,"context_line":"    # is controlled by a FixedIntervalLoopingCall in neutron/service.py that"}],"source_content_type":"text/x-python","patch_set":1,"id":"11b77d68_303f3740","line":849,"in_reply_to":"aaa76ec2_cd924fd0","updated":"2025-01-07 09:34:18.000000000","message":"Oh I see the pool size. thank you.","commit_id":"7f4c2fc0334c685f940a683a065417876a50ba37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"31bd5d75f945ac829311d6999f5452199e95a565","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"    # NOTE(kevinbenton): this is set to 1 second because the actual interval"},{"line_number":852,"context_line":"    # is controlled by a FixedIntervalLoopingCall in neutron/service.py that"}],"source_content_type":"text/x-python","patch_set":1,"id":"aaa76ec2_cd924fd0","line":849,"in_reply_to":"c8a0eb44_5607676d","updated":"2025-01-07 08:55:57.000000000","message":"The method ``after_start`` creates a thread to execute this method ``_process_routers_loop``. This method creates a second thread to run the ``_process_update`` method, but now we are creating just one thread. Before executing another thread running ``_process_update``, we just wait for the finalization of the previous execution.","commit_id":"7f4c2fc0334c685f940a683a065417876a50ba37"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fdb4337fd14c7584383f48a4a74f4fb915899da5","unresolved":true,"context_lines":[{"line_number":322,"context_line":"            self.driver,"},{"line_number":323,"context_line":"            self.metadata_driver)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # L3 agent router processing green pool"},{"line_number":326,"context_line":"        self._queue \u003d queue.ResourceProcessingQueue()"},{"line_number":327,"context_line":"        super().__init__(host\u003dself.conf.host)"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7521c200_57673ebf","line":325,"updated":"2025-01-08 14:47:06.000000000","message":"green pool?","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"49860cf80843027705632656226d77a04c676ac0","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            self.driver,"},{"line_number":323,"context_line":"            self.metadata_driver)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # L3 agent router processing green pool"},{"line_number":326,"context_line":"        self._queue \u003d queue.ResourceProcessingQueue()"},{"line_number":327,"context_line":"        super().__init__(host\u003dself.conf.host)"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"988e909d_e3d6ecf7","line":325,"in_reply_to":"7521c200_57673ebf","updated":"2025-01-13 08:24:02.000000000","message":"Right, not anymore.","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fdb4337fd14c7584383f48a4a74f4fb915899da5","unresolved":true,"context_lines":[{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"    # NOTE(kevinbenton): this is set to 1 second because the actual interval"},{"line_number":852,"context_line":"    # is controlled by a FixedIntervalLoopingCall in neutron/service.py that"}],"source_content_type":"text/x-python","patch_set":2,"id":"3af5539b_ee37f15a","line":849,"updated":"2025-01-08 14:47:06.000000000","message":"AFAIU before the change, it started as many green threads to process updates. Now it runs a single real thread at a time. (Because join holds the loop.) Is this a good idea? Didn\u0027t the _process_update handler pass control between green threads during execution before?","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"49860cf80843027705632656226d77a04c676ac0","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"    # NOTE(kevinbenton): this is set to 1 second because the actual interval"},{"line_number":852,"context_line":"    # is controlled by a FixedIntervalLoopingCall in neutron/service.py that"}],"source_content_type":"text/x-python","patch_set":2,"id":"ef1e41da_38b935a5","line":849,"in_reply_to":"3af5539b_ee37f15a","updated":"2025-01-13 08:24:02.000000000","message":"There is nothing in the L3 code to handle the green thread switching. This code was implemented in the belief that the threads were going to be executed in parallel [1]. There is no advantage on this, actually stopping a router processing to attend to other router update delays the first router processing while it was issued first.\n\nIn the parent patch [2] I\u0027ve already commented this and provided some figures with a real scenario. In any case, I\u0027ll provide a script to be executed with both source codes in order to prove that there is no benefit on multithreading.\n\n[1]https://review.opendev.org/c/openstack/neutron/+/78819\n[2]https://review.opendev.org/c/openstack/neutron/+/938406","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fdb4337fd14c7584383f48a4a74f4fb915899da5","unresolved":true,"context_lines":[{"line_number":958,"context_line":"        # can have L3NATAgentWithStateReport as its base class instead of"},{"line_number":959,"context_line":"        # L3NATAgent."},{"line_number":960,"context_line":"        loop_thread \u003d threading.Thread(target\u003dself._process_routers_loop)"},{"line_number":961,"context_line":"        loop_thread.start()"},{"line_number":962,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9222bbdd_9d5ad379","line":961,"updated":"2025-01-08 14:47:06.000000000","message":"shouldn\u0027t this thread be eventually harvested with a join somewhere?","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"49860cf80843027705632656226d77a04c676ac0","unresolved":false,"context_lines":[{"line_number":958,"context_line":"        # can have L3NATAgentWithStateReport as its base class instead of"},{"line_number":959,"context_line":"        # L3NATAgent."},{"line_number":960,"context_line":"        loop_thread \u003d threading.Thread(target\u003dself._process_routers_loop)"},{"line_number":961,"context_line":"        loop_thread.start()"},{"line_number":962,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"    def stop(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7b3491c1_452b0be4","line":961,"in_reply_to":"9222bbdd_9d5ad379","updated":"2025-01-13 08:24:02.000000000","message":"Yes, that should be on the stop() method of the agent.","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fdb4337fd14c7584383f48a4a74f4fb915899da5","unresolved":true,"context_lines":[{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    def after_start(self):"},{"line_number":1049,"context_line":"        loop_thread \u003d threading.Thread(target\u003dself._process_routers_loop)"},{"line_number":1050,"context_line":"        loop_thread.start()"},{"line_number":1051,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":1052,"context_line":"        # Do the report state before we do the first full sync."},{"line_number":1053,"context_line":"        self._report_state()"}],"source_content_type":"text/x-python","patch_set":2,"id":"8f5118a0_35150be6","line":1050,"updated":"2025-01-08 14:47:06.000000000","message":"ditto: who\u0027s harvesting?","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"49860cf80843027705632656226d77a04c676ac0","unresolved":false,"context_lines":[{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    def after_start(self):"},{"line_number":1049,"context_line":"        loop_thread \u003d threading.Thread(target\u003dself._process_routers_loop)"},{"line_number":1050,"context_line":"        loop_thread.start()"},{"line_number":1051,"context_line":"        LOG.info(\"L3 agent started\")"},{"line_number":1052,"context_line":"        # Do the report state before we do the first full sync."},{"line_number":1053,"context_line":"        self._report_state()"}],"source_content_type":"text/x-python","patch_set":2,"id":"e3fefdef_8a8b1d11","line":1050,"in_reply_to":"8f5118a0_35150be6","updated":"2025-01-13 08:24:02.000000000","message":"ditto.","commit_id":"b1d9c3e60a6ac4cedd9a0385a962a32d1d5c727b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"233808d6f3dcfbccdedf6d07854a6d9dc4b25cec","unresolved":true,"context_lines":[{"line_number":844,"context_line":"    def _process_routers_loop(self):"},{"line_number":845,"context_line":"        LOG.debug(\"Starting _process_routers_loop\")"},{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1c8faf7a_fddaec10","line":847,"range":{"start_line":847,"start_character":39,"end_line":847,"end_character":45},"updated":"2025-01-14 12:22:30.000000000","message":"shouldn\u0027t we limit number of treads we can spawn simultaneously? This may affect initial start when we have a lot of routers hosted on l3 agent.","commit_id":"c9b12ce58bb79ab8491b92d92200c5a044fc4475"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"22348794ee3a1be76cf2f93a4917444fcafd670f","unresolved":false,"context_lines":[{"line_number":844,"context_line":"    def _process_routers_loop(self):"},{"line_number":845,"context_line":"        LOG.debug(\"Starting _process_routers_loop\")"},{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"e1d5e889_cc55b029","line":847,"range":{"start_line":847,"start_character":39,"end_line":847,"end_character":45},"in_reply_to":"1c8faf7a_fddaec10","updated":"2025-01-14 12:24:01.000000000","message":"Since [1], that is a parent patch, the number of processing threads is limited to 1.\n\n[1]https://review.opendev.org/c/openstack/neutron/+/938406","commit_id":"c9b12ce58bb79ab8491b92d92200c5a044fc4475"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"349b137b5e487be6cf89ac6b637f0d34a4d67641","unresolved":false,"context_lines":[{"line_number":844,"context_line":"    def _process_routers_loop(self):"},{"line_number":845,"context_line":"        LOG.debug(\"Starting _process_routers_loop\")"},{"line_number":846,"context_line":"        while not self._exiting:"},{"line_number":847,"context_line":"            process_thread \u003d threading.Thread(target\u003dself._process_update)"},{"line_number":848,"context_line":"            process_thread.start()"},{"line_number":849,"context_line":"            process_thread.join()"},{"line_number":850,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"f9ca007e_afb28bcc","line":847,"range":{"start_line":847,"start_character":39,"end_line":847,"end_character":45},"in_reply_to":"e1d5e889_cc55b029","updated":"2025-02-05 21:49:13.000000000","message":"I\u0027ll keep the multi-threading processing in the L3 agent. Of course, I won\u0027t fix any future error derived for that.","commit_id":"c9b12ce58bb79ab8491b92d92200c5a044fc4475"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"56116d1dab37cf760a2c0b43262eb5163d4db814","unresolved":true,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        # L3 agent router processing green pool"},{"line_number":321,"context_line":"        self._pool_size \u003d ROUTER_PROCESS_GREENLET_MIN"},{"line_number":322,"context_line":"        self._pool \u003d utils.ResizableThreadPool(number_workers\u003dself._pool_size)"},{"line_number":323,"context_line":"        self._queue \u003d queue.ResourceProcessingQueue()"},{"line_number":324,"context_line":"        super().__init__(host\u003dself.conf.host)"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"594d0331_c8c587b6","line":322,"updated":"2025-03-26 17:16:46.000000000","message":"Why not using futuristic?\n\nhttps://review.opendev.org/c/openstack/neutron/+/940983/5/neutron/services/trunk/drivers/openvswitch/agent/ovsdb_handler.py","commit_id":"f248075574338bf31f5a2956939007a30782311e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6949a65bbb269ffaca90262efb48a34876f57b32","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        # L3 agent router processing green pool"},{"line_number":321,"context_line":"        self._pool_size \u003d ROUTER_PROCESS_GREENLET_MIN"},{"line_number":322,"context_line":"        self._pool \u003d utils.ResizableThreadPool(number_workers\u003dself._pool_size)"},{"line_number":323,"context_line":"        self._queue \u003d queue.ResourceProcessingQueue()"},{"line_number":324,"context_line":"        super().__init__(host\u003dself.conf.host)"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"893c4d3e_7e6c59ca","line":322,"in_reply_to":"53ad8891_e9ae0ab4","updated":"2025-03-27 10:03:09.000000000","message":"I\u0027ll take this discussion to the drivers meeting.","commit_id":"f248075574338bf31f5a2956939007a30782311e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"15b64a2719afb19e72e759ffc05075467db03318","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        # L3 agent router processing green pool"},{"line_number":321,"context_line":"        self._pool_size \u003d ROUTER_PROCESS_GREENLET_MIN"},{"line_number":322,"context_line":"        self._pool \u003d utils.ResizableThreadPool(number_workers\u003dself._pool_size)"},{"line_number":323,"context_line":"        self._queue \u003d queue.ResourceProcessingQueue()"},{"line_number":324,"context_line":"        super().__init__(host\u003dself.conf.host)"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"72def88b_57789065","line":322,"in_reply_to":"594d0331_c8c587b6","updated":"2025-03-27 07:01:11.000000000","message":"There is no direct replacement of ``eventlet.GreenPool`` in any library. We need a thread pool handler that is capable of:\n* Define a maximum set of workers. ``ThreadPoolExecutor`` is capable of that.\n* Resize the number of maximum workers. There is no implementation.\n* Allow to send a task while blocking the return of the call until the task has been started. There is no implementation.","commit_id":"f248075574338bf31f5a2956939007a30782311e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2ab74b60a2a16be0f405ff27978c90d4d4b7ae71","unresolved":true,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        # L3 agent router processing green pool"},{"line_number":321,"context_line":"        self._pool_size \u003d ROUTER_PROCESS_GREENLET_MIN"},{"line_number":322,"context_line":"        self._pool \u003d utils.ResizableThreadPool(number_workers\u003dself._pool_size)"},{"line_number":323,"context_line":"        self._queue \u003d queue.ResourceProcessingQueue()"},{"line_number":324,"context_line":"        super().__init__(host\u003dself.conf.host)"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"53ad8891_e9ae0ab4","line":322,"in_reply_to":"72def88b_57789065","updated":"2025-03-27 09:18:59.000000000","message":"Resizing the number of workers is not implemented for kernel threads probably because it does not make sense by opposite to the light greenthreads? \n\nIn that work to clean greenthreads for this agent we should perhaps consider removing the mechanism of resizing the pool than implementing and adding more code to continue supporting it.","commit_id":"f248075574338bf31f5a2956939007a30782311e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"68c7f752833559668fcf75da2d2b2fca331f5978","unresolved":true,"context_lines":[{"line_number":826,"context_line":"    def _process_routers_loop(self):"},{"line_number":827,"context_line":"        LOG.debug(\"Starting _process_routers_loop\")"},{"line_number":828,"context_line":"        while not self._exiting:"},{"line_number":829,"context_line":"            self._pool.submit(self._process_update)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"    # NOTE(kevinbenton): this is set to 1 second because the actual interval"},{"line_number":832,"context_line":"    # is controlled by a FixedIntervalLoopingCall in neutron/service.py that"}],"source_content_type":"text/x-python","patch_set":10,"id":"59a6f834_95a274ca","line":829,"range":{"start_line":829,"start_character":23,"end_line":829,"end_character":29},"updated":"2025-04-16 14:10:57.000000000","message":"I hope that oslo.messaging is thread safe...","commit_id":"d6baf954f38563743afa008269d4bad7c2a1103e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"83ca8542fdaa81c1e6d749964d55a2e3542a9995","unresolved":true,"context_lines":[{"line_number":826,"context_line":"    def _process_routers_loop(self):"},{"line_number":827,"context_line":"        LOG.debug(\"Starting _process_routers_loop\")"},{"line_number":828,"context_line":"        while not self._exiting:"},{"line_number":829,"context_line":"            self._pool.submit(self._process_update)"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"    # NOTE(kevinbenton): this is set to 1 second because the actual interval"},{"line_number":832,"context_line":"    # is controlled by a FixedIntervalLoopingCall in neutron/service.py that"}],"source_content_type":"text/x-python","patch_set":10,"id":"063ea92e_0cda5e65","line":829,"range":{"start_line":829,"start_character":23,"end_line":829,"end_character":29},"in_reply_to":"59a6f834_95a274ca","updated":"2025-04-16 14:12:13.000000000","message":"at least they say kombu is not https://github.com/openstack/oslo.messaging/blob/master/oslo_messaging/_drivers/amqpdriver.py#L116","commit_id":"d6baf954f38563743afa008269d4bad7c2a1103e"}]}
