-
Epic
-
Resolution: Unresolved
-
Major
-
None
-
None
-
None
-
Migrating off of Eventlet
-
False
-
-
False
-
Not Selected
-
?
-
?
-
To Do
-
?
-
?
-
25% To Do, 25% In Progress, 50% Done
-
-
-
2024Q2
Compatibility between Eventlet and modern versions of CPython is broken. Leadings Openstack to critical runtime problems https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/YO5CZDVAJ6QSF734ALWSGNOQDDAIOXKI/#RZFUTBFTUCSHKVA6SOCWWIXEH3QJHMYT.
CPython is maintained by thousand of maintainers. Eventlet who aims to monkey patch significant parts of the CPython standard library, is maintained by 2 persons. The compatibility between them is already broken since years ago, and this become a critical, and not recoverable problem. The gap is to wide and we don't have the resources to fix that.
We identified Asyncio as a good replacement solution for Eventlet. As Asyncio is part of the CPython standard library, we think this is a sustainable solution that won't lead us to the same problems in 5 years.
Eventlet monkey patch the stdlib, meaning that all components using Eventlet becomes asynchronous without rewriting the Openstack code. On the other hand, Asyncio is based on an explicit async model, meaning that source code that made network async I/O should be implemented by following a specific pattern.
The preceding claims outline the contours of migration plan which promise to be complexe. We have to refactor all the async network I/O calls made by Openstack to port them to asyncio. Eventlet is widely used in Openstack, meaning that we can't implement a on/off migration. The migration should be incremental. The migration will impact all Openstack components that are using Eventlet, so the migration should be proposed as an Openstack community goal, where teams and DFG will be responsible of the migration of their components.
Not to simplify things, Asyncio and Eventlet not being compatible with each other, they can't be ran in the same process, so, we have to design a solution where both libraries can be compatible in the same process.
This epic aims to serve as an entry point to plan the migration and hence tracking its advancement.