Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SSL.py recursion crash in (eventlet > 0.17.4) and python 3.6 #371

Open
Renmusxd opened this issue Jan 4, 2017 · 44 comments
Open

SSL.py recursion crash in (eventlet > 0.17.4) and python 3.6 #371

Renmusxd opened this issue Jan 4, 2017 · 44 comments

Comments

@Renmusxd
Copy link

Renmusxd commented Jan 4, 2017

Using python 3.6 with the following code causes an infinite recursion of python super calls leading to a crash

import eventlet
eventlet.monkey_patch()

import os
import socket
from flask import Flask, render_template, request, Response, send_file
from flask import make_response
from flask_socketio import SocketIO
from OpenSSL import SSL, crypto

'''
requirements.txt
cffi==1.9.1
click==6.6
cryptography==1.7.1
enum-compat==0.0.2
eventlet==0.20.1
Flask==0.12
Flask-SocketIO==2.8.2
greenlet==0.4.11
idna==2.2
itsdangerous==0.24
Jinja2==2.8.1
MarkupSafe==0.23
pyasn1==0.1.9
pycparser==2.17
pyOpenSSL==16.2.0
python-engineio==1.1.0
python-socketio==1.6.2
six==1.10.0
Werkzeug==0.11.15
'''

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
async_mode = None
socketio = SocketIO(app, async_mode=async_mode)
def create_self_signed_cert(certfile, keyfile, certargs, cert_dir="."):
    C_F = os.path.join(cert_dir, certfile)
    K_F = os.path.join(cert_dir, keyfile)
    if not os.path.exists(C_F) or not os.path.exists(K_F):
        k = crypto.PKey()
        k.generate_key(crypto.TYPE_RSA, 1024)
        cert = crypto.X509()
        cert.get_subject().C = certargs["Country"]
        cert.get_subject().ST = certargs["State"]
        cert.get_subject().L = certargs["City"]
        cert.get_subject().O = certargs["Organization"]
        cert.get_subject().OU = certargs["Org. Unit"]
        cert.get_subject().CN = 'Example'
        cert.set_serial_number(1000)
        cert.gmtime_adj_notBefore(0)
        cert.gmtime_adj_notAfter(315360000)
        cert.set_issuer(cert.get_subject())
        cert.set_pubkey(k)
        cert.sign(k, 'sha1')
        open(C_F, "wb").write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
        open(K_F, "wb").write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k))

CERT_FILE = "cert.pem"
KEY_FILE = "key.pem"
create_self_signed_cert(CERT_FILE, KEY_FILE,
                            certargs=
                            {"Country": "US",
                             "State": "NY",
                             "City": "Ithaca",
                             "Organization": "Python-Bugs",
                             "Org. Unit": "Proof of Concept"})
socketio.run(app, debug=True, use_reloader=False, certfile=CERT_FILE, keyfile=KEY_FILE, port=5500)

Trace:

Traceback (most recent call last):
File "[...]/server.py", line 231, in
socketio.run(app, debug=True, use_reloader=False, certfile=CERT_FILE, keyfile=KEY_FILE, port=5500)
File "[...]/.virtualenvs/bot/lib/python3.6/site-packages/flask_socketio/init.py", line 493, in run
run_server()
File "[...]/.virtualenvs/bot/lib/python3.6/site-packages/flask_socketio/init.py", line 485, in run_server
**ssl_params)
File "[...]/.virtualenvs/bot/lib/python3.6/site-packages/eventlet/convenience.py", line 126, in wrap_ssl
return wrap_ssl_impl(sock, *a, **kw)
File "[...]/.virtualenvs/bot/lib/python3.6/site-packages/eventlet/green/ssl.py", line 379, in wrap_socket
return GreenSSLSocket(sock, *a, **kw)
File "[...]/.virtualenvs/bot/lib/python3.6/site-packages/eventlet/green/ssl.py", line 68, in init
ca_certs, do_handshake_on_connect and six.PY2, *args, **kw)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 737, in init
self._context.verify_mode = cert_reqs
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 479, in verify_mode
super(SSLContext, SSLContext).verify_mode.set(self, value)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 479, in verify_mode
super(SSLContext, SSLContext).verify_mode.set(self, value)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 479, in verify_mode
super(SSLContext, SSLContext).verify_mode.set(self, value)
[Previous line repeated 325 more times]
RecursionError: maximum recursion depth exceeded while calling a Python object

