Disable greenthreads for RabbitDriver "listen" connections

When enabling heartbeat_in_pthread, we were restoring the "threading"
python library from eventlet to original one in RabbitDriver but we
forgot to do the same in AMQPDriverBase (RabbitDriver is subclass of
AMQPDriverBase).

We also need to use the original "queue" so that queues are not going to
use greenthreads as well.

Related-bug: #1961402
Related-bug: #1934937
Closes-bug: #2009138

Signed-off-by: Arnaud Morin <arnaud.morin@ovhcloud.com>
Change-Id: I34ea0d1381e934297df2f793e0d2594ef8254f00
This commit is contained in:
Arnaud Morin 2023-03-03 11:16:56 +01:00
parent 9b1e2dc48e
commit fd2381c723
2 changed files with 5 additions and 0 deletions

View File

@ -651,6 +651,8 @@ class Connection(object):
# if it was already monkey patched by eventlet/greenlet.
global threading
threading = _utils.stdlib_threading
amqpdriver.threading = _utils.stdlib_threading
amqpdriver.queue = _utils.stdlib_queue
self.direct_mandatory_flag = driver_conf.direct_mandatory_flag

View File

@ -14,6 +14,7 @@
# under the License.
import logging
import queue
import threading
from oslo_utils import eventletutils
@ -26,12 +27,14 @@ if eventlet and eventletutils.is_monkey_patched("thread"):
# Here we initialize module with the native python threading module
# if it was already monkey patched by eventlet/greenlet.
stdlib_threading = eventlet.patcher.original('threading')
stdlib_queue = eventlet.patcher.original('queue')
else:
# Manage the case where we run this driver in a non patched environment
# and where user even so configure the driver to run heartbeat through
# a python thread, if we don't do that when the heartbeat will start
# we will facing an issue by trying to override the threading module.
stdlib_threading = threading
stdlib_queue = queue
def version_is_compatible(imp_version, version):