)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b1d1492f72fd0db4e4a69079a3d1ea615293f5dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b73d81bb_4b0d5535","updated":"2025-10-03 14:30:02.000000000","message":"Eventlet job log[1]:\n```\nSep 15 20:20:13.033780 npdeaa59015e9a4 watcher-decision-engine[92981]: DEBUG watcher.common.executor [None req-8127299a-1d56-496a-b6ef-b07a689e61ef None None] State of background-scheduler-tp GreenThreadPoolExecutor when submitting a new task: workers: 0, max_workers: 10, work queued length: 0, stats: \u003cExecutorStatistics object at 0x774e2d814300 (failures\u003d0, executed\u003d1, runtime\u003d0.04, cancelled\u003d0)\u003e {{(pid\u003d92981) log_executor_stats /opt/stack/watcher/watcher/common/executor.py:63}}\n```\nThreading job log[2]:\n```\nSep 15 22:27:45.096285 np815ed263956a4 watcher-decision-engine[100822]: DEBUG watcher.common.executor [-] State of background-scheduler-tp ThreadPoolExecutor when submitting a new task: max_workers: 10, workers: 1, idle workers: 1, queued work: 0, stats: \u003cExecutorStatistics object at 0x7237e9039cc0 (failures\u003d0, executed\u003d1, runtime\u003d0.06, cancelled\u003d0)\u003e {{(pid\u003d100822) log_executor_stats /opt/stack/watcher/watcher/common/executor.py:54}}\n```\n\n[1] https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_821/openstack/821aa1f22f2c48729b20c7e0fa165375/controller/logs/screen-watcher-decision-engine.txt\n[2] https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_ad6/openstack/ad693dd97941489aa43de678b9c6beee/controller/logs/screen-watcher-decision-engine.txt","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a12ef6ee639ff282c18bca8b7bc024003f4d2159","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"2114c2bc_d8e70b0f","updated":"2025-10-07 19:06:18.000000000","message":"Thanks Joan!","commit_id":"db1c139883a6cdfcd0bd8a8b1579f29edae01bd1"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"906a85b43de69ee667197a3137c7d6b4f7680a89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ed1ffd27_9e2d98bc","updated":"2025-10-08 11:13:46.000000000","message":"looks good, thanks for the changes!","commit_id":"f8ede24051e907c809b724d6b8fdba5c93aa528d"}],"watcher/common/executor.py":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d3c9469b098554355cafec1cbdf7dea8218caac9","unresolved":true,"context_lines":[{"line_number":46,"context_line":"    if not CONF.print_thread_pool_stats:"},{"line_number":47,"context_line":"        return"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    name \u003d getattr(executor, \"name\", \"unknown\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"4310376d_25a91e01","line":49,"updated":"2025-10-03 15:24:22.000000000","message":"why can\u0027t we simply do `executor.name` here, it looks to me that everywhere we call `log_executor_stats` we\u0027re setting the name","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"906a85b43de69ee667197a3137c7d6b4f7680a89","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    if not CONF.print_thread_pool_stats:"},{"line_number":47,"context_line":"        return"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    name \u003d getattr(executor, \"name\", \"unknown\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"a7b87564_71d65ca8","line":49,"in_reply_to":"09a033e6_31f60081","updated":"2025-10-08 11:13:46.000000000","message":"Done","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a12ef6ee639ff282c18bca8b7bc024003f4d2159","unresolved":true,"context_lines":[{"line_number":46,"context_line":"    if not CONF.print_thread_pool_stats:"},{"line_number":47,"context_line":"        return"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    name \u003d getattr(executor, \"name\", \"unknown\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"09a033e6_31f60081","line":49,"in_reply_to":"4310376d_25a91e01","updated":"2025-10-07 19:06:18.000000000","message":"since name is not an attribute from executor, i will prefer to remove this line, and provide name as an optional parameter. As you mentioned, all calls to this debug function can provide a threadpool name.","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d3c9469b098554355cafec1cbdf7dea8218caac9","unresolved":true,"context_lines":[{"line_number":56,"context_line":"            \"max_workers: %d, workers: %d, idle workers: %d, queued work: %d, \""},{"line_number":57,"context_line":"            \"stats: %s\","},{"line_number":58,"context_line":"            name,"},{"line_number":59,"context_line":"            executor._max_workers, len(executor._workers),"},{"line_number":60,"context_line":"            len([w for w in executor._workers if w.idle]),"},{"line_number":61,"context_line":"            executor._work_queue.qsize(), stats)"},{"line_number":62,"context_line":"    elif isinstance(executor, futurist.GreenThreadPoolExecutor):"}],"source_content_type":"text/x-python","patch_set":4,"id":"67d2f1b9_3dfa2fde","line":59,"updated":"2025-10-03 15:24:22.000000000","message":"we\u0027re accessing \"private\" attributes here, it\u0027s probably very low risk, but I think we should consider accessing them under a try/except to prevent erros if the attributes were to change in the future","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a12ef6ee639ff282c18bca8b7bc024003f4d2159","unresolved":true,"context_lines":[{"line_number":56,"context_line":"            \"max_workers: %d, workers: %d, idle workers: %d, queued work: %d, \""},{"line_number":57,"context_line":"            \"stats: %s\","},{"line_number":58,"context_line":"            name,"},{"line_number":59,"context_line":"            executor._max_workers, len(executor._workers),"},{"line_number":60,"context_line":"            len([w for w in executor._workers if w.idle]),"},{"line_number":61,"context_line":"            executor._work_queue.qsize(), stats)"},{"line_number":62,"context_line":"    elif isinstance(executor, futurist.GreenThreadPoolExecutor):"}],"source_content_type":"text/x-python","patch_set":4,"id":"c2194b84_96f2d3f3","line":59,"in_reply_to":"67d2f1b9_3dfa2fde","updated":"2025-10-07 19:06:18.000000000","message":"right, I think that a try/except for all should be fine, instead of multiple getattr around.","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"906a85b43de69ee667197a3137c7d6b4f7680a89","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            \"max_workers: %d, workers: %d, idle workers: %d, queued work: %d, \""},{"line_number":57,"context_line":"            \"stats: %s\","},{"line_number":58,"context_line":"            name,"},{"line_number":59,"context_line":"            executor._max_workers, len(executor._workers),"},{"line_number":60,"context_line":"            len([w for w in executor._workers if w.idle]),"},{"line_number":61,"context_line":"            executor._work_queue.qsize(), stats)"},{"line_number":62,"context_line":"    elif isinstance(executor, futurist.GreenThreadPoolExecutor):"}],"source_content_type":"text/x-python","patch_set":4,"id":"4adbe93e_acba1b35","line":59,"in_reply_to":"c2194b84_96f2d3f3","updated":"2025-10-08 11:13:46.000000000","message":"Done","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"}],"watcher/tests/common/test_executor.py":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"d3c9469b098554355cafec1cbdf7dea8218caac9","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        executor.log_executor_stats(pool_executor)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        m_log_debug.assert_called_once_with("},{"line_number":53,"context_line":"            \"State of %s GreenThreadPoolExecutor when submitting a new task: \""},{"line_number":54,"context_line":"            \"workers: %d, max_workers: %d, work queued length: %d, stats: %s\","},{"line_number":55,"context_line":"            pool_executor.name,"},{"line_number":56,"context_line":"            len(pool_executor._pool.coroutines_running),"}],"source_content_type":"text/x-python","patch_set":4,"id":"4cc7338a_ea2b702c","line":53,"updated":"2025-10-03 15:24:22.000000000","message":"nit: I think we shoul be adding this strings as f-strings instead of using old-style formatting","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"906a85b43de69ee667197a3137c7d6b4f7680a89","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        executor.log_executor_stats(pool_executor)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        m_log_debug.assert_called_once_with("},{"line_number":53,"context_line":"            \"State of %s GreenThreadPoolExecutor when submitting a new task: \""},{"line_number":54,"context_line":"            \"workers: %d, max_workers: %d, work queued length: %d, stats: %s\","},{"line_number":55,"context_line":"            pool_executor.name,"},{"line_number":56,"context_line":"            len(pool_executor._pool.coroutines_running),"}],"source_content_type":"text/x-python","patch_set":4,"id":"6a1e9819_8638b773","line":53,"in_reply_to":"21500a20_6fb3ccd0","updated":"2025-10-08 11:13:46.000000000","message":"Done","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"a12ef6ee639ff282c18bca8b7bc024003f4d2159","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        executor.log_executor_stats(pool_executor)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        m_log_debug.assert_called_once_with("},{"line_number":53,"context_line":"            \"State of %s GreenThreadPoolExecutor when submitting a new task: \""},{"line_number":54,"context_line":"            \"workers: %d, max_workers: %d, work queued length: %d, stats: %s\","},{"line_number":55,"context_line":"            pool_executor.name,"},{"line_number":56,"context_line":"            len(pool_executor._pool.coroutines_running),"}],"source_content_type":"text/x-python","patch_set":4,"id":"21500a20_6fb3ccd0","line":53,"in_reply_to":"4cc7338a_ea2b702c","updated":"2025-10-07 19:06:18.000000000","message":"agree, we now should only use f-strings.","commit_id":"a71cf4d8866204e97ec14e94658015f7e9a503e3"}]}