Issue also posted to http://bugs.python.org/issue29149, and miguelgrinberg/Flask-SocketIO#193, but since it's eventlet version dependent may also be relevant here.

@Renmusxd
Copy link
Author

Renmusxd commented Jan 4, 2017

Simpler code to reproduce bug:

#!/usr/bin/env python3

import eventlet
eventlet.monkey_patch()

import sys

from eventlet import wsgi

def hello_world (env, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello, World!\r\n']


def main ():
    listener = eventlet.wrap_ssl(
        eventlet.listen(('127.0.0.1', 8000)),
        certfile='does-not-exist',
        keyfile='does-not-exist',
        server_side=True)

    wsgi.server(listener, hello_world)

if __name__ == '__main__':
    sys.exit(main())

Shamelessly taken from: https://www.bountysource.com/issues/32684217-using-both-eventlet-monkey_patch-and-eventlet-wsgi-server-together-with-ssl-fails-with-ssl-sslwantreaderror, but now with different error

mythmon added a commit to mythmon/normandy that referenced this issue Feb 16, 2017
mythmon added a commit to mythmon/normandy that referenced this issue Feb 16, 2017
@Hoffs
Copy link

Hoffs commented Feb 21, 2017

Similar error while using Requests library, fixed by reverting to 0.17.4 as mentioned.:

2017-02-21T16:56:44.729121+00:00 app[worker1.1]: [2017-02-21 16:56:44,726: ERROR/MainProcess] Task twitch_stats.tasks.get_stats_by_id[9e7eb62b-3fbf-47c9-ab0c-6e02f078bb58] raised unexpected: RecursionError('maximum recursion depth exceeded while calling a Python object',)
2017-02-21T16:56:44.729124+00:00 app[worker1.1]: Traceback (most recent call last):
2017-02-21T16:56:44.729125+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/celery/app/trace.py", line 367, in trace_task
2017-02-21T16:56:44.729126+00:00 app[worker1.1]:     R = retval = fun(*args, **kwargs)
2017-02-21T16:56:44.729126+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/celery/app/trace.py", line 622, in __protected_call__
2017-02-21T16:56:44.729127+00:00 app[worker1.1]:     return self.run(*args, **kwargs)
2017-02-21T16:56:44.729128+00:00 app[worker1.1]:   File "/app/twitch_stats/tasks.py", line 34, in get_stats_by_id
2017-02-21T16:56:44.729129+00:00 app[worker1.1]:     TwitchStats.objects.get_stats(twitch_id=tid)
2017-02-21T16:56:44.729130+00:00 app[worker1.1]:   File "/app/twitch_stats/managers.py", line 160, in get_stats
2017-02-21T16:56:44.729130+00:00 app[worker1.1]:     r = requests.get(url=url, headers=headers)
2017-02-21T16:56:44.729132+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/api.py", line 70, in get
2017-02-21T16:56:44.729132+00:00 app[worker1.1]:     return request('get', url, params=params, **kwargs)
2017-02-21T16:56:44.729133+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/api.py", line 56, in request
2017-02-21T16:56:44.729134+00:00 app[worker1.1]:     return session.request(method=method, url=url, **kwargs)
2017-02-21T16:56:44.729134+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/sessions.py", line 488, in request
2017-02-21T16:56:44.729135+00:00 app[worker1.1]:     resp = self.send(prep, **send_kwargs)
2017-02-21T16:56:44.729136+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/sessions.py", line 609, in send
2017-02-21T16:56:44.729137+00:00 app[worker1.1]:     r = adapter.send(request, **kwargs)
2017-02-21T16:56:44.729137+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/adapters.py", line 423, in send
2017-02-21T16:56:44.729138+00:00 app[worker1.1]:     timeout=timeout
2017-02-21T16:56:44.729139+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 600, in urlopen
2017-02-21T16:56:44.729140+00:00 app[worker1.1]:     chunked=chunked)
2017-02-21T16:56:44.729141+00:00 app[worker1.1]:     self._validate_conn(conn)
2017-02-21T16:56:44.729141+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request
2017-02-21T16:56:44.729142+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 844, in _validate_conn
2017-02-21T16:56:44.729143+00:00 app[worker1.1]:     conn.connect()
2017-02-21T16:56:44.729143+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/packages/urllib3/connection.py", line 314, in connect
2017-02-21T16:56:44.729144+00:00 app[worker1.1]:     cert_reqs=resolve_cert_reqs(self.cert_reqs),
2017-02-21T16:56:44.729145+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/requests/packages/urllib3/util/ssl_.py", line 264, in create_urllib3_context
2017-02-21T16:56:44.729146+00:00 app[worker1.1]:     context.options |= options
2017-02-21T16:56:44.729146+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/ssl.py", line 459, in options
2017-02-21T16:56:44.729148+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/ssl.py", line 459, in options
2017-02-21T16:56:44.729147+00:00 app[worker1.1]:     super(SSLContext, SSLContext).options.__set__(self, value)
2017-02-21T16:56:44.729149+00:00 app[worker1.1]:   File "/app/.heroku/python/lib/python3.6/ssl.py", line 459, in options
2017-02-21T16:56:44.729148+00:00 app[worker1.1]:     super(SSLContext, SSLContext).options.__set__(self, value)
2017-02-21T16:56:44.729149+00:00 app[worker1.1]:     super(SSLContext, SSLContext).options.__set__(self, value)
2017-02-21T16:56:44.729150+00:00 app[worker1.1]:   [Previous line repeated 109 more times]
2017-02-21T16:56:44.729151+00:00 app[worker1.1]:   File "...", line -1, in [rest of traceback truncated]
2017-02-21T16:56:44.729200+00:00 app[worker1.1]: RecursionError: maximum recursion depth exceeded while calling a Python object

