)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":false,"context_lines":[{"line_number":11,"context_line":"submitted but not more frequently than 60 seconds."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Most of the support should come from futurist but it isn\u0027t."},{"line_number":14,"context_line":"We can add them later there."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Id4244f5ae0fd49c99af2898789cdd510859e150d"},{"line_number":17,"context_line":"Signed-off-by: Balazs Gibizer \u003cgibi@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"c264695e_b8af17af","line":14,"updated":"2025-07-21 14:41:54.000000000","message":"fine by that.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"48dc99dac25f06131619150987500f0f5cf00d06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"98f7b8eb_5f0554ad","updated":"2025-04-29 06:48:58.000000000","message":"nova-scheduler still  run monkey patched in CI :/\nhttps://zuul.opendev.org/t/openstack/build/2d0cf31d7f30412fbb9649299e3aea99/log/controller/logs/screen-n-sch.txt#12-13","commit_id":"0f5297d357b746a8c5f117f8b401b1b666a1711d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2016d270812efc1cba459c2af100faa224ea1568","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"dfd4232d_091714f4","updated":"2025-06-11 10:04:01.000000000","message":"Soft -1 just for notification of a little comment.\nOtherwise this patch looks good to me.","commit_id":"b5c344209b6edccd52fe8b867d991effd865bc7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d730d23b302e8d568e79c40d348331d9857eaa44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"0bb8cd5b_db859607","in_reply_to":"dfd4232d_091714f4","updated":"2025-06-20 09:41:17.000000000","message":"Done","commit_id":"b5c344209b6edccd52fe8b867d991effd865bc7f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"21d4b516_f0c3531b","updated":"2025-07-21 14:41:54.000000000","message":"I wonder whether somewhere in the series we publish the numbers in some CI Tempest jobs, but I\u0027ll see it after.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c464316796c64c3d11b665493adb4e62fcacb01b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"210e79fa_1343e5fd","updated":"2025-07-24 14:04:46.000000000","message":"recheck bug 2116852","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3d3154898613de80f9037271c1fd6851e6e166d3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":33,"id":"59e56014_17a32caa","in_reply_to":"21d4b516_f0c3531b","updated":"2025-07-21 15:29:57.000000000","message":"You can look at the nova-next job in (or after) https://review.opendev.org/c/openstack/nova/+/948450/32?usp\u003drelated-change as that enables the stat reporting in nova-next. If you feel you want to see the stats in all our jobs then I can add that to this patch.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e1ee735548fb51b2d19306c6492d952d2bfb6b22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"d0bec56b_65bad7d6","updated":"2025-07-28 13:09:11.000000000","message":"Definitely +2 for the patchset revision. As I said, amazed I am.","commit_id":"ae3ae0700d507644db951a68d4a44a60d8d11e06"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0b62a460ec7954bbb7cf7b3c817249d6950856c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"28b2cca7_526cfc4d","updated":"2025-07-29 14:30:13.000000000","message":"I\u0027m not really sure what all stats we will want/need for tuning at this point, but having the knob and a thing we can add to is good enough for now I think.","commit_id":"ae3ae0700d507644db951a68d4a44a60d8d11e06"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6239b7c9316e18079b21eafac9a572d9887b63e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"a5a5d7d9_f2229e1f","updated":"2025-07-25 18:10:33.000000000","message":"recheck ceph download error\n```\n2025-07-25 15:45:15.234 | ++ /opt/stack/devstack-plugin-ceph/devstack/lib/cephadm:get_cephadm:177 :   curl -f -O https://download.ceph.com/rpm-/el9/noarch/cephadm\n6655\t2025-07-25 15:45:15.251 |   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n6656\t2025-07-25 15:45:15.251 |                                  Dload  Upload   Total   Spent    Left  Speed\n6657\t2025-07-25 15:45:15.358 | \n  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\n  0   146    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\n6658\t2025-07-25 15:45:15.358 | curl: (22) The requested URL returned error: 404\n6659\t2025-07-25 15:45:15.364 | + /opt/stack/devstack-plugin-ceph/devstack/lib/cephadm:get_cephadm:1 :   exit_trap\n```","commit_id":"ae3ae0700d507644db951a68d4a44a60d8d11e06"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7a4b9e8b6c9ffa8f1169dcc1d53e594111d66ae5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"8d794f3e_ff763e12","updated":"2025-07-25 15:11:30.000000000","message":"switched from utcnow to monotonic for safety","commit_id":"ae3ae0700d507644db951a68d4a44a60d8d11e06"}],"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":"874b99dd3f37d75756c92e8b8368d85a646f288e","unresolved":false,"context_lines":[{"line_number":1609,"context_line":"            args)"},{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"        self.work.set()"},{"line_number":1612,"context_line":"        running.result()"},{"line_number":1613,"context_line":""},{"line_number":1614,"context_line":"    @mock.patch.object("},{"line_number":1615,"context_line":"        utils, \u0027concurrency_mode_threading\u0027, new\u003dmock.Mock(return_value\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":21,"id":"dad865bc_96b3184f","line":1612,"updated":"2025-05-27 12:47:17.000000000","message":"here and below I moved this to addCleanup as we discussed earlier in this patch series.","commit_id":"9d1b9aed9fa115aeb06ad5c38364e105838f1b3d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":false,"context_lines":[{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"        args \u003d mock_debug.mock_calls[3][1]"},{"line_number":1616,"context_line":"        self.assertEqual("},{"line_number":1617,"context_line":"            (\u0027State of %s GreenThreadPoolExecutor when submitting a new task: \u0027"},{"line_number":1618,"context_line":"             \u0027workers: %d, max_workers: %d, work queued length: %d, stats: %s\u0027,"},{"line_number":1619,"context_line":"             \u0027nova.tests.unit.test_utils.ExecutorStatsTestCase.\u0027"},{"line_number":1620,"context_line":"             \u0027test_stats_logged_eventlet.default\u0027, 1, 1000, 0),"}],"source_content_type":"text/x-python","patch_set":33,"id":"3364fad5_4d55fec4","line":1617,"range":{"start_line":1617,"start_character":26,"end_line":1617,"end_character":49},"updated":"2025-07-21 14:41:54.000000000","message":"cool, that\u0027s correct as we use eventlet here.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":false,"context_lines":[{"line_number":1621,"context_line":"            args[0:5])"},{"line_number":1622,"context_line":"        stats \u003d args[5]"},{"line_number":1623,"context_line":"        self.assertEqual(1, stats.failures)"},{"line_number":1624,"context_line":"        self.assertEqual(2, stats.executed)"},{"line_number":1625,"context_line":"        self.assertEqual(0, stats.cancelled)"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    @mock.patch.object("}],"source_content_type":"text/x-python","patch_set":33,"id":"a975b5e2_56af563a","line":1624,"updated":"2025-07-21 14:41:54.000000000","message":"note to myself: that\u0027s because we had two tasks executed as said in L1610.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":false,"context_lines":[{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"        args \u003d mock_debug.mock_calls[5][1]"},{"line_number":1657,"context_line":"        self.assertEqual("},{"line_number":1658,"context_line":"            (\u0027State of %s ThreadPoolExecutor when submitting a new task: \u0027"},{"line_number":1659,"context_line":"             \u0027max_workers: %d, workers: %d, idle workers: %d, queued work: %d,\u0027"},{"line_number":1660,"context_line":"             \u0027 stats: %s\u0027,"},{"line_number":1661,"context_line":"             \u0027nova.tests.unit.test_utils.ExecutorStatsTestCase.\u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"b929fac7_da9ca3fa","line":1658,"range":{"start_line":1658,"start_character":26,"end_line":1658,"end_character":44},"updated":"2025-07-21 14:41:54.000000000","message":"and here we use concurrency mode (ie. threading)","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":false,"context_lines":[{"line_number":1665,"context_line":"        stats \u003d args[6]"},{"line_number":1666,"context_line":"        self.assertEqual(1, stats.failures)"},{"line_number":1667,"context_line":"        self.assertEqual(2, stats.executed)"},{"line_number":1668,"context_line":"        self.assertEqual(1, stats.cancelled)"},{"line_number":1669,"context_line":""},{"line_number":1670,"context_line":"    @mock.patch.object(utils.LOG, \u0027debug\u0027)"},{"line_number":1671,"context_line":"    def test_stats_skipped_if_too_frequent(self, mock_debug):"}],"source_content_type":"text/x-python","patch_set":33,"id":"23e75025_50c1fc72","line":1668,"updated":"2025-07-21 14:41:54.000000000","message":"given we cancelled the task, we see the right number here.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"        mock_debug.reset_mock()"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        utils.spawn(self._task_finishes).result()"},{"line_number":1678,"context_line":"        mock_debug.assert_not_called()"},{"line_number":1679,"context_line":""},{"line_number":1680,"context_line":"    @mock.patch.object(utils.LOG, \u0027debug\u0027)"},{"line_number":1681,"context_line":"    def test_stats_skipped_disabled(self, mock_info):"}],"source_content_type":"text/x-python","patch_set":33,"id":"7c6dc3a5_8d91788c","line":1678,"updated":"2025-07-21 14:41:54.000000000","message":"++","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"}],"nova/utils.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"801e2da65ba300ed7810f50ef1b1b031b6f2ca98","unresolved":true,"context_lines":[{"line_number":1295,"context_line":"            \"workers: %d, max_workers: %d, work queued length: %d\","},{"line_number":1296,"context_line":"            name,"},{"line_number":1297,"context_line":"            len(executor._pool.coroutines_running), executor._pool.size,"},{"line_number":1298,"context_line":"            executor._delayed_work.unfinished_tasks)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ddd8d60e_3720effe","line":1298,"updated":"2025-04-28 22:50:40.000000000","message":"so this branch pringed\n\n State of scatter-gather GreenThreadPoolExecutor: workers: 0, max_workers: 1000, work queued length: 0\n \n so the hack in the previosu patch didnt result in using the non mokeypstached codepath. im not entirely sure why\n \n https://b0a2d741e15563a46957-1f0fc773a02f07142ed8f243d3787b76.ssl.cf1.rackcdn.com/openstack/2d0cf31d7f30412fbb9649299e3aea99/controller/logs/screen-n-sch.txt","commit_id":"0f5297d357b746a8c5f117f8b401b1b666a1711d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b859676312f1072db0bf738babcf52ccfaec562c","unresolved":false,"context_lines":[{"line_number":1295,"context_line":"            \"workers: %d, max_workers: %d, work queued length: %d\","},{"line_number":1296,"context_line":"            name,"},{"line_number":1297,"context_line":"            len(executor._pool.coroutines_running), executor._pool.size,"},{"line_number":1298,"context_line":"            executor._delayed_work.unfinished_tasks)"}],"source_content_type":"text/x-python","patch_set":5,"id":"6f69c1c6_de511011","line":1298,"in_reply_to":"684c5ff7_3fbdd3ad","updated":"2025-06-03 13:03:29.000000000","message":"Done","commit_id":"0f5297d357b746a8c5f117f8b401b1b666a1711d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a04b9776ed4cede53bef03e5cb818b9b9c261a09","unresolved":true,"context_lines":[{"line_number":1295,"context_line":"            \"workers: %d, max_workers: %d, work queued length: %d\","},{"line_number":1296,"context_line":"            name,"},{"line_number":1297,"context_line":"            len(executor._pool.coroutines_running), executor._pool.size,"},{"line_number":1298,"context_line":"            executor._delayed_work.unfinished_tasks)"}],"source_content_type":"text/x-python","patch_set":5,"id":"684c5ff7_3fbdd3ad","line":1298,"in_reply_to":"ddd8d60e_3720effe","updated":"2025-04-29 08:49:02.000000000","message":"the problem is that monkey patching happens in `nova/cmd/__init__.py` so the hack to force the env var happens too late. Unfortunately in `nova/cmd/__init__.py` I cannot selectively apply the hack for just nova-scheduler. I\u0027m moving to a devstack hack that will eventually become a proper devstack switch","commit_id":"0f5297d357b746a8c5f117f8b401b1b666a1711d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"625496bdbb3e09ba9f94732e5b10fde04a0a2ba0","unresolved":true,"context_lines":[{"line_number":1326,"context_line":"    SCATTER_GATHER_EXECUTOR \u003d None"},{"line_number":1327,"context_line":""},{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"def _log_executor_stats(executor):"},{"line_number":1330,"context_line":"    last_stats \u003d getattr(executor, \"last_stats\", None)"},{"line_number":1331,"context_line":"    name \u003d getattr(executor, \"name\", \"unknown\")"},{"line_number":1332,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"8b305ed9_fcd50cd5","line":1329,"updated":"2025-06-13 10:40:39.000000000","message":"I need to implement the way to turn it off with -1. And I should change the default to -1. And then change the nova-next commit to set it in our testing to a small value.","commit_id":"b5c344209b6edccd52fe8b867d991effd865bc7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"114554ed3aafe7a60275034590a07ffb93967ac6","unresolved":false,"context_lines":[{"line_number":1326,"context_line":"    SCATTER_GATHER_EXECUTOR \u003d None"},{"line_number":1327,"context_line":""},{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"def _log_executor_stats(executor):"},{"line_number":1330,"context_line":"    last_stats \u003d getattr(executor, \"last_stats\", None)"},{"line_number":1331,"context_line":"    name \u003d getattr(executor, \"name\", \"unknown\")"},{"line_number":1332,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"f485bd84_62e32cf4","line":1329,"in_reply_to":"8b305ed9_fcd50cd5","updated":"2025-06-13 13:06:35.000000000","message":"* I implemented the -1 to disable the logging\n* I made -1 the default\n* I moved all these logging to debug level","commit_id":"b5c344209b6edccd52fe8b867d991effd865bc7f"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2016d270812efc1cba459c2af100faa224ea1568","unresolved":true,"context_lines":[{"line_number":1339,"context_line":"    executor.last_stats \u003d timeutils.utcnow()"},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":1342,"context_line":"    LOG.info(\"Stats of %s executor: %s\", name, stats)"},{"line_number":1343,"context_line":""},{"line_number":1344,"context_line":"    if isinstance(executor, futurist.ThreadPoolExecutor):"},{"line_number":1345,"context_line":"        LOG.info("}],"source_content_type":"text/x-python","patch_set":23,"id":"c8b15d73_41d86c34","line":1342,"range":{"start_line":1342,"start_character":14,"end_line":1342,"end_character":39},"updated":"2025-06-11 10:04:01.000000000","message":"I wonder if we should note that this is the state before spawning a new request.\n\nSomething like:\n\"Current stats of %s executor: %s, spawning a new thread...\"","commit_id":"b5c344209b6edccd52fe8b867d991effd865bc7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"114554ed3aafe7a60275034590a07ffb93967ac6","unresolved":false,"context_lines":[{"line_number":1339,"context_line":"    executor.last_stats \u003d timeutils.utcnow()"},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":1342,"context_line":"    LOG.info(\"Stats of %s executor: %s\", name, stats)"},{"line_number":1343,"context_line":""},{"line_number":1344,"context_line":"    if isinstance(executor, futurist.ThreadPoolExecutor):"},{"line_number":1345,"context_line":"        LOG.info("}],"source_content_type":"text/x-python","patch_set":23,"id":"4fd061f6_c8089536","line":1342,"range":{"start_line":1342,"start_character":14,"end_line":1342,"end_character":39},"in_reply_to":"5c41794d_d1eaf08e","updated":"2025-06-13 13:06:35.000000000","message":"Done","commit_id":"b5c344209b6edccd52fe8b867d991effd865bc7f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"625496bdbb3e09ba9f94732e5b10fde04a0a2ba0","unresolved":true,"context_lines":[{"line_number":1339,"context_line":"    executor.last_stats \u003d timeutils.utcnow()"},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":1342,"context_line":"    LOG.info(\"Stats of %s executor: %s\", name, stats)"},{"line_number":1343,"context_line":""},{"line_number":1344,"context_line":"    if isinstance(executor, futurist.ThreadPoolExecutor):"},{"line_number":1345,"context_line":"        LOG.info("}],"source_content_type":"text/x-python","patch_set":23,"id":"5c41794d_d1eaf08e","line":1342,"range":{"start_line":1342,"start_character":14,"end_line":1342,"end_character":39},"in_reply_to":"c8b15d73_41d86c34","updated":"2025-06-13 10:40:39.000000000","message":"yeah I can do that.","commit_id":"b5c344209b6edccd52fe8b867d991effd865bc7f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2a63f6e789e05cce7c42746484784fd715d4d774","unresolved":true,"context_lines":[{"line_number":1353,"context_line":""},{"line_number":1354,"context_line":"    executor.last_stats \u003d timeutils.utcnow()"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    if isinstance(executor, futurist.ThreadPoolExecutor):"},{"line_number":1359,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":33,"id":"6cc71e37_eefe1174","line":1356,"updated":"2025-07-21 14:41:54.000000000","message":"not sure we need to type it but meh.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3d3154898613de80f9037271c1fd6851e6e166d3","unresolved":false,"context_lines":[{"line_number":1353,"context_line":""},{"line_number":1354,"context_line":"    executor.last_stats \u003d timeutils.utcnow()"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"    stats: futurist.ExecutorStatistics \u003d executor.statistics"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    if isinstance(executor, futurist.ThreadPoolExecutor):"},{"line_number":1359,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":33,"id":"8b4404a2_8ad8d862","line":1356,"in_reply_to":"6cc71e37_eefe1174","updated":"2025-07-21 15:29:57.000000000","message":"Acknowledged","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"82f53866968e53aa76d87ab64640574f649218ab","unresolved":true,"context_lines":[{"line_number":1363,"context_line":"            name,"},{"line_number":1364,"context_line":"            executor._max_workers, len(executor._workers),"},{"line_number":1365,"context_line":"            len([w for w in executor._workers if w.idle]),"},{"line_number":1366,"context_line":"            executor._work_queue.qsize(), stats)"},{"line_number":1367,"context_line":"    elif isinstance(executor, futurist.GreenThreadPoolExecutor):"},{"line_number":1368,"context_line":"        LOG.debug("},{"line_number":1369,"context_line":"            \"State of %s GreenThreadPoolExecutor when submitting a new task: \""}],"source_content_type":"text/x-python","patch_set":33,"id":"252acfdc_bf9e80dd","line":1366,"updated":"2025-07-22 09:33:49.000000000","message":"FYI: https://review.opendev.org/c/openstack/futurist/+/955217 will remove the need to access private fields","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"45050c6403e4483043c9d9c9e13d5b1271152536","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"            name,"},{"line_number":1364,"context_line":"            executor._max_workers, len(executor._workers),"},{"line_number":1365,"context_line":"            len([w for w in executor._workers if w.idle]),"},{"line_number":1366,"context_line":"            executor._work_queue.qsize(), stats)"},{"line_number":1367,"context_line":"    elif isinstance(executor, futurist.GreenThreadPoolExecutor):"},{"line_number":1368,"context_line":"        LOG.debug("},{"line_number":1369,"context_line":"            \"State of %s GreenThreadPoolExecutor when submitting a new task: \""}],"source_content_type":"text/x-python","patch_set":33,"id":"fab68e35_dbf2efcc","line":1366,"in_reply_to":"252acfdc_bf9e80dd","updated":"2025-07-22 11:34:32.000000000","message":"Thanks for the pointer. I like the direction there. I commented inline.","commit_id":"de95ed000a105df3bcc08dfa5196aefb5c66ae62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e1ee735548fb51b2d19306c6492d952d2bfb6b22","unresolved":false,"context_lines":[{"line_number":1345,"context_line":"    last_stats \u003d getattr(executor, \"last_stats\", None)"},{"line_number":1346,"context_line":"    name \u003d getattr(executor, \"name\", \"unknown\")"},{"line_number":1347,"context_line":""},{"line_number":1348,"context_line":"    allowed_stat_age \u003d time.monotonic() - CONF.thread_pool_statistic_period"},{"line_number":1349,"context_line":"    if last_stats and last_stats \u003e allowed_stat_age:"},{"line_number":1350,"context_line":"        return"},{"line_number":1351,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"bc7968e0_59f35ab9","line":1348,"range":{"start_line":1348,"start_character":28,"end_line":1348,"end_character":37},"updated":"2025-07-28 13:09:11.000000000","message":"TIL https://docs.python.org/3/library/datetime.html#datetime.datetime.utcnow\n\n#1 : utcnow is deprecated in 3.12\n#2 : even if you use datetime.now(), the precision is a bit effy so it\u0027s recommended to use the time library instead\n#3 time.monotonic gives a float, which is the best for maths.\n\nWoah, I\u0027m amazed by the level of knowledge our Nova developers have.","commit_id":"ae3ae0700d507644db951a68d4a44a60d8d11e06"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0b62a460ec7954bbb7cf7b3c817249d6950856c6","unresolved":false,"context_lines":[{"line_number":1345,"context_line":"    last_stats \u003d getattr(executor, \"last_stats\", None)"},{"line_number":1346,"context_line":"    name \u003d getattr(executor, \"name\", \"unknown\")"},{"line_number":1347,"context_line":""},{"line_number":1348,"context_line":"    allowed_stat_age \u003d time.monotonic() - CONF.thread_pool_statistic_period"},{"line_number":1349,"context_line":"    if last_stats and last_stats \u003e allowed_stat_age:"},{"line_number":1350,"context_line":"        return"},{"line_number":1351,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"46296c0e_4905dec1","line":1348,"range":{"start_line":1348,"start_character":28,"end_line":1348,"end_character":37},"in_reply_to":"bc7968e0_59f35ab9","updated":"2025-07-29 14:30:13.000000000","message":"The real important part of monotonic is that it cannot go backwards, if NTP adjusts the system clock or something similar :)","commit_id":"ae3ae0700d507644db951a68d4a44a60d8d11e06"}]}
