)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ed674df64aad4e4e05155e68fa72c4c97352435f","unresolved":true,"context_lines":[{"line_number":23,"context_line":"In threading mode we requests the admin to configure the 2 limits to the"},{"line_number":24,"context_line":"same number, and we warn if not. We use that limit (or the max of the 2"},{"line_number":25,"context_line":"limits) as the size of the long task Executor. As the limits are the"},{"line_number":26,"context_line":"same we don\u0027t enforce individual limit any more. The executor size will"},{"line_number":27,"context_line":"ensure the shared limit is kept."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Note that while live migration is a long-running task we cannot put it into"},{"line_number":30,"context_line":"the same long_task_executor as build and snapshot as we need:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"cfa0b16e_9e071fc4","line":27,"range":{"start_line":26,"start_character":49,"end_line":27,"end_character":31},"updated":"2026-02-24 04:41:52.000000000","message":"this depends on how operations are requested. For example if number of build operations occupies the whole executor, then snapshot operation needs to wait. Which is fine but I think we should record that behavior in doc or release notes upgrade impact.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b72a6bffa1a4f3192c0d4ab9337a4a8e1d78aeec","unresolved":false,"context_lines":[{"line_number":23,"context_line":"In threading mode we requests the admin to configure the 2 limits to the"},{"line_number":24,"context_line":"same number, and we warn if not. We use that limit (or the max of the 2"},{"line_number":25,"context_line":"limits) as the size of the long task Executor. As the limits are the"},{"line_number":26,"context_line":"same we don\u0027t enforce individual limit any more. The executor size will"},{"line_number":27,"context_line":"ensure the shared limit is kept."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Note that while live migration is a long-running task we cannot put it into"},{"line_number":30,"context_line":"the same long_task_executor as build and snapshot as we need:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"40e0d3a7_168238c2","line":27,"range":{"start_line":26,"start_character":49,"end_line":27,"end_character":31},"in_reply_to":"c70ffe2d_d7bc733a","updated":"2026-02-24 15:25:03.000000000","message":"\u003e this depends on how operations are requested. For example if number of build operations occupies the whole executor, then snapshot operation needs to wait. Which is fine but I think we should record that behavior in doc or release notes upgrade impact.\n\nThis is why the text says that \"... ensure the **shared** limit is kept.\" The limit is shared across the two operations hence one operation can consume it all.\n\nI\u0027ve added an upgrade release notes.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24f7690580ab0183c602210b85d9ccdf49e6da71","unresolved":true,"context_lines":[{"line_number":23,"context_line":"In threading mode we requests the admin to configure the 2 limits to the"},{"line_number":24,"context_line":"same number, and we warn if not. We use that limit (or the max of the 2"},{"line_number":25,"context_line":"limits) as the size of the long task Executor. As the limits are the"},{"line_number":26,"context_line":"same we don\u0027t enforce individual limit any more. The executor size will"},{"line_number":27,"context_line":"ensure the shared limit is kept."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Note that while live migration is a long-running task we cannot put it into"},{"line_number":30,"context_line":"the same long_task_executor as build and snapshot as we need:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"c70ffe2d_d7bc733a","line":27,"range":{"start_line":26,"start_character":49,"end_line":27,"end_character":31},"in_reply_to":"cfa0b16e_9e071fc4","updated":"2026-02-24 08:59:42.000000000","message":"agreed with @gmaan.os14@gmail.com I\u0027d appreciate a reno upgrade note.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"67b9df8c70772db4064091856436e75772631b98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7e283164_06c0453e","updated":"2026-02-19 17:45:03.000000000","message":"I have things to do see commit messag","commit_id":"2f48179bd3de68731e123973e82acfaa73348e6e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b88e249cc0e62d8918bf99f4e75743baa7dfd55d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"43c0ed74_bc0a8b02","updated":"2026-02-22 19:57:50.000000000","message":"I will run some concurrency tests locally in devstack on Monday but otherwise I consider this ready for review","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24f7690580ab0183c602210b85d9ccdf49e6da71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4e6b30e4_b335c2fd","updated":"2026-02-24 08:59:42.000000000","message":"I\u0027m on the edge, I\u0027d appreciate a relnote and just a small code change but if you don\u0027t have time for such things, we can discuss.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ed674df64aad4e4e05155e68fa72c4c97352435f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c356133c_ba7f7129","updated":"2026-02-24 04:41:52.000000000","message":"all looks good to me except adding the threading mode behavior (if one operation fill up the whole executor and other operations wait) in doc and upgrade impact.\n\nrest all looks good.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1bfebb7b983a94f0656475f0a8a2c5ef56c9204","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0488910e_d73a4d49","updated":"2026-02-23 08:18:46.000000000","message":"recheck ssh guest timeout","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ff99b5878e2aedd30db31cdbb2cb9bdb5f9ed29e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c8eec660_df3e6b5f","in_reply_to":"43c0ed74_bc0a8b02","updated":"2026-02-25 11:08:56.000000000","message":"Done. The hang with 10 parallel builds does not happen any more. \\o/","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f2f7212fcd42d4ccc6d1546769633ebee2570613","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"4b5fc29b_1ac53b76","updated":"2026-02-24 16:24:15.000000000","message":"Okay, let\u0027s give it a go","commit_id":"9e678b83eb2b5f01adb270914a2095bf8f4b394f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"959b273ef18d83be550dd2cb60af977a520a3dc2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8309a677_fadbf0b8","updated":"2026-02-26 04:29:54.000000000","message":"recheck parent is in gate pipeline","commit_id":"9e678b83eb2b5f01adb270914a2095bf8f4b394f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dadf2934dd8c8015db663cb09ed409b67c50794e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b0dd4b34_18327228","updated":"2026-02-25 21:22:19.000000000","message":"recheck parent requeued","commit_id":"9e678b83eb2b5f01adb270914a2095bf8f4b394f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"757d97d01a0ebcb350bcbcb38954a2f077252600","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0be9f5b4_d3305753","updated":"2026-02-25 09:08:43.000000000","message":"recheck the problematic tempest test is reverted https://review.opendev.org/c/openstack/tempest/+/977922","commit_id":"9e678b83eb2b5f01adb270914a2095bf8f4b394f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5b0835c1bae5db59a38d1e80112a87265a258af2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"03b4ae08_6e8e6b51","updated":"2026-02-24 19:33:58.000000000","message":"thanks for adding release notes. lgtm","commit_id":"9e678b83eb2b5f01adb270914a2095bf8f4b394f"}],"doc/source/admin/concurrency.rst":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ed674df64aad4e4e05155e68fa72c4c97352435f","unresolved":true,"context_lines":[{"line_number":96,"context_line":"  more performant live migration is needed then enable"},{"line_number":97,"context_line":"  :oslo.config:option:`libvirt.live_migration_parallel_connections` instead."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"* :oslo.config:option:`max_concurrent_builds` and"},{"line_number":100,"context_line":"  :oslo.config:option:`max_concurrent_snapshots`: In native threading mode"},{"line_number":101,"context_line":"  both types of operations using a common shared executor to free up the RPC"},{"line_number":102,"context_line":"  handler workers. Therefore both type of operations are counted against the"},{"line_number":103,"context_line":"  same shared maximum limit. If the two options are set to different values"}],"source_content_type":"text/x-rst","patch_set":5,"id":"288571e2_d145f495","line":100,"range":{"start_line":99,"start_character":0,"end_line":100,"end_character":49},"updated":"2026-02-24 04:41:52.000000000","message":"For backward compatibility, it is fine but as end goal, we need to combine these max_concurrent_snapshots and max_concurrent_snapshots config option into a one and deprecate these two so that we can keep it simple for operators.\n\nBut that can be done later (even it should be fine if it is done in next release)","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b72a6bffa1a4f3192c0d4ab9337a4a8e1d78aeec","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  more performant live migration is needed then enable"},{"line_number":97,"context_line":"  :oslo.config:option:`libvirt.live_migration_parallel_connections` instead."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"* :oslo.config:option:`max_concurrent_builds` and"},{"line_number":100,"context_line":"  :oslo.config:option:`max_concurrent_snapshots`: In native threading mode"},{"line_number":101,"context_line":"  both types of operations using a common shared executor to free up the RPC"},{"line_number":102,"context_line":"  handler workers. Therefore both type of operations are counted against the"},{"line_number":103,"context_line":"  same shared maximum limit. If the two options are set to different values"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b8449876_bc66a3f3","line":100,"range":{"start_line":99,"start_character":0,"end_line":100,"end_character":49},"in_reply_to":"288571e2_d145f495","updated":"2026-02-24 15:25:03.000000000","message":"I think I rather fix the situation and make the independent limits supported eventually with native threading mode as well. It needs a bit of complexity but I think it worth it. Keep this as is until we either start supporting independent limits with native threading or decide that we won\u0027t do that and then deprecated the separate limits.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5b0835c1bae5db59a38d1e80112a87265a258af2","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  more performant live migration is needed then enable"},{"line_number":97,"context_line":"  :oslo.config:option:`libvirt.live_migration_parallel_connections` instead."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"* :oslo.config:option:`max_concurrent_builds` and"},{"line_number":100,"context_line":"  :oslo.config:option:`max_concurrent_snapshots`: In native threading mode"},{"line_number":101,"context_line":"  both types of operations using a common shared executor to free up the RPC"},{"line_number":102,"context_line":"  handler workers. Therefore both type of operations are counted against the"},{"line_number":103,"context_line":"  same shared maximum limit. If the two options are set to different values"}],"source_content_type":"text/x-rst","patch_set":5,"id":"cf4837d3_d5aa0504","line":100,"range":{"start_line":99,"start_character":0,"end_line":100,"end_character":49},"in_reply_to":"b8449876_bc66a3f3","updated":"2026-02-24 19:33:58.000000000","message":"perfect, sounds good.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ff7b23fb4a19eee42289ff428220461ae3df2da8","unresolved":true,"context_lines":[{"line_number":681,"context_line":"            max_tasks \u003d max(max_builds, max_snapshots, max_live_migrations)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"            if len({max_builds, max_snapshots, max_live_migrations}) !\u003d 1:"},{"line_number":684,"context_line":"                LOG.warning("},{"line_number":685,"context_line":"                    \"In native threading mode the number of concurrent builds,\""},{"line_number":686,"context_line":"                    \"snapshots, and live_migrations should be limited to the\""},{"line_number":687,"context_line":"                    \"same number. The current configuration has differing \""},{"line_number":688,"context_line":"                    \"limits: max_concurrent_builds: %d, \""},{"line_number":689,"context_line":"                    \"max_concurrent_snapshots: %d, \""},{"line_number":690,"context_line":"                    \"max_concurrent_live_migrations: %d. \""},{"line_number":691,"context_line":"                    \"Nova will use a single, overall limit of %d for these \""},{"line_number":692,"context_line":"                    \"tasks.\","},{"line_number":693,"context_line":"                    max_builds, max_snapshots, max_live_migrations, max_tasks)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            self._long_task_executor \u003d utils.get_long_task_executor(max_tasks)"},{"line_number":696,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a4016ff_1cd54f71","line":693,"range":{"start_line":684,"start_character":0,"end_line":693,"end_character":0},"updated":"2026-02-19 13:06:37.000000000","message":"OK I realized that this is baaad. This practically means that if the deployer wants to limit the number of live migrations happening on a node to 1, our default and recommended value, then the rule here forces the deployer to limit the number of parallel build to 1 as well, which is not realistic. \n\nSo this approach asking for the 3 limits to be the same is not good for us as we have wildly different logically good values of these limits.","commit_id":"92694f7b0c5a46214c6c60bcf60edd899e2b1a8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7111dde36560b1e679350bd6d121db1414edb76a","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            max_tasks \u003d max(max_builds, max_snapshots, max_live_migrations)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"            if len({max_builds, max_snapshots, max_live_migrations}) !\u003d 1:"},{"line_number":684,"context_line":"                LOG.warning("},{"line_number":685,"context_line":"                    \"In native threading mode the number of concurrent builds,\""},{"line_number":686,"context_line":"                    \"snapshots, and live_migrations should be limited to the\""},{"line_number":687,"context_line":"                    \"same number. The current configuration has differing \""},{"line_number":688,"context_line":"                    \"limits: max_concurrent_builds: %d, \""},{"line_number":689,"context_line":"                    \"max_concurrent_snapshots: %d, \""},{"line_number":690,"context_line":"                    \"max_concurrent_live_migrations: %d. \""},{"line_number":691,"context_line":"                    \"Nova will use a single, overall limit of %d for these \""},{"line_number":692,"context_line":"                    \"tasks.\","},{"line_number":693,"context_line":"                    max_builds, max_snapshots, max_live_migrations, max_tasks)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            self._long_task_executor \u003d utils.get_long_task_executor(max_tasks)"},{"line_number":696,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"195ae6b8_cc1bbfd8","line":693,"range":{"start_line":684,"start_character":0,"end_line":693,"end_character":0},"in_reply_to":"339f0dcb_ef33dcb5","updated":"2026-02-22 19:54:23.000000000","message":"Done","commit_id":"92694f7b0c5a46214c6c60bcf60edd899e2b1a8d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1fa1bd4da87363f5cd336d56f503e3a6cdda0501","unresolved":true,"context_lines":[{"line_number":681,"context_line":"            max_tasks \u003d max(max_builds, max_snapshots, max_live_migrations)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"            if len({max_builds, max_snapshots, max_live_migrations}) !\u003d 1:"},{"line_number":684,"context_line":"                LOG.warning("},{"line_number":685,"context_line":"                    \"In native threading mode the number of concurrent builds,\""},{"line_number":686,"context_line":"                    \"snapshots, and live_migrations should be limited to the\""},{"line_number":687,"context_line":"                    \"same number. The current configuration has differing \""},{"line_number":688,"context_line":"                    \"limits: max_concurrent_builds: %d, \""},{"line_number":689,"context_line":"                    \"max_concurrent_snapshots: %d, \""},{"line_number":690,"context_line":"                    \"max_concurrent_live_migrations: %d. \""},{"line_number":691,"context_line":"                    \"Nova will use a single, overall limit of %d for these \""},{"line_number":692,"context_line":"                    \"tasks.\","},{"line_number":693,"context_line":"                    max_builds, max_snapshots, max_live_migrations, max_tasks)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            self._long_task_executor \u003d utils.get_long_task_executor(max_tasks)"},{"line_number":696,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9e157b18_2fb70c73","line":693,"range":{"start_line":684,"start_character":0,"end_line":693,"end_character":0},"in_reply_to":"5a4016ff_1cd54f71","updated":"2026-02-19 13:51:27.000000000","message":"+1 i agree","commit_id":"92694f7b0c5a46214c6c60bcf60edd899e2b1a8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1fc12a1464700b0d7c7c1f1e000cbcb48fe3320b","unresolved":true,"context_lines":[{"line_number":681,"context_line":"            max_tasks \u003d max(max_builds, max_snapshots, max_live_migrations)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"            if len({max_builds, max_snapshots, max_live_migrations}) !\u003d 1:"},{"line_number":684,"context_line":"                LOG.warning("},{"line_number":685,"context_line":"                    \"In native threading mode the number of concurrent builds,\""},{"line_number":686,"context_line":"                    \"snapshots, and live_migrations should be limited to the\""},{"line_number":687,"context_line":"                    \"same number. The current configuration has differing \""},{"line_number":688,"context_line":"                    \"limits: max_concurrent_builds: %d, \""},{"line_number":689,"context_line":"                    \"max_concurrent_snapshots: %d, \""},{"line_number":690,"context_line":"                    \"max_concurrent_live_migrations: %d. \""},{"line_number":691,"context_line":"                    \"Nova will use a single, overall limit of %d for these \""},{"line_number":692,"context_line":"                    \"tasks.\","},{"line_number":693,"context_line":"                    max_builds, max_snapshots, max_live_migrations, max_tasks)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"            self._long_task_executor \u003d utils.get_long_task_executor(max_tasks)"},{"line_number":696,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"339f0dcb_ef33dcb5","line":693,"range":{"start_line":684,"start_character":0,"end_line":693,"end_character":0},"in_reply_to":"9e157b18_2fb70c73","updated":"2026-02-19 14:12:42.000000000","message":"I went with a split approach. Snapshot and build shares an executor, live migration uses its own executor. The long term approach is probably using the idea from https://review.opendev.org/c/openstack/nova/+/975924/1","commit_id":"92694f7b0c5a46214c6c60bcf60edd899e2b1a8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"67b9df8c70772db4064091856436e75772631b98","unresolved":true,"context_lines":[{"line_number":1893,"context_line":"        self.instance_events.cancel_all_events()"},{"line_number":1894,"context_line":"        self.driver.cleanup_host(host\u003dself.host)"},{"line_number":1895,"context_line":"        self._cleanup_live_migrations_in_pool()"},{"line_number":1896,"context_line":"        # self._shutdown_executors()"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"    def _shutdown_executors(self):"},{"line_number":1899,"context_line":"        # First initiate shutdown without waiting so all shutdown can progress"}],"source_content_type":"text/x-python","patch_set":2,"id":"e1410955_28fa64ba","line":1896,"updated":"2026-02-19 17:45:03.000000000","message":"doing proper shutdown kills the functional test env due to shared global state (executors) across multiple compute nodes within the same test env.","commit_id":"2f48179bd3de68731e123973e82acfaa73348e6e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4bb5debfabcebafe495e07ee451752d73a6adb22","unresolved":false,"context_lines":[{"line_number":1893,"context_line":"        self.instance_events.cancel_all_events()"},{"line_number":1894,"context_line":"        self.driver.cleanup_host(host\u003dself.host)"},{"line_number":1895,"context_line":"        self._cleanup_live_migrations_in_pool()"},{"line_number":1896,"context_line":"        # self._shutdown_executors()"},{"line_number":1897,"context_line":""},{"line_number":1898,"context_line":"    def _shutdown_executors(self):"},{"line_number":1899,"context_line":"        # First initiate shutdown without waiting so all shutdown can progress"}],"source_content_type":"text/x-python","patch_set":2,"id":"847f2f69_6de66048","line":1896,"in_reply_to":"e1410955_28fa64ba","updated":"2026-02-22 19:54:06.000000000","message":"Moved out to separate patch https://review.opendev.org/c/openstack/nova/+/977582/1","commit_id":"2f48179bd3de68731e123973e82acfaa73348e6e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24f7690580ab0183c602210b85d9ccdf49e6da71","unresolved":true,"context_lines":[{"line_number":679,"context_line":"        if utils.concurrency_mode_threading():"},{"line_number":680,"context_line":"            max_tasks \u003d max(max_builds, max_snapshots)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"            if len({max_builds, max_snapshots}) !\u003d 1:"},{"line_number":683,"context_line":"                LOG.warning("},{"line_number":684,"context_line":"                    \"In native threading mode the number of concurrent \""},{"line_number":685,"context_line":"                    \"builds, and snapshots should be limited to the \""}],"source_content_type":"text/x-python","patch_set":5,"id":"8137f65e_1f598366","line":682,"updated":"2026-02-24 08:59:42.000000000","message":"pedantic nit: why can\u0027t you just compare the two numbers ?\n```if max_builds !\u003d max_snapshots:```\n\n\nLATER: see my comment below","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b72a6bffa1a4f3192c0d4ab9337a4a8e1d78aeec","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        if utils.concurrency_mode_threading():"},{"line_number":680,"context_line":"            max_tasks \u003d max(max_builds, max_snapshots)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"            if len({max_builds, max_snapshots}) !\u003d 1:"},{"line_number":683,"context_line":"                LOG.warning("},{"line_number":684,"context_line":"                    \"In native threading mode the number of concurrent \""},{"line_number":685,"context_line":"                    \"builds, and snapshots should be limited to the \""}],"source_content_type":"text/x-python","patch_set":5,"id":"52a02f0f_3e6dd160","line":682,"in_reply_to":"8137f65e_1f598366","updated":"2026-02-24 15:25:03.000000000","message":"originally there were 3 values (remember live migration was included originally), there a single set op is better then 2 inequality check. I can drop the set op now that we have only two values.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24f7690580ab0183c602210b85d9ccdf49e6da71","unresolved":true,"context_lines":[{"line_number":704,"context_line":"            # the concurrent tasks, so just create a big Executor to"},{"line_number":705,"context_line":"            # potentially host all of them"},{"line_number":706,"context_line":"            self._long_task_executor \u003d utils.get_long_task_executor("},{"line_number":707,"context_line":"                sum([max_builds, max_snapshots]))"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"            self._build_semaphore \u003d threading.Semaphore(max_builds)"},{"line_number":710,"context_line":"            self._snapshot_semaphore \u003d threading.Semaphore(max_snapshots)"}],"source_content_type":"text/x-python","patch_set":5,"id":"973153da_a5f6f1b0","line":707,"range":{"start_line":707,"start_character":16,"end_line":707,"end_character":48},"updated":"2026-02-24 08:59:42.000000000","message":"again, why can\u0027t we just sum the integers? I know _get_max_concurrent_things() can return None but we can just make it simplier to read by calling it this way above \n```\n max_builds \u003d self._get_max_concurrent_builds() or 0\n```","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b72a6bffa1a4f3192c0d4ab9337a4a8e1d78aeec","unresolved":false,"context_lines":[{"line_number":704,"context_line":"            # the concurrent tasks, so just create a big Executor to"},{"line_number":705,"context_line":"            # potentially host all of them"},{"line_number":706,"context_line":"            self._long_task_executor \u003d utils.get_long_task_executor("},{"line_number":707,"context_line":"                sum([max_builds, max_snapshots]))"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"            self._build_semaphore \u003d threading.Semaphore(max_builds)"},{"line_number":710,"context_line":"            self._snapshot_semaphore \u003d threading.Semaphore(max_snapshots)"}],"source_content_type":"text/x-python","patch_set":5,"id":"90efe420_5ec5a102","line":707,"range":{"start_line":707,"start_character":16,"end_line":707,"end_character":48},"in_reply_to":"973153da_a5f6f1b0","updated":"2026-02-24 15:25:03.000000000","message":"\u003e again, why can\u0027t we just sum the integers? \n\nBut we do some integers here :) that is what sum() does.\n\n\u003e I know _get_max_concurrent_things() can return None but we can just make it simplier to read by calling it this way above \n\u003e ```\n\u003e  max_builds \u003d self._get_max_concurrent_builds() or 0\n\u003e ```\n\nNo _get_max_concurrent_* never returns None.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ed674df64aad4e4e05155e68fa72c4c97352435f","unresolved":false,"context_lines":[{"line_number":1893,"context_line":"        self.instance_events.cancel_all_events()"},{"line_number":1894,"context_line":"        self.driver.cleanup_host(host\u003dself.host)"},{"line_number":1895,"context_line":"        self._cleanup_live_migrations_in_pool()"},{"line_number":1896,"context_line":"        # NOTE: graceful shutdown needs to take care of the executors"},{"line_number":1897,"context_line":"        # self._sync_power_executor.shutdown()"},{"line_number":1898,"context_line":"        # utils.destroy_long_task_executor()"},{"line_number":1899,"context_line":"        # utils.destroy_default_executor()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fb8e52f_f0981f55","line":1896,"range":{"start_line":1896,"start_character":0,"end_line":1896,"end_character":69},"updated":"2026-02-24 04:41:52.000000000","message":"++ for note.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24f7690580ab0183c602210b85d9ccdf49e6da71","unresolved":false,"context_lines":[{"line_number":4704,"context_line":"        def do_snapshot_instance("},{"line_number":4705,"context_line":"            context, image_id, instance, expected_task_state"},{"line_number":4706,"context_line":"        ):"},{"line_number":4707,"context_line":"            with self._snapshot_semaphore:"},{"line_number":4708,"context_line":"                self._snapshot_instance(context, image_id, instance,"},{"line_number":4709,"context_line":"                                        expected_task_state)"},{"line_number":4710,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"a5e39660_2e85d3ee","line":4707,"range":{"start_line":4707,"start_character":17,"end_line":4707,"end_character":21},"updated":"2026-02-24 08:59:42.000000000","message":"note to reviewers : we are in a closure, we inherit self.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"}],"nova/utils.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"24f7690580ab0183c602210b85d9ccdf49e6da71","unresolved":true,"context_lines":[{"line_number":1644,"context_line":"            LONG_TASK_EXECUTOR.name)"},{"line_number":1645,"context_line":"        LONG_TASK_EXECUTOR.shutdown()"},{"line_number":1646,"context_line":"        LOG.info("},{"line_number":1647,"context_line":"            \"The default thread pool %s is closed\", LONG_TASK_EXECUTOR.name)"},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"    LONG_TASK_EXECUTOR \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f3750db_92844cf0","line":1647,"range":{"start_line":1647,"start_character":16,"end_line":1647,"end_character":37},"updated":"2026-02-24 08:59:42.000000000","message":"copy/paste bug ? shouldn\u0027t be the long task thread pool ?","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b72a6bffa1a4f3192c0d4ab9337a4a8e1d78aeec","unresolved":false,"context_lines":[{"line_number":1644,"context_line":"            LONG_TASK_EXECUTOR.name)"},{"line_number":1645,"context_line":"        LONG_TASK_EXECUTOR.shutdown()"},{"line_number":1646,"context_line":"        LOG.info("},{"line_number":1647,"context_line":"            \"The default thread pool %s is closed\", LONG_TASK_EXECUTOR.name)"},{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"    LONG_TASK_EXECUTOR \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"433552d8_13d37c33","line":1647,"range":{"start_line":1647,"start_character":16,"end_line":1647,"end_character":37},"in_reply_to":"9f3750db_92844cf0","updated":"2026-02-24 15:25:03.000000000","message":"yes, fixing.... Done.","commit_id":"d317599413ef5961513735a9f7a5f98571e175a3"}]}