@j-walker23
Copy link

Hi all, what is needed to get new eventlet versions working with python 3.6, either on the python side or eventlet side?

@temoto
Copy link
Member

temoto commented Mar 17, 2017

Try to uninstall pyopenssl if possible, please say if it helps.

@temoto
Copy link
Member

temoto commented Mar 21, 2017

@j-walker23 @Hoffs- @Renmusxd please try pip uninstall pyopenssl and tell if it helps.

@Heanthor
Copy link

I'm having this same problem as well, but PyOpenSSL is not installed. Also using Flask 0.12, Flask-SocketIO 2.8.6.

@temoto
Copy link
Member

temoto commented Mar 22, 2017

@Heanthor thank you.

@j-walker23
Copy link

Thanks for the replies! I will test on my gce box running ubuntu and report back.

@j-walker23
Copy link

@temoto I actually didn't have pyopenssl installed either. Should I only be trying eventlet 0.17.4?

@temoto
Copy link
Member

temoto commented Mar 25, 2017

@j-walker23 I'm sorry old version is the only workaround right now.

I understand this is an important issue but haven't find solution yet.

@j-walker23
Copy link

j-walker23 commented Mar 26, 2017

@temoto no problem at all. just was curious because i seem to be able to run the latest eventlet on my mac with py36. but when deployed on ubuntu it has this error so i assumed i was just screwing it up. Thank you, really appreciate the lib!

@justdoit0823
Copy link

justdoit0823 commented Mar 28, 2017

The ssl module of Python3.6 has made variable options, verify_flags, verify_mode of SSLContext as property, so setting value of the specified property caused function recursively call after eventlet monkey patch. The following code can be found in Python3.6 ssl module.

@property
def options(self):
    return Options(super().options)

@options.setter
def options(self, value):
    super(SSLContext, SSLContext).options.__set__(self, value)

@property
def verify_flags(self):
    return VerifyFlags(super().verify_flags)

@verify_flags.setter
def verify_flags(self, value):
    super(SSLContext, SSLContext).verify_flags.__set__(self, value)

@property
def verify_mode(self):
    value = super().verify_mode
    try:
        return VerifyMode(value)
    except ValueError:
        return value

