)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"12a39a180296f6f19175221845c141cfb5b5d6ac","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As [1] switched over the implementation of spawn and spawn_n to the same"},{"line_number":10,"context_line":"futurist Executor.submit we can now replace all spawn_n usage with spawn"},{"line_number":11,"context_line":"and drop spawn_n from nova.utils."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"[1]I3494660e1aaa1db46f9f08494cb5817ec7020cc5"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"6219e6a1_9da02cda","line":11,"updated":"2025-05-26 14:48:11.000000000","message":"+1 i abandoned https://review.opendev.org/c/openstack/nova/+/892722 in favor fo this version\n\nthe changes are largely the same.","commit_id":"8e6bd2f2baa330babeb300db460592941864ec11"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6ed48510b31aec311fd8ce217f1e7c3a7a301f94","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"56e9dd04_88308abc","updated":"2025-04-25 09:16:32.000000000","message":"there are still spawn_n calls in the code that seemingly covered by 0 test including tempest.","commit_id":"803a5b5ae53d59769a415edb133219b59e7f9e1f"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"424a4f1bdf04e26672c448f3d549b4a74eef873a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7187203d_c03e1c4f","updated":"2025-06-04 15:43:00.000000000","message":"-1 just for signaling several spawn_n remaining mostly in the fixture docstrings.\nI have checked that spawn_n is not called anymore --\u003e ok.\n\nThis patch looks good to me except minor nits in the fixture.","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f09e883667ef5e1a5272695febd8cfbcec80e13a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"07415770_e105507a","updated":"2025-06-05 13:52:50.000000000","message":"I will clean up the texts.","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef89c3fb07e3dfd5274a1c62305e42c4ed73228f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"3c80a876_0f2cdb5d","updated":"2025-06-16 11:42:32.000000000","message":"recheck \n```\n++ functions:get_extra_file:68              :   wget --progress\u003ddot:giga -t 2 -c https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz -O /opt/stack/devstack/files/etcd-v3.4.27-linux-amd64.tar.gz\n--2025-06-13 11:15:42--  https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz\nResolving github.com (github.com)... 140.82.113.4\nConnecting to github.com (github.com)|140.82.113.4|:443... connected.\nHTTP request sent, awaiting response... 500 Internal Server Error\n2025-06-13 11:15:43 ERROR 500: Internal Server Error.\n```","commit_id":"0a1d68a60f85b0f5b5008f65d58189c05dad0313"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cd7988faea7628a609bf827943fe8f3aa2edfe96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"990f58e0_d32d552a","updated":"2025-06-27 09:54:53.000000000","message":"recheck parent is on the gate now","commit_id":"0a1d68a60f85b0f5b5008f65d58189c05dad0313"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fa03053a773d1a467650a15b5b5ae33a439fa620","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"4a5b2935_98a939b7","updated":"2025-06-24 09:07:32.000000000","message":"that one was way easier to review.","commit_id":"0a1d68a60f85b0f5b5008f65d58189c05dad0313"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"322ad88914d9eeec03002e4913d778b162205618","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"593adb41_a0cda176","updated":"2025-06-25 14:28:04.000000000","message":"this still looks fine to me","commit_id":"0a1d68a60f85b0f5b5008f65d58189c05dad0313"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64d788082b83da69c2b47f72b4754e034a163d07","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"f40c52b5_9c25ca1f","updated":"2025-07-01 08:50:36.000000000","message":"recheck hybrid-plug is expected to be green now","commit_id":"42501ed677fab17d740e2980687d5046cf52a9e7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"65585219efbfbea89b4d9cd9b3ef0da70fcae2e5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"438448e7_5d3c9ac4","updated":"2025-07-02 13:55:00.000000000","message":"Just rebased","commit_id":"81a03ab8245f79d11ff9c0ea97f606e8ea4e192b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a8b974d355575594dd2480f9e28bb68515d2b3f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"c6b40464_acedf369","updated":"2025-07-04 12:29:27.000000000","message":"recheck grenade compute1 did not start as rabbit was not accessible\nhttps://zuul.opendev.org/t/openstack/build/01f1c2c124d341d59670da90f5705acd/log/compute1/logs/screen-n-cpu.txt","commit_id":"81a03ab8245f79d11ff9c0ea97f606e8ea4e192b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec1c2847dcd4110fb8467a48994630943b3c1cbb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"5920edca_e8dea6eb","updated":"2025-07-03 13:05:49.000000000","message":"recheck guest ssh timeout","commit_id":"81a03ab8245f79d11ff9c0ea97f606e8ea4e192b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"21363e3e91fd719f53299509102661fc4104a568","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"83fd9801_0958496f","updated":"2025-07-03 17:22:51.000000000","message":"recheck guest ssh timeout :/","commit_id":"81a03ab8245f79d11ff9c0ea97f606e8ea4e192b"}],"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"781f456e20f5fec34271945ec84f141c1e018e15","unresolved":true,"context_lines":[{"line_number":10983,"context_line":"            else:"},{"line_number":10984,"context_line":"                LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":10985,"context_line":"                self._syncs_in_progress[uuid] \u003d True"},{"line_number":10986,"context_line":"                nova.utils.pass_context(self._sync_power_pool.spawn,"},{"line_number":10987,"context_line":"                                        _sync,"},{"line_number":10988,"context_line":"                                        db_instance)"},{"line_number":10989,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"8430e5f9_ae654974","line":10986,"updated":"2025-07-01 13:46:13.000000000","message":"Are we expecting this call pattern to remain forever? I would hope we could have a `spawn_in_pool(pool, **args)` helper that does the `pass_context()` and calls the pool\u0027s `spawn()`. It seems error-prone for any new code to have to call `pass_context()` to do a pooled spawn and also harder to read.\n\nAsking here because I expected this to be the patch where we converge on new spawn methods, but perhaps it\u0027s later?","commit_id":"42501ed677fab17d740e2980687d5046cf52a9e7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7bacc0b574ff2a5653474eaa18dad47f32b552d0","unresolved":false,"context_lines":[{"line_number":10983,"context_line":"            else:"},{"line_number":10984,"context_line":"                LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":10985,"context_line":"                self._syncs_in_progress[uuid] \u003d True"},{"line_number":10986,"context_line":"                nova.utils.pass_context(self._sync_power_pool.spawn,"},{"line_number":10987,"context_line":"                                        _sync,"},{"line_number":10988,"context_line":"                                        db_instance)"},{"line_number":10989,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"e3c39135_be51ac91","line":10986,"in_reply_to":"51623eaf_cf6e1cd6","updated":"2025-07-02 10:55:43.000000000","message":"noted","commit_id":"42501ed677fab17d740e2980687d5046cf52a9e7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e4c54e4529da68c27105252bb23bea58b6e9b229","unresolved":true,"context_lines":[{"line_number":10983,"context_line":"            else:"},{"line_number":10984,"context_line":"                LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":10985,"context_line":"                self._syncs_in_progress[uuid] \u003d True"},{"line_number":10986,"context_line":"                nova.utils.pass_context(self._sync_power_pool.spawn,"},{"line_number":10987,"context_line":"                                        _sync,"},{"line_number":10988,"context_line":"                                        db_instance)"},{"line_number":10989,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"51623eaf_cf6e1cd6","line":10986,"in_reply_to":"8430e5f9_ae654974","updated":"2025-07-01 18:28:40.000000000","message":"Okay I see `spawn_on()` in patches above. Feels like _maybe_ we\u0027re being too iterative here with things like this and the continuation of adding new \"green\" language until some point in the future. There\u0027s some balance and normally I\u0027m pretty in favor of very small chunks, but maybe just something to consider for future stuff...","commit_id":"42501ed677fab17d740e2980687d5046cf52a9e7"}],"nova/tests/fixtures/nova.py":[{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"424a4f1bdf04e26672c448f3d549b4a74eef873a","unresolved":true,"context_lines":[{"line_number":1214,"context_line":"            self.greenpool.name \u003d f\"{self.test_case_id}.default\""},{"line_number":1215,"context_line":"            return self.greenpool"},{"line_number":1216,"context_line":"        # NOTE(sean-k-mooney): greenpools use eventlet.spawn and"},{"line_number":1217,"context_line":"        # eventlet.spawn_n so we can\u0027t stub out all calls to those functions."},{"line_number":1218,"context_line":"        # Instead since nova only creates greenthreads directly via nova.utils"},{"line_number":1219,"context_line":"        # we stub out the default green pool. This will not capture"},{"line_number":1220,"context_line":"        # Greenthreads created via the standard lib threading module."}],"source_content_type":"text/x-python","patch_set":16,"id":"7c779af9_0d19648d","line":1217,"range":{"start_line":1217,"start_character":10,"end_line":1217,"end_character":26},"updated":"2025-06-04 15:43:00.000000000","message":"Can be removed","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6e9830e7b4874f0bc83d6bdb5a35677dd39c802","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"            self.greenpool.name \u003d f\"{self.test_case_id}.default\""},{"line_number":1215,"context_line":"            return self.greenpool"},{"line_number":1216,"context_line":"        # NOTE(sean-k-mooney): greenpools use eventlet.spawn and"},{"line_number":1217,"context_line":"        # eventlet.spawn_n so we can\u0027t stub out all calls to those functions."},{"line_number":1218,"context_line":"        # Instead since nova only creates greenthreads directly via nova.utils"},{"line_number":1219,"context_line":"        # we stub out the default green pool. This will not capture"},{"line_number":1220,"context_line":"        # Greenthreads created via the standard lib threading module."}],"source_content_type":"text/x-python","patch_set":16,"id":"ca0ac54a_38773063","line":1217,"range":{"start_line":1217,"start_character":10,"end_line":1217,"end_character":26},"in_reply_to":"7c779af9_0d19648d","updated":"2025-06-13 10:54:50.000000000","message":"Done","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"424a4f1bdf04e26672c448f3d549b4a74eef873a","unresolved":true,"context_lines":[{"line_number":1858,"context_line":"            # propagation"},{"line_number":1859,"context_line":"            caller \u003d eventlet.getcurrent()"},{"line_number":1860,"context_line":"            # If there is no id set on us that means we were spawned with other"},{"line_number":1861,"context_line":"            # than nova.utils.spawn or spawn_n so the id propagation chain got"},{"line_number":1862,"context_line":"            # broken. We fall back to self.test_case_id from the fixture which"},{"line_number":1863,"context_line":"            # is good enough"},{"line_number":1864,"context_line":"            caller_test_case_id \u003d getattr("}],"source_content_type":"text/x-python","patch_set":16,"id":"236249f5_8a00417a","line":1861,"range":{"start_line":1861,"start_character":36,"end_line":1861,"end_character":46},"updated":"2025-06-04 15:43:00.000000000","message":"To be removed","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6e9830e7b4874f0bc83d6bdb5a35677dd39c802","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"            # propagation"},{"line_number":1859,"context_line":"            caller \u003d eventlet.getcurrent()"},{"line_number":1860,"context_line":"            # If there is no id set on us that means we were spawned with other"},{"line_number":1861,"context_line":"            # than nova.utils.spawn or spawn_n so the id propagation chain got"},{"line_number":1862,"context_line":"            # broken. We fall back to self.test_case_id from the fixture which"},{"line_number":1863,"context_line":"            # is good enough"},{"line_number":1864,"context_line":"            caller_test_case_id \u003d getattr("}],"source_content_type":"text/x-python","patch_set":16,"id":"135b494f_b0836483","line":1861,"range":{"start_line":1861,"start_character":36,"end_line":1861,"end_character":46},"in_reply_to":"236249f5_8a00417a","updated":"2025-06-13 10:54:50.000000000","message":"Done","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"424a4f1bdf04e26672c448f3d549b4a74eef873a","unresolved":true,"context_lines":[{"line_number":1901,"context_line":"    context manager."},{"line_number":1902,"context_line":""},{"line_number":1903,"context_line":"    Note: this wrapper should be used for any ReaderWriterLock because any lock"},{"line_number":1904,"context_line":"    may possibly be running inside a plain greenlet created by spawn_n()."},{"line_number":1905,"context_line":""},{"line_number":1906,"context_line":"    See https://github.com/eventlet/eventlet/issues/731 for details."},{"line_number":1907,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"4fdeb8ac_694870ba","line":1904,"range":{"start_line":1904,"start_character":63,"end_line":1904,"end_character":72},"updated":"2025-06-04 15:43:00.000000000","message":"spawn()","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6e9830e7b4874f0bc83d6bdb5a35677dd39c802","unresolved":false,"context_lines":[{"line_number":1901,"context_line":"    context manager."},{"line_number":1902,"context_line":""},{"line_number":1903,"context_line":"    Note: this wrapper should be used for any ReaderWriterLock because any lock"},{"line_number":1904,"context_line":"    may possibly be running inside a plain greenlet created by spawn_n()."},{"line_number":1905,"context_line":""},{"line_number":1906,"context_line":"    See https://github.com/eventlet/eventlet/issues/731 for details."},{"line_number":1907,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1e76f439_2e03bd6f","line":1904,"range":{"start_line":1904,"start_character":63,"end_line":1904,"end_character":72},"in_reply_to":"4fdeb8ac_694870ba","updated":"2025-06-13 10:54:50.000000000","message":"I will keep this as we only removed the utils.spanw_n. We cannot control here if some code creates a standalone green pool and uses spawn_n on it.","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"424a4f1bdf04e26672c448f3d549b4a74eef873a","unresolved":true,"context_lines":[{"line_number":2046,"context_line":"    \"\"\"Always wait for greenlets in greenpool to finish."},{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    We use the futurist.GreenThreadPoolExecutor, for example, in compute"},{"line_number":2049,"context_line":"    manager to run live migration jobs. It runs those jobs in bare greenlets"},{"line_number":2050,"context_line":"    created by eventlet.spawn_n(). Bare greenlets cannot be killed the same"},{"line_number":2051,"context_line":"    way as GreenThreads created by eventlet.spawn()."},{"line_number":2052,"context_line":""},{"line_number":2053,"context_line":"    Because they cannot be killed, in the test environment we must either let"}],"source_content_type":"text/x-python","patch_set":16,"id":"b9533bdc_5b5d6439","line":2050,"range":{"start_line":2049,"start_character":40,"end_line":2050,"end_character":33},"updated":"2025-06-04 15:43:00.000000000","message":"Not true anymore I guess","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6e9830e7b4874f0bc83d6bdb5a35677dd39c802","unresolved":false,"context_lines":[{"line_number":2046,"context_line":"    \"\"\"Always wait for greenlets in greenpool to finish."},{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    We use the futurist.GreenThreadPoolExecutor, for example, in compute"},{"line_number":2049,"context_line":"    manager to run live migration jobs. It runs those jobs in bare greenlets"},{"line_number":2050,"context_line":"    created by eventlet.spawn_n(). Bare greenlets cannot be killed the same"},{"line_number":2051,"context_line":"    way as GreenThreads created by eventlet.spawn()."},{"line_number":2052,"context_line":""},{"line_number":2053,"context_line":"    Because they cannot be killed, in the test environment we must either let"}],"source_content_type":"text/x-python","patch_set":16,"id":"74c074ce_7a810e8f","line":2050,"range":{"start_line":2049,"start_character":40,"end_line":2050,"end_character":33},"in_reply_to":"b9533bdc_5b5d6439","updated":"2025-06-13 10:54:50.000000000","message":"I will keep this as I want to keep the fixture around until we get rid of eventlet fully. We only removed the utils.spanw_n. We cannot control here if some code creates a standalone pool and uses spawn_n on it.","commit_id":"74aaba358aff3cc6ca55d1af43aa75fd7564b22d"}],"nova/utils.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fa03053a773d1a467650a15b5b5ae33a439fa620","unresolved":false,"context_lines":[{"line_number":738,"context_line":"    \"\"\""},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    spawn(func, *args, **kwargs)"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"def tpool_execute(func, *args, **kwargs):"},{"line_number":744,"context_line":"    \"\"\"Run func in a native thread\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"6a7ce47c_9308f1e3","side":"PARENT","line":741,"updated":"2025-06-24 09:07:32.000000000","message":"++","commit_id":"886b8123b0e39824e74f7e9a574a2e1caea42479"}]}
