Now that most OpenStack services have reached feature freeze for the Mitaka cycle (November 2015-April 2016), it’s time to look back on the progress made for Python 3 support.
Previous status update: Python 3 Status in OpenStack Liberty (September 2015).
Services ported to Python 3
13 services were ported to Python 3 during the Mitaka cycle:
Red Hat contributed to the Cinder, Designate, Glance and Horizon service porting efforts.
“Ported to Python 3” means that all unit tests pass on Python 3.4 which is verified by a voting gate job. It is not enough to run applications in production with Python 3. Integration and functional tests are not run on Python 3 yet. See the section dedicated to these tests below.
See the Python 3 wiki page for the current status of the OpenStack port to Python 3; especially the list of services ported to Python 3.
Services not ported yet
It’s become easier to list services which are not compatible with Python 3 than listing services already ported to Python 3!
9 services still need to be ported:
- Magnum: 83% (959 unit tests/1,161)
- Cue: 81% (208 unit tests/257)
- Nova: 74% (10,859 unit tests/14,726)
- Barbican: 34% (392 unit tests/1168)
- Murano: 29% (133 unit tests/455)
- Keystone: 27% (1200 unit tests/4455)
- Swift: 0% (3 unit tests/4,435)
- Neutron-LBaaS: 0% (1 unit test/806)
- Port not started yet:
- Trove: no python34 gate
Red Hat contributed Python 3 patches to Cue, Neutron-LBaaS, Swift and Trove during the Mitaka cycle.
Trove developers are ready to start the port at the beginning of the next cycle (Newton). The py34 test environment was blocked by the MySQL-Python dependency (it was not possible to build the test environment), but this dependency is now skipped on Python 3. Later, it will be replaced with PyMySQL on Python 2 and Python 3.
Python 3 issues in Eventlet
Four Python 3 issues were fixed in Eventlet:
- Issue #295: Python 3: wsgi doesn’t handle correctly partial write of socket send() when using writelines()
- PR #275: Issue #274: Fix GreenSocket.recv_into(). Issue: On Python 3, sock.makefile(‘rb’).readline() doesn’t handle blocking errors correctly
- PR #257: Fix GreenFileIO.readall() for regular file
- Issue #248: eventlet.monkey_patch() on Python 3.4 makes stdout non-blocking: pull request Fix GreenFileIO.write()
Next Milestone: Functional and integration tests
The next major milestone will be to run functional and integration tests on Python 3.
- functional tests are restricted to one component (ex: only Glance)
- integration tests, like Tempest, test the integration of multiple components
It is now possible to install some packages on Python 3 in DevStack using
PYTHON3_VERSION variables: Enable optional Python 3 support. It means that it is possible to run tests with some services running on Python 3, and the remaining services on Python 2.
The port to Python 3 of Glance, Heat and Neutron functional and integration tests have already started.
For Glance, 159 functional tests already pass on Python 3.4.
- project-config: Add python34 integration test job for Heat (WIP)
- heat: py34: integration tests (WIP)
Neutron: the Add the functional-py34 and dsvm-functional-py34 targets to tox.ini change was merged, but a gate job hasn’t been added for it yet.
Another pending project is to fix issues specific to Python 3.5, but the gate doesn’t use Python 3.5 yet. There are some minor issues, probably easy to fix.
How to port remaining code?
The Python 3 wiki page contains a lot of information about adding Python 3 support to Python 2 code.
Join us in the
#openstack-python3 IRC channel on Freenode to discuss Python 3!