)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f72f502fb61720a360273a8ae4782027ce186f6e","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add spawn_to"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now that spawn is using the default executor and returns a Future we can"},{"line_number":10,"context_line":"have a spawn_to that takes the executor as a parameter so the"},{"line_number":11,"context_line":"scatter-gather code path can use the same context passing logic but use"},{"line_number":12,"context_line":"a separate executor."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"c23730d8_96a0bb4d","line":10,"range":{"start_line":10,"start_character":7,"end_line":10,"end_character":15},"updated":"2025-04-24 16:13:11.000000000","message":"i would call this spawn_on or just submit/execute but spawn_to sonds a little odd.\n\ni get whaht your going for it just does not really land right IMO","commit_id":"b83df813e13d57c47a5b74ce8b877c7ebb84439e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"751ab7a3d391ad1d8e01aab359c1c04fbc51d9a9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add spawn_to"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now that spawn is using the default executor and returns a Future we can"},{"line_number":10,"context_line":"have a spawn_to that takes the executor as a parameter so the"},{"line_number":11,"context_line":"scatter-gather code path can use the same context passing logic but use"},{"line_number":12,"context_line":"a separate executor."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e4e383ee_812e3cc8","line":10,"range":{"start_line":10,"start_character":7,"end_line":10,"end_character":15},"in_reply_to":"0b3c265a_0ed815d6","updated":"2025-04-25 11:19:22.000000000","message":"Done","commit_id":"b83df813e13d57c47a5b74ce8b877c7ebb84439e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e9f183cde58dc45abd2101223b3b935bb59a4e86","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add spawn_to"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now that spawn is using the default executor and returns a Future we can"},{"line_number":10,"context_line":"have a spawn_to that takes the executor as a parameter so the"},{"line_number":11,"context_line":"scatter-gather code path can use the same context passing logic but use"},{"line_number":12,"context_line":"a separate executor."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"0b3c265a_0ed815d6","line":10,"range":{"start_line":10,"start_character":7,"end_line":10,"end_character":15},"in_reply_to":"c23730d8_96a0bb4d","updated":"2025-04-25 07:01:03.000000000","message":"OK. Make sense. I will change. Right now I\u0027m rushing ahead with this series to a point where I can try switching nova-scheduler into threading mode locally. (I\u0027m close to try). So this will stew a bit here mostly because the scatter-gather patch needs more love before it can land.","commit_id":"b83df813e13d57c47a5b74ce8b877c7ebb84439e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a7a3d06d6ee2f36705257fb186cd19d2ebba781","unresolved":true,"context_lines":[{"line_number":14,"context_line":"This also change spawn() to use spawn_on() with the default executor."},{"line_number":15,"context_line":"And warns if the executor is busy an therefore the task is queued."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"During testing this we discovered that SpawnIsSynchornous fixture made a"},{"line_number":18,"context_line":"wrong assumption that eventlet.spawn(f) would raise the exception if f"},{"line_number":19,"context_line":"raises. It does not. So now when we changed this fixture to the new"},{"line_number":20,"context_line":"executor structure we fixed this test bug. There was two unit test"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"b4e9100c_f9275d64","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":57},"updated":"2025-06-30 14:53:45.000000000","message":"nit: SpawnIsSynchronous","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c8ea0a6497522887594aae754199d14d93d677a3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This also change spawn() to use spawn_on() with the default executor."},{"line_number":15,"context_line":"And warns if the executor is busy an therefore the task is queued."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"During testing this we discovered that SpawnIsSynchornous fixture made a"},{"line_number":18,"context_line":"wrong assumption that eventlet.spawn(f) would raise the exception if f"},{"line_number":19,"context_line":"raises. It does not. So now when we changed this fixture to the new"},{"line_number":20,"context_line":"executor structure we fixed this test bug. There was two unit test"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"4c2d687c_d9946260","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":57},"in_reply_to":"b4e9100c_f9275d64","updated":"2025-07-01 09:14:31.000000000","message":"Done","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"164154daf4efc2a61e3c06a26aa98de0acf38e0e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5c2918f8_4283b97b","updated":"2025-04-25 12:06:06.000000000","message":"i mean cooking a stew for 19 hours would proably result in some tasty tasty goulash\nbut given you had pushed the patch even before i saw the comment i think its fine :) \n\n+1 i sbecasue im undecied about how much testing this really need.\n\nthere probably should be a simple unit test of the new function but realistically this will be tested transitively alot given how core this is gong to be.\n\nlets see what ci thinks but i can be convice to upgrade to +2 \n\nalso cool sound like your on a role. ill trya and take a look at the scather gather patchs and the scheuler ones when you think the latter are ready.\nalthough im goig to swap to somethign non nova related for most of the rest of today so i proably wont do many more reviews today.","commit_id":"db1bb523f69de6aea0d2be1ae23d5be4aa8633ba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"18b4ceb3ba0ce7e5c0aeab55c66ba637297481a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6a364483_123b8a9e","in_reply_to":"5c2918f8_4283b97b","updated":"2025-06-03 13:07:35.000000000","message":"Acknowledged","commit_id":"db1bb523f69de6aea0d2be1ae23d5be4aa8633ba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f4dbdf162b34fac234becd1328c3230b751392a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"3621ca42_7d9e9a28","updated":"2025-05-19 14:49:59.000000000","message":"recheck bug/2109428 (nova-ceph-multistore) bug/2111272 (grenade-skip-level-always)","commit_id":"877c662c605585f6b1c49d56b77e3ae542c1bf29"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"818fc26b26610f75a8c024d11b72d7da38991600","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"1d483235_631cd71d","updated":"2025-06-04 15:58:31.000000000","message":"This patch looks good to me.","commit_id":"e560dde635f3f2a58e458a1155a08cc2883bccf9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6412393bdc815ccfc7bb4dec39e599ff7178884","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"a1e3561c_29009dab","updated":"2025-06-16 14:01:48.000000000","message":"The SpanwIsSyncronous fixture needs to capture spawn_on","commit_id":"bd41a9223f62a7b2cbf1d81e966b9b085a720b1e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1d924108c4447901bbb99d10a985688863c22772","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"fa6fda5b_8f00d8bb","updated":"2025-06-16 11:49:33.000000000","message":"recheck \n\n* grenade-skip-level-always: timed out on dumping databases\n* grenade-multinode: guest kernel panic\n  ```\n  [    7.675560] random: crng init done\ncurrently loaded modules: 8021q 8139cp 8390 9pnet 9pnet_virtio ahci cec dca drm drm_kms_helper e1000 e1000e failover fb_sys_fops garp hid hid_generic i2c_algo_bit igb igbvf ip6_udp_tunnel ip_tables isofs libahci libcrc32c llc mii mrp ne2k_pci net_failover nls_ascii nls_iso8859_1 nls_utf8 pcnet32 qemu_fw_cfg rc_core sctp stp syscopyarea sysfillrect sysimgblt udp_tunnel usbhid virtio_blk virtio_dma_buf virtio_gpu virtio_input virtio_net virtio_rng virtio_scsi virtiofs x_tables \ninfo: initramfs loading root from /dev/vda1\n/sbin/init: can\u0027t load library \u0027libtirpc.so.3\u0027\n[    9.385145] Kernel panic - not syncing: Attempted to kill init! exitcode\u003d0x00001000\n[    9.386144] CPU: 0 PID: 1 Comm: init Not tainted 5.15.0-117-generic #127-Ubuntu\n[    9.386570] Hardware name: OpenStack Foundation OpenStack Nova, BIOS 1.15.0-1 04/01/2014\n[    9.387282] Call Trace:\n[    9.388026]  \u003cTASK\u003e\n[    9.388395]  show_stack+0x52/0x5c\n[    9.389055]  dump_stack_lvl+0x4a/0x63\n[    9.389255]  dump_stack+0x10/0x16\n[    9.389434]  panic+0x15c/0x33b\n[    9.389634]  do_exit.cold+0x15/0xa0\n[    9.389930]  __x64_sys_exit+0x1b/0x20\n[    9.390137]  x64_sys_call+0x1f30/0x1fa0\n[    9.390330]  do_syscall_64+0x56/0xb0\n[    9.390590]  ? __vm_munmap+0x96/0x130\n[    9.390807]  ? exit_to_user_mode_prepare+0x37/0xb0\n[    9.391042]  ? syscall_exit_to_user_mode+0x2c/0x50\n[    9.391260]  ? x64_sys_call+0x1e07/0x1fa0\n[    9.391456]  ? do_syscall_64+0x63/0xb0\n[    9.391855]  ? __wake_up+0x13/0x20\n[    9.392076]  ? do_tty_write+0x1a4/0x270\n[    9.392329]  ? __cond_resched+0x1a/0x50\n[    9.392522]  ? eraser+0x490/0x490\n[    9.396654]  ? tty_ldisc_deref+0x16/0x20\n[    9.399500]  ? file_tty_write.constprop.0+0x9e/0xc0\n[    9.402360]  ? redirected_tty_write+0x71/0x90\n[    9.404913]  ? new_sync_write+0x114/0x1a0\n[    9.407356]  ? vfs_write+0x1d5/0x270\n[    9.410328]  ? ksys_write+0x67/0xf0\n[    9.413158]  ? exit_to_user_mode_prepare+0x37/0xb0\n[    9.416074]  ? syscall_exit_to_user_mode+0x2c/0x50\n[    9.418598]  ? x64_sys_call+0x47c/0x1fa0\n[    9.421262]  ? do_syscall_64+0x63/0xb0\n[    9.423938]  ? do_user_addr_fault+0x1e7/0x670\n[    9.426440]  ? exit_to_user_mode_prepare+0x37/0xb0\n[    9.428892]  ? irqentry_exit_to_user_mode+0xe/0x20\n[    9.431409]  ? irqentry_exit+0x1d/0x30\n[    9.433876]  ? exc_page_fault+0x89/0x170\n[    9.436309]  entry_SYSCALL_64_after_hwframe+0x6c/0xd6\n[    9.438964] RIP: 0033:0x7f256d2eb55e\n[    9.441644] Code: 05 d7 2a 00 00 4c 89 f9 bf 02 00 00 00 48 8d 35 fb 0d 00 00 48 8b 10 31 c0 e8 50 d2 ff ff bf 10 00 00 00 b8 3c 00 00 00 0f 05 \u003c48\u003e 8d 15 f3 2a 00 00 f7 d8 89 02 48 83 ec 20 49 8b 8c 24 b8 00 00\n[    9.446811] RSP: 002b:00007ffd900f0ce0 EFLAGS: 00000207 ORIG_RAX: 000000000000003c\n[    9.449383] RAX: ffffffffffffffda RBX: 00007ffd900f1f90 RCX: 00007f256d2eb55e\n[    9.451917] RDX: 0000000000000002 RSI: 0000000000001000 RDI: 0000000000000010\n[    9.454533] RBP: 00007ffd900f1f70 R08: 00007f256d2e4000 R09: 00007f256d2e401a\n[    9.457083] R10: 0000000000000001 R11: 0000000000000207 R12: 00007f256d2e5040\n[    9.459633] R13: 00000000004bae50 R14: 0000000000000000 R15: 0000000000403d66\n[    9.462360]  \u003c/TASK\u003e\n[    9.465920] Kernel Offset: 0x12200000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)\n[    9.469042] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode\u003d0x00001000 ]---\n```\n* nova-multi-cell: create router HTTP request timed out","commit_id":"bd41a9223f62a7b2cbf1d81e966b9b085a720b1e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a044ca4e6a4c42e4513f50ad7d7df2e00a87c10e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"118a1a65_03d6cadb","in_reply_to":"427bc2b2_66563394","updated":"2025-06-25 15:15:06.000000000","message":"I replicated the two unit test fix from the master fix here so the two patch is independently doing the same thing.","commit_id":"bd41a9223f62a7b2cbf1d81e966b9b085a720b1e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"482fd5e9fa3037ebc8961ca3669e60208892812b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"427bc2b2_66563394","in_reply_to":"a1e3561c_29009dab","updated":"2025-06-23 16:30:38.000000000","message":"This is a related fix: https://review.opendev.org/c/openstack/nova/+/953121 but I will replicate the necessary test changes here to be able to independent","commit_id":"bd41a9223f62a7b2cbf1d81e966b9b085a720b1e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a7a3d06d6ee2f36705257fb186cd19d2ebba781","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"e156836d_4be53592","updated":"2025-06-30 14:53:45.000000000","message":"just a question about race conditions when checking the workers usage","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"980dedf584c9c7c1dff07c8c90a88fba6de8d393","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"6a69212a_f2f26407","updated":"2025-07-01 15:18:22.000000000","message":"I think I understand your points. The tests look to me good and the question I had for thread safe was fixed.\nThanks !","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c8ea0a6497522887594aae754199d14d93d677a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"a104eb7d_9ea5dec3","updated":"2025-07-01 09:14:31.000000000","message":"Thanks for the review","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"32a6784693c4c1f03b926c2d82dd7928228b2966","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"52ce5ca8_39f9d458","updated":"2025-07-02 13:55:59.000000000","message":"Just rebased from the previous, which was 2x+2","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"35926bc2c7a81a5599520456f10e90c268c69e9f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"8677d452_ff929be2","updated":"2025-07-10 09:43:07.000000000","message":"putting back my +2 given it was rebased","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"709fa1b6c9f6378de7dad7c441339f3eae2e9ae5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"4acd3c00_aa901d08","updated":"2025-07-09 18:12:50.000000000","message":"recheck","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1d45cc929ff3b4edd93fcefdc5d3f360a42faf67","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"becdad26_1b5d5454","updated":"2025-07-06 10:48:35.000000000","message":"recheck","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"73cc146f22943017f68403fd41195d434eaa1f72","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"fb68650c_135b2369","updated":"2025-07-07 09:55:05.000000000","message":"recheck bug/2115980","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b7571e5cdeb0778e98a9064eef3c1df3f1c68e78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"91f56f94_3beceaa6","updated":"2025-07-08 10:49:55.000000000","message":"recheck bug/2115980 again so I pinged infra about it","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"67485a8fa53ebf8dec1765816ad1e52742d687a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"362f9586_49f48fab","updated":"2025-07-04 15:06:00.000000000","message":"recheck bug/2115980 also parent went to the gate","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f9d84376a0cdc217a98a8437a7c3a8d9be511bcb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"7c667287_245f8ea4","updated":"2025-07-03 17:24:57.000000000","message":"recheck compute1 cannot connect to rabbit (again)","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6895fcae32d3a62806aae2e08294e7fa9fb386c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"62609618_8efc2056","updated":"2025-07-03 13:13:13.000000000","message":"recheck compute1 never come up as it was not able to connect to rabbit.","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5304ccffd97a2b42a0329a9e7651afc297cdd7e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"8c1b4015_d49cafa9","updated":"2025-07-07 14:53:35.000000000","message":"recheck grenade timed out dumping databases","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"86f76cb17612437277788103e4b3050c72d93db8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"9a5e49a0_5cedd441","updated":"2025-07-08 14:03:16.000000000","message":"recheck grenade timing out while dumping the database\nI hate this game. I think we should disable DB dumping for now","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9e56eff0744e08688060afd5a6cccc5c9c6bd77a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"5a6d7fcf_aef444e1","updated":"2025-07-07 06:57:31.000000000","message":"recheck guest ssh timeout","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"49b55fff06d57aa56828b240596f7234783a8da1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"291433a5_94a05ecb","updated":"2025-07-10 13:33:58.000000000","message":"recheck unable to connect to libvirt","commit_id":"b215c6fee9937b24c056e6cf2f8d1bf7703f8081"}],"nova/tests/fixtures/nova.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d00c3da06617481f444b39dac106f81d17f02d4","unresolved":true,"context_lines":[{"line_number":1303,"context_line":"        self.addCleanup(executor.shutdown)"},{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"        def spawn(*args, **kwargs):"},{"line_number":1306,"context_line":"            return executor.submit(*args, **kwargs)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        # Just ignore the first arg that is the original executor instance"},{"line_number":1309,"context_line":"        # and use our test internal synchronous executor."}],"source_content_type":"text/x-python","patch_set":21,"id":"0685aa8a_ad0b0901","line":1306,"updated":"2025-07-01 18:42:13.000000000","message":"Do we need this one? Can\u0027t we just mock in `executor.submit` below?","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"554962ffc21a47522d296be64238880a92cf8109","unresolved":true,"context_lines":[{"line_number":1303,"context_line":"        self.addCleanup(executor.shutdown)"},{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"        def spawn(*args, **kwargs):"},{"line_number":1306,"context_line":"            return executor.submit(*args, **kwargs)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        # Just ignore the first arg that is the original executor instance"},{"line_number":1309,"context_line":"        # and use our test internal synchronous executor."}],"source_content_type":"text/x-python","patch_set":21,"id":"d537b8fd_31d0b771","line":1306,"in_reply_to":"0685aa8a_ad0b0901","updated":"2025-07-02 12:25:09.000000000","message":"I need to redirect the call to our own executor that is synchronous. The executor type can be different things GreenThreadPoolExecutor or ThreadPoolExecutor. So I would selectively need to mock the proper submit function depending on the mode we are running in. Also mocking submit will have a side effect to mock all the use of the ThreadPoolExecutor.submit not just the one called via spawn and spawn_on. The fall out of that is more than what I want to fix in this commit.","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e97929ba30dc050f4bf1ddc834a3a387020d2fdc","unresolved":true,"context_lines":[{"line_number":1303,"context_line":"        self.addCleanup(executor.shutdown)"},{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"        def spawn(*args, **kwargs):"},{"line_number":1306,"context_line":"            return executor.submit(*args, **kwargs)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        # Just ignore the first arg that is the original executor instance"},{"line_number":1309,"context_line":"        # and use our test internal synchronous executor."}],"source_content_type":"text/x-python","patch_set":21,"id":"e6ab2b95_739befec","line":1306,"in_reply_to":"b1cc4730_66b472ec","updated":"2025-07-03 13:08:02.000000000","message":"I got it now. Sorry I misunderstood you comment. Sure we can do what you suggest.\n\nFor some (wrong) reason I thought you want to mock ThreadPoolExecutor.submit instead of spawn. \n\nI will fix this up either here if I need to respin, or in a FUP.","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8a6bd9ae006016a88c3a4dc8dca2ac21b9c914ca","unresolved":true,"context_lines":[{"line_number":1303,"context_line":"        self.addCleanup(executor.shutdown)"},{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"        def spawn(*args, **kwargs):"},{"line_number":1306,"context_line":"            return executor.submit(*args, **kwargs)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        # Just ignore the first arg that is the original executor instance"},{"line_number":1309,"context_line":"        # and use our test internal synchronous executor."}],"source_content_type":"text/x-python","patch_set":21,"id":"b1cc4730_66b472ec","line":1306,"in_reply_to":"d537b8fd_31d0b771","updated":"2025-07-02 13:34:20.000000000","message":"I don\u0027t understand. You\u0027re mocking `nova.utils.spawn` with a function (`spawn`) that literally calls `executor.submit` with the same args as it was passed right? Isn\u0027t this a no-op? All I mean is change L1313 to:\n```\nself.useFixture(fixtures.MonkeyPatch(\u0027nova.utils.spawn\u0027, executor.submit))\n```\n\nNot critical, of course, it just seems like it is indirection for no reason...","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"}],"nova/tests/unit/test_utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ed0c38b31f6d7c83a0d7e216d8e78bd10df8a2ac","unresolved":false,"context_lines":[{"line_number":1546,"context_line":"            \u0027test_spawn_on_warns_on_full_executor.cell_worker\u0027, task)"},{"line_number":1547,"context_line":"        # let the blocked tasks finish before the leaked thread check at"},{"line_number":1548,"context_line":"        # the test case cleanup fails on it"},{"line_number":1549,"context_line":"        work.set()"}],"source_content_type":"text/x-python","patch_set":13,"id":"0746f194_6643439a","line":1549,"updated":"2025-05-27 12:47:28.000000000","message":"moved this to addCleanup as discussed earlier in this patch series.","commit_id":"877c662c605585f6b1c49d56b77e3ae542c1bf29"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a7a3d06d6ee2f36705257fb186cd19d2ebba781","unresolved":true,"context_lines":[{"line_number":1545,"context_line":"        started.wait()"},{"line_number":1546,"context_line":"        # start one more task to trigger the fullness check."},{"line_number":1547,"context_line":"        utils.spawn_on(executor, task)"},{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"        # We expect that spawn_on will warn due to the second task being is"},{"line_number":1550,"context_line":"        # waiting in the queue, and no idle worker thread exists."},{"line_number":1551,"context_line":"        mock_warning.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":20,"id":"9ed5aeb9_0bf26ec8","line":1548,"updated":"2025-06-30 14:53:45.000000000","message":"nit: maybe we should check the return on _executor_is_full() but you already checked the warning","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c8ea0a6497522887594aae754199d14d93d677a3","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"        started.wait()"},{"line_number":1546,"context_line":"        # start one more task to trigger the fullness check."},{"line_number":1547,"context_line":"        utils.spawn_on(executor, task)"},{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"        # We expect that spawn_on will warn due to the second task being is"},{"line_number":1550,"context_line":"        # waiting in the queue, and no idle worker thread exists."},{"line_number":1551,"context_line":"        mock_warning.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":20,"id":"d9419ba0_21619246","line":1548,"in_reply_to":"9ed5aeb9_0bf26ec8","updated":"2025-07-01 09:14:31.000000000","message":"yeah the warning is a consequence of the return of that internal function. I\u0027m trying to focus on external behavior with the test where I can, hence the assert on the warning and not on the internal fuction call.","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"980dedf584c9c7c1dff07c8c90a88fba6de8d393","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"        started.wait()"},{"line_number":1546,"context_line":"        # start one more task to trigger the fullness check."},{"line_number":1547,"context_line":"        utils.spawn_on(executor, task)"},{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"        # We expect that spawn_on will warn due to the second task being is"},{"line_number":1550,"context_line":"        # waiting in the queue, and no idle worker thread exists."},{"line_number":1551,"context_line":"        mock_warning.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":20,"id":"912b45a2_902d1de8","line":1548,"in_reply_to":"d9419ba0_21619246","updated":"2025-07-01 15:18:22.000000000","message":"Cool with that.","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"}],"nova/utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cc8348c35d4c1fafbd38bed43f2eb4c222c2bf40","unresolved":true,"context_lines":[{"line_number":714,"context_line":"    \"\"\""},{"line_number":715,"context_line":"    if concurrency_mode_threading() and executor._work_queue.qsize() \u003e 0:"},{"line_number":716,"context_line":"        LOG.warning("},{"line_number":717,"context_line":"            \"The %s pool does not have free threads so the tasks %s is queued.\""},{"line_number":718,"context_line":"            \"If this happens repeatedly then the size of the pool is too small\""},{"line_number":719,"context_line":"            \"for the load or there are stuck threads filling the pool.\","},{"line_number":720,"context_line":"            executor.name, func)"}],"source_content_type":"text/x-python","patch_set":7,"id":"203194f5_e84b356b","line":717,"updated":"2025-05-08 14:45:20.000000000","message":"missing space after dot","commit_id":"e2d536d7f0021d70ba7e916e07d719053a68f204"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1d2eb9da259ecb953fd5060e437b4f7f4ccf5ec5","unresolved":false,"context_lines":[{"line_number":714,"context_line":"    \"\"\""},{"line_number":715,"context_line":"    if concurrency_mode_threading() and executor._work_queue.qsize() \u003e 0:"},{"line_number":716,"context_line":"        LOG.warning("},{"line_number":717,"context_line":"            \"The %s pool does not have free threads so the tasks %s is queued.\""},{"line_number":718,"context_line":"            \"If this happens repeatedly then the size of the pool is too small\""},{"line_number":719,"context_line":"            \"for the load or there are stuck threads filling the pool.\","},{"line_number":720,"context_line":"            executor.name, func)"}],"source_content_type":"text/x-python","patch_set":7,"id":"879e774a_af9944ea","line":717,"in_reply_to":"203194f5_e84b356b","updated":"2025-05-09 13:29:06.000000000","message":"Done","commit_id":"e2d536d7f0021d70ba7e916e07d719053a68f204"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4ec0a2175aec287053c40788233322ab7d5b9b14","unresolved":true,"context_lines":[{"line_number":715,"context_line":"    if concurrency_mode_threading() and executor._work_queue.qsize() \u003e 0:"},{"line_number":716,"context_line":"        LOG.warning("},{"line_number":717,"context_line":"            \"The %s pool does not have free threads so the tasks %s is queued.\""},{"line_number":718,"context_line":"            \"If this happens repeatedly then the size of the pool is too small\""},{"line_number":719,"context_line":"            \"for the load or there are stuck threads filling the pool.\","},{"line_number":720,"context_line":"            executor.name, func)"},{"line_number":721,"context_line":"    return pass_context(executor.submit, func, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"94b7254b_511903aa","line":718,"updated":"2025-05-08 14:40:48.000000000","message":"missing space between \"small\" and \"for\"","commit_id":"e2d536d7f0021d70ba7e916e07d719053a68f204"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1d2eb9da259ecb953fd5060e437b4f7f4ccf5ec5","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    if concurrency_mode_threading() and executor._work_queue.qsize() \u003e 0:"},{"line_number":716,"context_line":"        LOG.warning("},{"line_number":717,"context_line":"            \"The %s pool does not have free threads so the tasks %s is queued.\""},{"line_number":718,"context_line":"            \"If this happens repeatedly then the size of the pool is too small\""},{"line_number":719,"context_line":"            \"for the load or there are stuck threads filling the pool.\","},{"line_number":720,"context_line":"            executor.name, func)"},{"line_number":721,"context_line":"    return pass_context(executor.submit, func, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"c7d0b08a_e7832a3c","line":718,"in_reply_to":"94b7254b_511903aa","updated":"2025-05-09 13:29:06.000000000","message":"Done","commit_id":"e2d536d7f0021d70ba7e916e07d719053a68f204"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"da7e2887ace090d4bf725cdfc5cd9d2671adde13","unresolved":false,"context_lines":[{"line_number":675,"context_line":"    return trace_info"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"def _pass_context_wrapper(func):"},{"line_number":679,"context_line":"    \"\"\"Generalised passthrough method"},{"line_number":680,"context_line":"    It will grab the context from the threadlocal store and add it to"},{"line_number":681,"context_line":"    the store on the new thread.  This allows for continuity in logging the"}],"source_content_type":"text/x-python","patch_set":13,"id":"835fcbae_e3f282b1","line":678,"updated":"2025-05-26 14:52:57.000000000","message":"ack if i recall correctly you remvoed the _ in a previous commit and now we are making it \"private\" again.\n\n+1","commit_id":"877c662c605585f6b1c49d56b77e3ae542c1bf29"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"da7e2887ace090d4bf725cdfc5cd9d2671adde13","unresolved":false,"context_lines":[{"line_number":734,"context_line":"            \"The %s pool does not have free threads so the tasks %s is \""},{"line_number":735,"context_line":"            \"queued. If this happens repeatedly then the size of the pool is \""},{"line_number":736,"context_line":"            \"too small for the load or there are stuck threads filling the \""},{"line_number":737,"context_line":"            \"pool.\", executor.name, func)"},{"line_number":738,"context_line":"    return pass_context(executor.submit, func, *args, **kwargs)"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"b399813e_2139f193","line":737,"updated":"2025-05-26 14:52:57.000000000","message":"ok this is kind fo unrelated but it make sense.\nit will be useful for operator to see this warning to consider adjusting the size of there pools so adding this work for me.","commit_id":"877c662c605585f6b1c49d56b77e3ae542c1bf29"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"52fd4df90f758622e9aeb5d3bab0b50db3d1b244","unresolved":true,"context_lines":[{"line_number":726,"context_line":"    if concurrency_mode_threading():"},{"line_number":727,"context_line":"        idle_workers \u003d len([w for w in executor._workers if w.idle]) \u003e 0"},{"line_number":728,"context_line":"        queued_tasks \u003d executor._work_queue.qsize() \u003e 0"},{"line_number":729,"context_line":"        return queued_tasks and not idle_workers"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    return False"},{"line_number":732,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"a433f60a_cd2211de","line":729,"updated":"2025-06-13 14:08:29.000000000","message":"This now avoids a possible false positive when we nova submitted tasks to the executor is bursts and therefore there was queued work as well as idle executors not yet scheduled to pick up the task from the queue. Now we check for both conditions. We will see if this reduce the warnings in the nova-api logs on the top of the series in nova-next.","commit_id":"bd41a9223f62a7b2cbf1d81e966b9b085a720b1e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2d78cdcf9637256c8f8a20b9bca78949ccdce01b","unresolved":false,"context_lines":[{"line_number":726,"context_line":"    if concurrency_mode_threading():"},{"line_number":727,"context_line":"        idle_workers \u003d len([w for w in executor._workers if w.idle]) \u003e 0"},{"line_number":728,"context_line":"        queued_tasks \u003d executor._work_queue.qsize() \u003e 0"},{"line_number":729,"context_line":"        return queued_tasks and not idle_workers"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    return False"},{"line_number":732,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"0da411b1_48f8e3ba","line":729,"in_reply_to":"a433f60a_cd2211de","updated":"2025-07-01 09:15:08.000000000","message":"Done","commit_id":"bd41a9223f62a7b2cbf1d81e966b9b085a720b1e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4a7a3d06d6ee2f36705257fb186cd19d2ebba781","unresolved":true,"context_lines":[{"line_number":722,"context_line":"    return spawn_on(_get_default_green_pool(), func, *args, **kwargs)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"def _executor_is_full(executor):"},{"line_number":726,"context_line":"    if concurrency_mode_threading():"},{"line_number":727,"context_line":"        idle_workers \u003d len([w for w in executor._workers if w.idle]) \u003e 0"},{"line_number":728,"context_line":"        queued_tasks \u003d executor._work_queue.qsize() \u003e 0"}],"source_content_type":"text/x-python","patch_set":20,"id":"f0bbcd0a_b4e06ef1","line":725,"updated":"2025-06-30 14:53:45.000000000","message":"should we synchronize this call ? could we have a race condition when checking the workers ?","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"980dedf584c9c7c1dff07c8c90a88fba6de8d393","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    return spawn_on(_get_default_green_pool(), func, *args, **kwargs)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"def _executor_is_full(executor):"},{"line_number":726,"context_line":"    if concurrency_mode_threading():"},{"line_number":727,"context_line":"        idle_workers \u003d len([w for w in executor._workers if w.idle]) \u003e 0"},{"line_number":728,"context_line":"        queued_tasks \u003d executor._work_queue.qsize() \u003e 0"}],"source_content_type":"text/x-python","patch_set":20,"id":"6674511b_3cc9a540","line":725,"in_reply_to":"361b921f_ae74bd99","updated":"2025-07-01 15:18:22.000000000","message":"Ack, cool, thanks !","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c8ea0a6497522887594aae754199d14d93d677a3","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    return spawn_on(_get_default_green_pool(), func, *args, **kwargs)"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"def _executor_is_full(executor):"},{"line_number":726,"context_line":"    if concurrency_mode_threading():"},{"line_number":727,"context_line":"        idle_workers \u003d len([w for w in executor._workers if w.idle]) \u003e 0"},{"line_number":728,"context_line":"        queued_tasks \u003d executor._work_queue.qsize() \u003e 0"}],"source_content_type":"text/x-python","patch_set":20,"id":"361b921f_ae74bd99","line":725,"in_reply_to":"f0bbcd0a_b4e06ef1","updated":"2025-07-01 09:14:31.000000000","message":"Multiple PRC handlers can submit work in parallel to the same executor. The executor.submit is thread safe. But yes this helper is not thread safe today. The result of a race condition is a false positive warning or a missed warning if submit happens between the idle_workers and queued_tasks assignment. We can make it thread safe with a lock.\n\nNote that this whole function depends on the internals of the executor. So I intentionally decided to re-use the lock of the executor as well. The idea behind this that this whole logic should go to the futurist lib as part of the executor class eventually.","commit_id":"9315a83e8561f2f83717f0a95fb436dca5153b10"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"980dedf584c9c7c1dff07c8c90a88fba6de8d393","unresolved":true,"context_lines":[{"line_number":726,"context_line":"    if concurrency_mode_threading():"},{"line_number":727,"context_line":"        # TODO(gibi): Move this whole logic to futurist ThreadPoolExecutor"},{"line_number":728,"context_line":"        # so that we can avoid accessing the internals of the executor"},{"line_number":729,"context_line":"        with executor._shutdown_lock:"},{"line_number":730,"context_line":"            idle_workers \u003d len([w for w in executor._workers if w.idle]) \u003e 0"},{"line_number":731,"context_line":"            queued_tasks \u003d executor._work_queue.qsize() \u003e 0"},{"line_number":732,"context_line":"            return queued_tasks and not idle_workers"}],"source_content_type":"text/x-python","patch_set":21,"id":"286d42a6_efed280f","line":729,"updated":"2025-07-01 15:18:22.000000000","message":"thanks 😊","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"554962ffc21a47522d296be64238880a92cf8109","unresolved":false,"context_lines":[{"line_number":726,"context_line":"    if concurrency_mode_threading():"},{"line_number":727,"context_line":"        # TODO(gibi): Move this whole logic to futurist ThreadPoolExecutor"},{"line_number":728,"context_line":"        # so that we can avoid accessing the internals of the executor"},{"line_number":729,"context_line":"        with executor._shutdown_lock:"},{"line_number":730,"context_line":"            idle_workers \u003d len([w for w in executor._workers if w.idle]) \u003e 0"},{"line_number":731,"context_line":"            queued_tasks \u003d executor._work_queue.qsize() \u003e 0"},{"line_number":732,"context_line":"            return queued_tasks and not idle_workers"}],"source_content_type":"text/x-python","patch_set":21,"id":"0f9105ed_bae39710","line":729,"in_reply_to":"286d42a6_efed280f","updated":"2025-07-02 12:25:09.000000000","message":"Acknowledged","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d00c3da06617481f444b39dac106f81d17f02d4","unresolved":true,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"    if _executor_is_full(executor):"},{"line_number":746,"context_line":"        LOG.warning("},{"line_number":747,"context_line":"            \"The %s pool does not have free threads so the tasks %s is \""},{"line_number":748,"context_line":"            \"queued. If this happens repeatedly then the size of the pool is \""},{"line_number":749,"context_line":"            \"too small for the load or there are stuck threads filling the \""},{"line_number":750,"context_line":"            \"pool.\", executor.name, func)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5b89b0d1_32b637b3","line":747,"range":{"start_line":747,"start_character":59,"end_line":747,"end_character":64},"updated":"2025-07-01 18:42:13.000000000","message":"\"task\"","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"554962ffc21a47522d296be64238880a92cf8109","unresolved":false,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"    if _executor_is_full(executor):"},{"line_number":746,"context_line":"        LOG.warning("},{"line_number":747,"context_line":"            \"The %s pool does not have free threads so the tasks %s is \""},{"line_number":748,"context_line":"            \"queued. If this happens repeatedly then the size of the pool is \""},{"line_number":749,"context_line":"            \"too small for the load or there are stuck threads filling the \""},{"line_number":750,"context_line":"            \"pool.\", executor.name, func)"}],"source_content_type":"text/x-python","patch_set":21,"id":"961c4896_9ec256ad","line":747,"range":{"start_line":747,"start_character":59,"end_line":747,"end_character":64},"in_reply_to":"5b89b0d1_32b637b3","updated":"2025-07-02 12:25:09.000000000","message":"Done","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0d00c3da06617481f444b39dac106f81d17f02d4","unresolved":true,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"    if _executor_is_full(executor):"},{"line_number":746,"context_line":"        LOG.warning("},{"line_number":747,"context_line":"            \"The %s pool does not have free threads so the tasks %s is \""},{"line_number":748,"context_line":"            \"queued. If this happens repeatedly then the size of the pool is \""},{"line_number":749,"context_line":"            \"too small for the load or there are stuck threads filling the \""},{"line_number":750,"context_line":"            \"pool.\", executor.name, func)"},{"line_number":751,"context_line":"    return pass_context(executor.submit, func, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":21,"id":"8fff7635_c72c4232","line":748,"range":{"start_line":747,"start_character":68,"end_line":748,"end_character":19},"updated":"2025-07-01 18:42:13.000000000","message":"\"will be queued\" seems more appropriate to me","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"554962ffc21a47522d296be64238880a92cf8109","unresolved":false,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"    if _executor_is_full(executor):"},{"line_number":746,"context_line":"        LOG.warning("},{"line_number":747,"context_line":"            \"The %s pool does not have free threads so the tasks %s is \""},{"line_number":748,"context_line":"            \"queued. If this happens repeatedly then the size of the pool is \""},{"line_number":749,"context_line":"            \"too small for the load or there are stuck threads filling the \""},{"line_number":750,"context_line":"            \"pool.\", executor.name, func)"},{"line_number":751,"context_line":"    return pass_context(executor.submit, func, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":21,"id":"8772f169_5aeff255","line":748,"range":{"start_line":747,"start_character":68,"end_line":748,"end_character":19},"in_reply_to":"8fff7635_c72c4232","updated":"2025-07-02 12:25:09.000000000","message":"Done","commit_id":"05ba913a302ae778c7559937439714c07eb39eba"}]}