@verify_mode.setter
def verify_mode(self, value):
    super(SSLContext, SSLContext).verify_mode.__set__(self, value)

As gevent's fixup of this issue:

if hasattr(orig_SSLContext.options, 'setter'):
        # In 3.6, these became properties. They want to access the
        # property __set__ method in the superclass, and they do so by using
        # super(SSLContext, SSLContext). But we rebind SSLContext when we monkey
        # patch, which causes infinite recursion.
        # https://github.com/python/cpython/commit/328067c468f82e4ec1b5c510a4e84509e010f296
        @orig_SSLContext.options.setter
        def options(self, value):
            super(orig_SSLContext, orig_SSLContext).options.__set__(self, value)

        @orig_SSLContext.verify_flags.setter
        def verify_flags(self, value):
            super(orig_SSLContext, orig_SSLContext).verify_flags.__set__(self, value)

        @orig_SSLContext.verify_mode.setter
        def verify_mode(self, value):
            super(orig_SSLContext, orig_SSLContext).verify_mode.__set__(self, value)

Insert if statement in SSLContext definition and decorate set property function.

@temoto
Copy link
Member

temoto commented Mar 29, 2017

@justdoit0823 thanks a lot!

temoto added a commit that referenced this issue Apr 4, 2017
@temoto
Copy link
Member

temoto commented Apr 4, 2017

Everybody, please, try this version.

pip install https://github.com/eventlet/eventlet/archive/de06878e5a295bfbbddca0048c3453d16168a676.zip

@temoto
Copy link
Member

temoto commented Apr 5, 2017

@richardasaurus that's very strange, please show full terminal session how you got it.

@temoto
Copy link
Member

temoto commented Apr 5, 2017

Hey guys, the fix was released on PyPI as v0.21.0. Please tell me if it helps.

@j-walker23
Copy link

Awesome, thank you!

@temoto
Copy link
Member

temoto commented Apr 7, 2017

@richardasaurus well show everything related to this error from deployment. I can only help knowing how to reproduce the problem.

@daviskirk
Copy link

I can confirm that 0.21.0 fixes the eventlet / requests issue. Can't seem to reproduce the compile error @richardasaurus has.

@benkuhn
Copy link

benkuhn commented May 11, 2017

I'm still seeing a similar error on eventlet 0.21.0 due to some kind of incredibly bizarre interaction with logging to the root logger at toplevel: https://github.com/benkuhn/eventlet-repro

@temoto
Copy link
Member

temoto commented May 11, 2017

@benkuhn thank you very much for reproduction repo. Please post python -V.

@benkuhn
Copy link

benkuhn commented May 11, 2017

$ python -V
Python 3.6.1

I've pushed an even more minimal repro. Still working on minimizing further. Note that it may be related to newrelic vendoring an old urllib version.

@gsilvapt
Copy link

gsilvapt commented Aug 3, 2020

In another project, we had to downgrade to version 1.16.0 for this to work.

@jjedele
Copy link

jjedele commented Jan 19, 2021

What is the current state of this issue? I'm running into the same issue with Python 3.6.9 and eventlet 0.30.0. Had to downgrade to 0.17.4 for it to work (dnspython-1.16.0 installed, this was not the issue apparently).

@mattbennett
Copy link
Contributor

This can be a symptom of several different problems, I think.

For folks who are still experiencing it even with dnspython<2, check that nothing is importing requests before the monkey patch is applied.

chuan137 pushed a commit to sapcc/manila that referenced this issue May 27, 2021
Use the default value provided by tox:

https://tox.readthedocs.io/en/latest/config.html#conf-install_command

See discussion on the openstack-discuss ML [1]
for the complete context.

To get this fix in, we'll need to raise
a few requirements:

