)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3a625356126e560e2ca581b7a802af8def6accf2","unresolved":true,"context_lines":[{"line_number":9,"context_line":"We want to make sure that in native threaded mode eventlet is not"},{"line_number":10,"context_line":"accidentally imported."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/oslo.privsep/+/986281"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7c0d172afc0904c160162638461f9b94f340f6b6"},{"line_number":15,"context_line":"Signed-off-by: Balazs Gibizer \u003cgibi@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7d4736ba_6fde3cd8","line":12,"updated":"2026-04-26 16:22:47.000000000","message":"```\nApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/nova/nova/api/openstack/compute/routes.py\", line 20, in \u003cmodule\u003e\n141\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from nova.api.openstack.compute import admin_actions\n142\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/nova/nova/api/openstack/compute/admin_actions.py\", line 21, in \u003cmodule\u003e\n143\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from nova.compute import api as compute\n144\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/nova/nova/compute/api.py\", line 55, in \u003cmodule\u003e\n145\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from nova import crypto\n146\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/nova/nova/crypto.py\", line 47, in \u003cmodule\u003e\n147\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from nova.virt import block_device as driver_block_device\n148\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/nova/nova/virt/block_device.py\", line 18, in \u003cmodule\u003e\n149\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from os_brick import encryptors\n150\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/data/venv/lib/python3.13/site-packages/os_brick/encryptors/__init__.py\", line 22, in \u003cmodule\u003e\n151\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from os_brick.encryptors import base\n152\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/data/venv/lib/python3.13/site-packages/os_brick/encryptors/base.py\", line 19, in \u003cmodule\u003e\n153\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from os_brick import executor\n154\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/data/venv/lib/python3.13/site-packages/os_brick/executor.py\", line 28, in \u003cmodule\u003e\n155\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from os_brick.privileged import rootwrap as priv_rootwrap\n156\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/data/venv/lib/python3.13/site-packages/os_brick/privileged/__init__.py\", line 14, in \u003cmodule\u003e\n157\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from oslo_privsep import priv_context\n158\tApr 25 20:39:25.400298 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/data/venv/lib/python3.13/site-packages/oslo_privsep/priv_context.py\", line 34, in \u003cmodule\u003e\n159\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     from oslo_privsep import daemon\n160\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/data/venv/lib/python3.13/site-packages/oslo_privsep/daemon.py\", line 66, in \u003cmodule\u003e\n161\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     import eventlet\n162\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils   File \"/opt/stack/nova/nova/monkey_patch.py\", line 142, in find_spec\n163\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils     raise ImportError(\n164\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils         \"The service started in threading mode so it should \"\n165\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils         \"not import eventlet\")\n166\tApr 25 20:39:25.400907 np349538ccd8124 devstack@n-api.service[83223]: ERROR nova.utils ImportError: The service started in threading mode so it should not import eventlet\n```\njobs failing on the privsep eventlet import so the Depends-On in not effective probably because the job installs privsep from package not from git.","commit_id":"43c7d3c038280376410ceca1dc68a997ec861519"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"02f88341412ca188c8a5e071d25e67be4f29d247","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We want to make sure that in native threaded mode eventlet is not"},{"line_number":10,"context_line":"accidentally imported."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/oslo.privsep/+/986281"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7c0d172afc0904c160162638461f9b94f340f6b6"},{"line_number":15,"context_line":"Signed-off-by: Balazs Gibizer \u003cgibi@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"a64894d8_5449b820","line":12,"in_reply_to":"7d4736ba_6fde3cd8","updated":"2026-04-27 07:14:28.000000000","message":"Done","commit_id":"43c7d3c038280376410ceca1dc68a997ec861519"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"665e533e001af9778dd9135abce3252af3757f41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d7375231_efa3adea","updated":"2026-04-27 07:14:19.000000000","message":"This won\u0027t be green until the oslo.privsep change lands and released. But nova-next and the unit tests envs shows that we don\u0027t have any other places in the call-path that import eventlet when we switch to native threaded mode.","commit_id":"7b105c95bf3a574fff10a495e5623a23359a0003"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f8f02885f67c54497e65d0fd965d275b144de259","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a513f019_04d7b83b","updated":"2026-05-04 15:21:02.000000000","message":"nova-next failed with a buch of vif plug timeouts like\n```\nMay 01 18:49:49.420712 npe534a22e9b3d4 nova-compute[90632]: WARNING nova.compute.manager [None req-9238258d-5392-4ae8-8ce2-f77e5cc3f9b7 tempest-ImagesOneServerTestJSON-1935350687 tempest-ImagesOneServerTestJSON-1935350687-project-member] [instance: 6d973108-84ec-4a54-a9ae-c63a1bfcca4b] Timeout waiting for [\u0027network-vif-plugged-95059b43-3854-4549-bdfd-0aef384ddfd2\u0027] for instance with vm_state building and task_state spawning. Event states are: network-vif-plugged-95059b43-3854-4549-bdfd-0aef384ddfd2: timed out after 300.00 seconds: nova.exception.InstanceEventTimeout\n```\n(I\u0027m not rechecking as I have a test to fix anyhow)","commit_id":"827b90f29b6b38af6b4fa4c54326cb69f03ec88a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4fa818f727c0f407ba4d996c848e009b5515225d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bb215beb_e408ff9b","updated":"2026-05-01 17:52:39.000000000","message":"recheck graceful shutdown test instability ?\n```\n2026-05-01 16:08:03.987746 | TASK [run-graceful-shutdown-tests : Verify dest compute service is stopped after graceful shutdown]\n2026-05-01 16:10:42.346904 | controller | ERROR\n2026-05-01 16:10:42.347322 | controller | {\n2026-05-01 16:10:42.347393 | controller |   \"exception\": \"NoneType: None\\n\",\n2026-05-01 16:10:42.347452 | controller |   \"msg\": \"non-zero return code\",\n2026-05-01 16:10:42.347507 | controller |   \"rc\": 5\n2026-05-01 16:10:42.347562 | controller | }\nfailure\n2026-05-01 16:10:42.353778 | \n2026-05-01 16:10:42.353855 | PLAY RECAP\n2026-05-01 16:10:42.353950 | compute1 | ok: 13 changed: 9 unreachable: 0 failed: 0 skipped: 4 rescued: 0 ignored: 0\n2026-05-01 16:10:42.354023 | controller | ok: 55 changed: 39 unreachable: 0 failed: 1 skipped: 7 rescued: 0 ignored: 0\n```","commit_id":"827b90f29b6b38af6b4fa4c54326cb69f03ec88a"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4fcdcbc9ae39c9f0d8a7a5b7c9fc09bfb691a7bc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"84e4b8b5_84f594b2","updated":"2026-05-12 19:16:21.000000000","message":"almost lgtm except using the hacking check from hacking 8.0.0 which has this check.","commit_id":"d14a282dd098877b991dafb3dc10f9b584502532"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2ff7ce6444fe80e8ea8b2b4fa0e295423c525ade","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3ae6457f_73c058a2","updated":"2026-06-02 12:18:25.000000000","message":"i dont see anything blockign but i have one more TODO for you when you get around to the rest inline.","commit_id":"770580bb9cc7739f9a486e7a5fd03644c25941fa"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9469c84f6c2af77e4cf069fe7a1ce1514f52aa53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1c6f9467_4a585b5b","updated":"2026-06-01 21:27:22.000000000","message":"thanks lgtm","commit_id":"770580bb9cc7739f9a486e7a5fd03644c25941fa"}],"nova/hacking/checks.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4fcdcbc9ae39c9f0d8a7a5b7c9fc09bfb691a7bc","unresolved":true,"context_lines":[{"line_number":1140,"context_line":"    if match:"},{"line_number":1141,"context_line":"        return 0, msg"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":""},{"line_number":1144,"context_line":"@core.flake8ext"},{"line_number":1145,"context_line":"def check_eventlet_import(logical_line, filename):"},{"line_number":1146,"context_line":"    \"\"\"Check to prevent importing eventlet."},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"    N376"},{"line_number":1149,"context_line":"    \"\"\""},{"line_number":1150,"context_line":"    msg \u003d ("},{"line_number":1151,"context_line":"        \"N376: Do not import eventlet directly. Try to use the standard lib\""},{"line_number":1152,"context_line":"        \"primitives instead. If you must depend on eventlet then use \""},{"line_number":1153,"context_line":"        \"nova.utils.concurrency_mode_threading() to only use eventlet if the \""},{"line_number":1154,"context_line":"        \"service is started in eventlet mode and get the eventlet module via \""},{"line_number":1155,"context_line":"        \"nova.utils.get_eventlet()\")"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    match \u003d re.search(eventlet_import_re, logical_line)"},{"line_number":1158,"context_line":""},{"line_number":1159,"context_line":"    if match:"},{"line_number":1160,"context_line":"        yield 0, msg"}],"source_content_type":"text/x-python","patch_set":6,"id":"d663982d_3bd6cb0c","line":1160,"range":{"start_line":1143,"start_character":0,"end_line":1160,"end_character":20},"updated":"2026-05-12 19:16:21.000000000","message":"hacking module added a generic check for this in 8.0.0, i think we can use that instead of adding check in nova too-  https://github.com/openstack/hacking/blob/8.0.0/hacking/checks/imports.py#L111","commit_id":"d14a282dd098877b991dafb3dc10f9b584502532"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"659354ece1bad9319b42e3baa7cd5be30a15e15c","unresolved":false,"context_lines":[{"line_number":1140,"context_line":"    if match:"},{"line_number":1141,"context_line":"        return 0, msg"},{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":""},{"line_number":1144,"context_line":"@core.flake8ext"},{"line_number":1145,"context_line":"def check_eventlet_import(logical_line, filename):"},{"line_number":1146,"context_line":"    \"\"\"Check to prevent importing eventlet."},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"    N376"},{"line_number":1149,"context_line":"    \"\"\""},{"line_number":1150,"context_line":"    msg \u003d ("},{"line_number":1151,"context_line":"        \"N376: Do not import eventlet directly. Try to use the standard lib\""},{"line_number":1152,"context_line":"        \"primitives instead. If you must depend on eventlet then use \""},{"line_number":1153,"context_line":"        \"nova.utils.concurrency_mode_threading() to only use eventlet if the \""},{"line_number":1154,"context_line":"        \"service is started in eventlet mode and get the eventlet module via \""},{"line_number":1155,"context_line":"        \"nova.utils.get_eventlet()\")"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    match \u003d re.search(eventlet_import_re, logical_line)"},{"line_number":1158,"context_line":""},{"line_number":1159,"context_line":"    if match:"},{"line_number":1160,"context_line":"        yield 0, msg"}],"source_content_type":"text/x-python","patch_set":6,"id":"f11f9cfa_3c731d1a","line":1160,"range":{"start_line":1143,"start_character":0,"end_line":1160,"end_character":20},"in_reply_to":"d663982d_3bd6cb0c","updated":"2026-05-28 09:02:19.000000000","message":"good catch. Done.","commit_id":"d14a282dd098877b991dafb3dc10f9b584502532"}],"nova/test.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2ff7ce6444fe80e8ea8b2b4fa0e295423c525ade","unresolved":true,"context_lines":[{"line_number":187,"context_line":"            super(TestCase, self).setUp()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # TODO(gibi): reimplement it to selectively support eventlet and"},{"line_number":190,"context_line":"        # native threading as well"},{"line_number":191,"context_line":"        self.useFixture("},{"line_number":192,"context_line":"            nova_fixtures.PropagateTestCaseIdToChildEventlets(self.id()))"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"608caaf6_7b2e62cf","line":190,"updated":"2026-06-02 12:18:25.000000000","message":"ack i feel like defering this as long as it does not break anythign is fair","commit_id":"770580bb9cc7739f9a486e7a5fd03644c25941fa"}],"nova/utils.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2ff7ce6444fe80e8ea8b2b4fa0e295423c525ade","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        return None"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    import eventlet  # noqa"},{"line_number":104,"context_line":"    return eventlet"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def destroy_default_executor():"}],"source_content_type":"text/x-python","patch_set":8,"id":"7c8d175f_63dd042e","line":104,"updated":"2026-06-02 12:18:25.000000000","message":"i would prefer if we didnt provide a public interface to geting a handel to the eventlet model\n\nwhen we follup for the other todos can we consider if we can  remvoe this an move the relevent usage to  helper functions in this module isntead where that make sense\n\n\ni.e. the eventlet hub stuff could be a call to a function in utils instead of geting the eventlet module in the proxy files and invoke the hub functions.\n\nso \n\n```\nutils.get_eventlet().hubs.use_hub()\n```\n\ncould have been \n\n```\nutils.use_hub()\n```\n\n\nin the test is fine but i woudl make this _get_eventlet() and just have the tests call teh private function\n\nbut for the real code if we can avoid providign a private function that can bypass the hackign check that enforce no imports fo eventlet by geting it vai a side channel that would make me feel better long term.","commit_id":"770580bb9cc7739f9a486e7a5fd03644c25941fa"}]}
