Comment 0 for bug 1863021

Revision history for this message
Corey Bryant (corey.bryant) wrote : eventlet monkey patch results in assert len(_active) == 1 AssertionError

This appears to be the same issue documented here: https://github.com/eventlet/eventlet/issues/592

However I seem to only hit this with python3.8. Basically nova services fail with:

 Exception ignored in: <function _after_fork at 0x7f1100d075e0>
 Traceback (most recent call last):
   File "/usr/lib/python3.8/threading.py", line 1454, in _after_fork
     assert len(_active) == 1
 AssertionError:
 Exception ignored in: <function _after_fork at 0x7f1100d075e0>
 Traceback (most recent call last):
   File "/usr/lib/python3.8/threading.py", line 1454, in _after_fork
     assert len(_active) == 1
 AssertionError:

Patching nova/monkey_patch.py with the following appears to fix this:

diff --git a/nova/monkey_patch.py b/nova/monkey_patch.py
index a07ff91dac..bb7252c643 100644
--- a/nova/monkey_patch.py
+++ b/nova/monkey_patch.py
@@ -59,6 +59,9 @@ def _monkey_patch():
     else:
         eventlet.monkey_patch()

+ import __original_module_threading
+ import threading
+ __original_module_threading.current_thread.__globals__['_active'] = threading._active
     # NOTE(rpodolyaka): import oslo_service first, so that it makes eventlet
     # hub use a monotonic clock to avoid issues with drifts of system time (see