- eventlet because of the ssl issues with python3.6 in
  older packages
  (eventlet/eventlet#371)
- oslo.messaging to fix the error "ACCESS_REFUSED - Login
  was refused using authentication mechanism AMQPLAIN.".
- psycopg2-binary since 2.6.2 is blacklisted
- oslo.service was bumped to 2.1.0, to pick up its support
  for eventlet>=0.22
- oslo.utils was bumped to match the lower constraint from
  oslo.service at 2.1.0

[1] http://lists.openstack.org/pipermail/openstack-discuss/2020-April/014237.html

Change-Id: I6344f44fb955d631a4f0a13fa53ecc19826c7ea6
Signed-off-by: Goutham Pacha Ravi <gouthampravi@gmail.com>
reimannf added a commit to sapcc/helm-charts that referenced this issue May 28, 2021
Seems that the Sentry logger causes a import of requests before
the monkey patch of the eventlet happens.
eventlet/eventlet#371 (comment)

With Wallaby this seems now be an issue and causes a loop when importing
the modules like here: eventlet/eventlet#677
although it is not dnspython >= 2 related.
@miquelvir
Copy link

What is the status of this?

temoto added a commit that referenced this issue Oct 12, 2021
temoto added a commit that referenced this issue Oct 12, 2021
@jagguli
Copy link

jagguli commented Feb 22, 2022

Replicated on:
Eventlet Version: 0.33.0
Python version: 3.10.2, 3.9.10

  File "/usr/local/lib/python3.9/site-packages/urllib3/poolmanager.py", line 375, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 703, in urlopen
    httplib_response = self._make_request(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 386, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 1040, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 397, in connect
    self.ssl_context = create_urllib3_context(
  File "/usr/local/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 312, in create_urllib3_context
    context.options |= options
  File "/usr/local/lib/python3.9/site-packages/eventlet/green/ssl.py", line 458, in options
    super(_original_sslcontext, _original_sslcontext).options.__set__(self, value)
  File "/usr/local/lib/python3.9/ssl.py", line 602, in options
    super(SSLContext, SSLContext).options.__set__(self, value)
  File "/usr/local/lib/python3.9/ssl.py", line 602, in options
    super(SSLContext, SSLContext).options.__set__(self, value)
  File "/usr/local/lib/python3.9/ssl.py", line 602, in options
    super(SSLContext, SSLContext).options.__set__(self, value)
  [Previous line repeated 433 more times]

@dankingtech
Copy link

I seem to be having a similar issue, and would like to know whether it is related. I have narrowed down the replication to using requests.get() after monkey_patch for sockets.

Here is the replication:

$ podman run --rm -it python:3.9 bash
root@f7333769f4da:/# pip install -U pip requests eventlet
...
root@f7333769f4da:/# python
Python 3.9.17 (main, Jul 28 2023, 05:54:52) 
[GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import eventlet
>>> import requests
>>> eventlet.monkey_patch(all=False, socket=True)
>>> requests.get('https://google.com/')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/requests/adapters.py", line 486, in send
    resp = conn.urlopen(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 790, in urlopen
    response = self._make_request(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 467, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 1092, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 642, in connect
    sock_and_verified = _ssl_wrap_socket_and_match_hostname(
  File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 735, in _ssl_wrap_socket_and_match_hostnam
e
    context = create_urllib3_context(
  File "/usr/local/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 292, in create_urllib3_context
    context.minimum_version = TLSVersion.TLSv1_2
  File "/usr/local/lib/python3.9/ssl.py", line 587, in minimum_version
    super(SSLContext, SSLContext).minimum_version.__set__(self, value)
  File "/usr/local/lib/python3.9/ssl.py", line 587, in minimum_version
    super(SSLContext, SSLContext).minimum_version.__set__(self, value)
  File "/usr/local/lib/python3.9/ssl.py", line 587, in minimum_version
    super(SSLContext, SSLContext).minimum_version.__set__(self, value)
  [Previous line repeated 491 more times]
RecursionError: maximum recursion depth exceeded
>>> 

And here is the list of package versions from pip:

root@f7333769f4da:/# pip list
Package            Version
------------------ ---------
certifi            2023.7.22
charset-normalizer 3.2.0
dnspython          2.4.2
eventlet           0.33.3
greenlet           2.0.2
idna               3.4
pip                23.2.1
requests           2.31.0
setuptools         58.1.0
six                1.16.0
urllib3            2.0.4
wheel              0.41.1
root@f7333769f4da:/#

@van4oza
Copy link

van4oza commented Nov 5, 2023

Hi!

Same here

mb Timeout involved

def scrap(row_data: dict) -> (dict, Exception):
    try:
        with eventlet.timeout.Timeout(60*30, False):
            ...
            return smth
        raise Exception("eventlet timeout")
    except Exception as e:
        return row_data, e

for result, exc in pool.imap(scrap, [...]):
    pass
Exception ignored in: <function GreenSocket.__del__ at 0x1026e5d30>
Traceback (most recent call last):
  File "/Users/van4oza/PycharmProjects/enterprise_app/venv/lib/python3.8/site-packages/eventlet/greenio/base.py", line 241, in __del__
    close = getattr(self, 'close', None)
RecursionError: maximum recursion depth exceeded while calling a Python object
Fatal Python error: Cannot recover from stack overflow.
Python runtime state: initialized

Current thread 0x00000001dfe91e00 (most recent call first):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 602 in options
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 602 in options
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 602 in options
...etc.

Python 3.8

aiohttp==3.8.4
aiosignal==1.3.1
appdirs==1.4.3
asgiref==3.7.2
async-timeout==4.0.2
atomicwrites==1.4.1
attrs==23.1.0
Authlib==0.15.6
backports-abc==0.5
backports.ssl-match-hostname==3.5.0.1
backports.zoneinfo==0.2.1
beautifulsoup4==4.12.2
black==22.3.0
blessed==1.14.2
blessings==1.7
boto==2.42.0
boto3==1.28.77
botocore==1.31.77
bpython==0.16
Brotli==1.0.9
bs4==0.0.1
cachetools==5.3.1
cement==2.8.2
certifi==2018.4.16
cffi==1.15.1
cfgv==3.3.1
cfn-flip==1.2.3
chardet==3.0.4
charset-normalizer==3.1.0
click==8.0.1
clickhouse-cityhash==1.0.2.4
clickhouse-driver==0.2.6
colorama==0.3.7
coreapi==2.3.3
coreschema==0.0.4
coverage==3.7.1
cryptography==3.4.8
cssselect==1.2.0
curtsies==0.2.11
dataclasses-json==0.5.9
defusedxml==0.7.1
distlib==0.3.6
dj-database-url==0.4.1
dj-static==0.0.6
Django==3.2
django-braces==1.11.0
django-cors-headers==3.14.0
django-dbconn-retry==0.1.7
django-extensions==1.7.7
django-multiselectfield==0.1.12
django-s3direct==0.4.2
django-storages==1.5.0
django-unixdatetimefield==0.1.6
djangorestframework==3.14.0
dnspython==2.3.0
docker-py==1.7.2
dockerpty==0.4.1
docopt==0.6.2
docutils==0.13.1
ecdsa==0.10
editdistance==0.5.3
elasticsearch==7.13.4
elasticsearch-dsl==7.1.0
eventlet==0.33.3
Fabric==1.8.2
fake-useragent==1.1.3
feedparser==6.0.10
ffmpeg-python @ git+https://github.com/kkroening/ffmpeg-python@df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6
filelock==3.12.2
flake8==4.0.1
foreman==0.9.7
free-proxy==1.0.6
frozenlist==1.3.3
future==0.18.3
fuzzysearch==0.7.3
fuzzywuzzy==0.18.0
gender-guesser==0.2.0
geoip2==4.5.0
google-api-core==2.10.1
google-api-python-client==2.81.0
google-auth==2.21.0
google-auth-httplib2==0.1.0
google-auth-oauthlib==1.0.0
googleapis-common-protos==1.56.4
greenlet==0.4.15
gunicorn==19.3.0
haversine==2.8.0
html2text==2020.1.16
htmlmin==0.1.12
httplib2==0.18.1
identify==2.5.24
idna==2.6
ifaddr==0.2.0
importlib-metadata==4.13.0
importlib-resources==5.12.0
IP2Location==8.9.0
iso8601==2.0.0
isodate==0.6.1
itsdangerous==0.23
itypes==1.1.0
Jinja2==2.9.6
jmespath==0.9.3
joblib==1.3.1
kappa==0.6.0
keyring==10.3.2
keyrings.alt==2.2
librespot==0.0.9
lxml==4.5.0
lz4==4.3.2
m3u8==1.0.0
MarkupSafe==1.1.1
marshmallow==3.19.0
marshmallow-enum==1.5.1
maxminddb==2.4.0
mccabe==0.6.1
mongoengine==0.20.0
more-itertools==8.13.0
multidict==6.0.4
mutagen==1.46.0
mypy-extensions==1.0.0
nltk==3.7
nodeenv==1.8.0
numpy==1.24.4
oauth2==1.9.0.post1
oauth2client==4.1.3
oauthlib==2.0.7
packaging==23.1
pandas==2.0.3
paramiko==1.12.2
parse==1.19.1
pathlib-mate==1.2.1
pathspec==0.9.0
placebo==0.10.0
platformdirs==3.8.0
podcastparser==0.6.4
pre-commit==2.18.1
prettytable==3.8.0
progress==1.6
protobuf==3.20.1
psycopg2-binary==2.9.2
pyasn1==0.5.0
pyasn1-modules==0.3.0
pycodestyle==2.8.0
pycparser==2.21
pycrypto==2.6.1
pycryptodome==3.18.0
pycryptodomex==3.17
pyee==8.2.2
pyflakes==2.4.0
Pygments==2.2.0
pygsheets==2.0.5
PyJWT==1.6.1
pymongo==3.13.0
PyOgg==0.6.14a1
pyparsing==2.2.0
pyppeteer==0.2.6
pyquery==2.0.0
python-dateutil==2.8.2
python-http-client==3.3.7
python-Levenshtein==0.12.2
python-social-auth==0.3.6
python-twitter==3.5
python-twitter-v2==0.8.1
python3-openid==3.1.0
pytz==2022.4
PyYAML==6.0.1
RandomWords==0.2.1
regex==2023.6.3
requests==2.30.0
requests-aws4auth==0.9
requests-futures==0.9.7
requests-html==0.10.0
requests-oauthlib==0.8.0
rsa==4.9
s3transfer==0.7.0
selenium==3.141.0
semantic-version==2.5.0
sendgrid==6.1.2
sentry-sdk==1.31.0
sgmllib3k==1.0.0
singledispatch==3.4.0.3
six==1.15.0
slackclient==2.9.3
social-auth-app-django==2.1.0
social-auth-core==1.7.0
soupsieve==2.4.1
SQLAlchemy==1.4.49
sqlalchemy-mate==1.4.28.4
sqlparse==0.4.4
static3==0.7.0
tabulate==0.7.5
termcolor==1.1.0
timeout-decorator==0.5.0
toml==0.10.2
tomli==2.0.1
tornado==6.0.3
tqdm==4.65.0
twitch-dl==1.21.0
typing-inspect==0.9.0
typing_extensions==4.7.1
tzdata==2023.3
tzlocal==5.0.1
uritemplate==4.1.1
urllib3==1.26.16
uszipcode==1.0.1
virtualenv==20.0.8
w3lib==2.1.1
wcwidth==0.1.7
websocket-client==1.5.1
websockets==9.1
Werkzeug==0.9.4
WTForms==1.0.5
yarl==1.9.2
yt-dlp==2023.7.6
zeroconf==0.62.0
zipp==3.15.0
zstd==1.5.5.1

tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
We want this patch [0] in eventlet that avoids contacting nameservers
if there's at least one (IPv4 or IPv6) entry in the hosts file.
In the case where no nameservers are configured, this will avoid
unnecessary delays when resolving hostnames.

Also eventlet <v0.21.0 is affected by [1] on Python 3.6 causing
neutron to fail with SSL enabled. The issue is fixed in v0.21.0

Also updates os-xenapi to compatible version.

[0] eventlet/eventlet@10ff67f
[1] eventlet/eventlet#371

Closes-bug: #1785615
Closes-bug: #1884808
Depends-On: https://review.opendev.org/#/c/736194/
Change-Id: Ia18372625d1e5c87a3afdb5617f0390c19d46470
tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
We want this patch [0] in eventlet that avoids contacting nameservers
if there's at least one (IPv4 or IPv6) entry in the hosts file.
In the case where no nameservers are configured, this will avoid
unnecessary delays when resolving hostnames.

Also eventlet <v0.21.0 is affected by [1] on Python 3.6 causing
neutron to fail with SSL enabled. The issue is fixed in v0.21.0

Also updates os-xenapi to compatible version.

[0] eventlet/eventlet@10ff67f
[1] eventlet/eventlet#371

Change-Id: Ia18372625d1e5c87a3afdb5617f0390c19d46470
Closes-bug: #1785615
Closes-bug: #1884808
tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
We want this patch [0] in eventlet that avoids contacting nameservers
if there's at least one (IPv4 or IPv6) entry in the hosts file.
In the case where no nameservers are configured, this will avoid
unnecessary delays when resolving hostnames.

Also eventlet <v0.21.0 is affected by [1] on Python 3.6 causing
neutron to fail with SSL enabled. The issue is fixed in v0.21.0

Also updates os-xenapi to compatible version.

[0] eventlet/eventlet@10ff67f
[1] eventlet/eventlet#371

Closes-bug: #1785615
Closes-bug: #1884808
Change-Id: Ia18372625d1e5c87a3afdb5617f0390c19d46470
tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
We want this patch [0] in eventlet that avoids contacting nameservers
if there's at least one (IPv4 or IPv6) entry in the hosts file.
In the case where no nameservers are configured, this will avoid
unnecessary delays when resolving hostnames.

Also eventlet <v0.21.0 is affected by [1] on Python 3.6 causing
neutron to fail with SSL enabled. The issue is fixed in v0.21.0

[0] eventlet/eventlet@10ff67f
[1] eventlet/eventlet#371

Change-Id: Ia18372625d1e5c87a3afdb5617f0390c19d46470
Closes-bug: #1785615
Closes-bug: #1884808
tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
We want this patch [0] in eventlet that avoids contacting nameservers
if there's at least one (IPv4 or IPv6) entry in the hosts file.
In the case where no nameservers are configured, this will avoid
unnecessary delays when resolving hostnames.

Also eventlet <v0.21.0 is affected by [1] on Python 3.6 causing
neutron to fail with SSL enabled. The issue is fixed in v0.21.0

Also updates os-xenapi to compatible version.

[0] eventlet/eventlet@10ff67f
[1] eventlet/eventlet#371

Closes-bug: #1785615
Closes-bug: #1884808
Change-Id: Ia18372625d1e5c87a3afdb5617f0390c19d46470
tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
Patch Set 1: Code-Review+1

Have been trying to get py3.6 working with vmware-nsx (a neutron plugin project), but with eventlet 20.x is failing with [1]. Eventlet 0.24.1 fixes this issue.
I also ran py36 + eventlet 0.24.1 with neutron UTs locally; green.


[1] eventlet/eventlet#371

Patch-set: 1
Reviewer: Gerrit User 5367 <5367@4a232e18-c5a9-48ee-94c0-e04e7cca6543>
Label: Code-Review=+1
tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
Eventlet v0.20.0 is affected by [0] causing neutron-rpc-server to fail
with SSL enabled. The issue is fixed in v0.21.0

[0] eventlet/eventlet#371

Closes-Bug: #1884808
Change-Id: I9c8e226166358c7d4e3b5cd57512ac08497aee02
Signed-off-by: Andrii Ostapenko <andrii.ostapenko@att.com>
tanaypf9 pushed a commit to tanaypf9/pf9-requirements that referenced this issue May 20, 2024
Eventlet v0.20.0 is affected by [0] on Python 3.6 causing
neutron-rpc-server to fail with SSL enabled. The issue is
fixed in v0.21.0

Though issue affects Python 3.6 and above, there's a value
to try keeping its version consistent among all Python
versions.

[0] eventlet/eventlet#371

Closes-Bug: #1884808
Change-Id: I9c8e226166358c7d4e3b5cd57512ac08497aee02
Signed-off-by: Andrii Ostapenko <andrii.ostapenko@att.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests