Skip to content

deps: use Python 3.8#41979

Closed
epuertat wants to merge 1 commit intoceph:mainfrom
rhcs-dashboard:wip-51319-master
Closed

deps: use Python 3.8#41979
epuertat wants to merge 1 commit intoceph:mainfrom
rhcs-dashboard:wip-51319-master

Conversation

@epuertat
Copy link
Copy Markdown
Member

@epuertat epuertat commented Jun 22, 2021

Reasons:

  • Making dependencies on Python minor version numbers explicit (PEP-20: explicit is better than implicit): Ceph packages don't explicitly require a minor Python version, but they actually rely on 3.6 features (f-strings just to name one).
  • Python 3.6 reaches End of Life this Dec '21 (3.8 EoL is Oct '24).
  • Python 3.8 provides new features that might help write more efficient and solid code:
    • Improved typing support
    • dataclasses
    • async
    • An statistics package
    • And other features [1] [2]
  • Performance-wise: Python 3.7/3.8 brought dramatic performance improvements:
    image

Other changes:

  • ceph.spec.in: use python3_version and python3_version_nodots Fedora/EPEL RPM macros. Added custom python3_version_major.

Check distro support:

  • CentOS 8
  • Ubuntu >20.04
  • OpenSUSE Leap 15.3

Fixes: https://tracker.ceph.com/issues/51319
Fixes: https://tracker.ceph.com/issues/56945
Signed-off-by: Ernesto Puerta epuertat@redhat.com

Checklist

  • References tracker ticket
  • Updates documentation if necessary
  • Includes tests for new functionality or reproducer for bug

Show available Jenkins commands
  • jenkins retest this please
  • jenkins test classic perf
  • jenkins test crimson perf
  • jenkins test signed
  • jenkins test make check
  • jenkins test make check arm64
  • jenkins test submodules
  • jenkins test dashboard
  • jenkins test api
  • jenkins test docs
  • jenkins render docs
  • jenkins test ceph-volume all
  • jenkins test ceph-volume tox

set(WITH_PYTHON3 "3" CACHE STRING "build with specified python3 version")
if(NOT WITH_PYTHON3 STREQUAL "3")
# Please specify 3.[0-8] if you want to build with a certain version of python3.
set(WITH_PYTHON3 "3.8" CACHE STRING "build with specified python3 version")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have 3.8 installed on my system. Is there a way to make exclude 3.5 without mandating versions that are not installed?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't think wiring the default value to 3.8 helps unless we depends on 3.8 and up.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have 3.8 installed on my system. Is there a way to make exclude 3.5 without mandating versions that are not installed?

@sebastian-philipp but if we declare the 3.8 dep it'll become installed. Is there any specific reason not to want 3.8 installed?

Copy link
Copy Markdown
Member Author

@epuertat epuertat Jun 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't think wiring the default value to 3.8 helps unless we depends on 3.8 and up.

@tchaikov just to mention a single change: f-strings are not supported in 3.5, so we should at least indicate that we require 3.6 or above (which, on the other hand, is nothing really adventurous given that 3.5 end of life finished almost a year ago and 3.6 EOL is Dec this year).

The reason to go with 3.8 is using improved typing constructs and other basic helpers as dataclasses.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't think wiring the default value to 3.8 helps unless we depends on 3.8 and up.

@tchaikov just to mention a single change: f-strings are not supported in 3.5, so we should at least indicate that we require 3.6 or above (which, on the other hand, is nothing really adventurous given that 3.5 end of life finished almost a year ago and 3.6 EOL is Dec this year).

i agreed that depending on 3.6 is the way to go. that's actually one of the reasons why i pushed the xenial to bionic change.

please note, my concern is not why 3.6 but why 3.8.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally I've found a few things that are of interest in python 3.8, but they mainly revolve around asyncio improvements. On top of that, I find having type annotation forward references is incredibly useful. And, as @epuertat mentioned, 3.6 is EOL at end of this year, and moving on to python 3.8 makes sense just because of that, should there be no particular constraint.

set(WITH_PYTHON3 "3" CACHE STRING "build with specified python3 version")
if(NOT WITH_PYTHON3 STREQUAL "3")
# Please specify 3.[0-8] if you want to build with a certain version of python3.
set(WITH_PYTHON3 "3.8" CACHE STRING "build with specified python3 version")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't think wiring the default value to 3.8 helps unless we depends on 3.8 and up.

BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: python%{python3_pkgversion}-setuptools
BuildRequires: python%{python3_pkgversion}-Cython
BuildRequires: python%{python3_version_nodots}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't understand this change. and i cannot find the explanation in the commit message or in tracker ticket.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tchaikov sure, I'll update the PR to comment my changes. In this very case, the python3_pkgversion macro is not used in the RPM ecosystem, while the python3_version_nodots is a very well established macro.

Copy link
Copy Markdown
Contributor

@tchaikov tchaikov Jun 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was looking at https://fedoraproject.org/wiki/PackagingDrafts:Python3EPEL and was referencing lots of actively maintained python packages when working on the rpm recipe, for instance

so i am not convinced that python3_pkgversion is not used in the RPM ecosystem.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and this change should be put into a separate commit.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reference @tchaikov . My main concern with the python3_pkgversion is that the name is not very self-describing, ulinke python3_version, python3_version_nodots or python3_version_major (which follows the CMake convention).

Why should this be in a separate commit?

Copy link
Copy Markdown
Contributor

@tchaikov tchaikov Jun 24, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the reference @tchaikov . My main concern with the python3_pkgversion is that the name is not very self-describing, ulinke python3_version, python3_version_nodots or python3_version_major (which follows the CMake convention).

IMHO, pkgversion is a good name in this context, in which it specifies the python version of a python package.

i don't understand why we need to follow the CMake convention here. and strictly speaking, i don't think python3_version, python3_version_nodots and python3_version_major are following the find_package() conventions.

FindPython3 module follows the convention of find_package(), so find_package(Python3 ...) can work as expected.

Why should this be in a separate commit?

because i think it is orthogonal to "use Python 3.8".

Copy link
Copy Markdown
Member Author

@epuertat epuertat Jun 24, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMHO, pkgversion is a good name in this context, in which it specifies the python version of a python package.

@tchaikov my main concern with that name is that it doesn't specify whether that's the major number only (as it was so far), the complete version with dots or without (as it should be, at least for CentOS and OpenSUSE python38 and other ABI-bound packages).

because i think it is orthogonal to "use Python 3.8".

Do you mean replacing the python3_pkgversion with python3_version_nodots?

I don't think so: maybe it's not compulsory, but you still need 2 macros to cope with packages bound to the 3.8 ABI (e.g.: python38-Cython) and pure source code packages (e.g.: python3-cherrypy). If you prefer to keep python3_pkgversion, which one should be it? The major-version one or the full nodots? That's why I preferred having a self-descriptive macro. What's your preference?

Copy link
Copy Markdown
Contributor

@tchaikov tchaikov Jun 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i don't think we should not differentiate the python packages which contains binaries from the ones which are implemtented in "pure python". as both of them are packaged and installed for a certain python x.y version, instead of a certain major version. take python3-cherrypy as an example

$ rpm -q --provides python3-cherrypy
python3-cherrypy = 18.4.0-1.el8
python3.6dist(cherrypy) = 18.4.0
python3dist(cherrypy) = 18.4.0

the reasons why i think python3_pkgversion is the right choice are not completely based on by my personal preferences or taste:

  1. to follow related package guide line: https://fedoraproject.org/wiki/PackagingDrafts:Python3EPEL

    All references to python3 (except in macro names) need to be replaced with python%{python3_pkgversion}.

  2. to follow examples. as it is used by lots of actively maintained python packages. see

    1. https://src.fedoraproject.org/rpms/python-setuptools/blob/rawhide/f/python-setuptools.spec
    2. https://src.fedoraproject.org/rpms/python-requests/blob/rawhide/f/python-requests.spec

in general, python package maintainers should not hardwire a python package to a certain python3 minor version. python3 means the python3.6 in EL8, and it is python3.9 in fedora33. python3_pkgversion is used to encapsulate this information, and i think it serves this purpose well. i am not an expert on the rpm packaging, and i don't feel comfortable commenting on if other macros are superior or better than python3_pkgversion . it is but my 2 cents.

Do you mean replacing the python3_pkgversion with python3_version_nodots?

yes. and i don't recommend python3_version_nodots. but if you insist, i'd suggest do this in two steps:

  1. to replace the python3_pkgversion with python3_version_nodots. and accompany it with explanations. so far the commit message still does not explain why we need this change. and your explanations in the comments have been changing.
  2. to set the default values of the rpm macros from "3" to "3.8". please note, this does not change the dependencies from 3 to 3.8, as the behavior depends on the existence of python-srpm-macros, python-rpm-macros, python36-rpm-macros and python38-rpm-macros .

instead i'd suggest:

  1. install python38-rpm-macros in install-deps.sh. with which, we have:
$ rpm --eval '%{python3_pkgversion}'
38
  1. replace python3-devel with python38-devel in install-deps.sh
  2. update https://github.com/ceph/ceph-build/blob/master/scripts/build_utils.sh#L1396
  3. make sure readthedoc build does not break. see https://readthedocs.org/projects/ceph/builds/14110525/ for an example, where python3.7 instead of python3.8 is used, but typing.Literal was not available in python3.7.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RtD change is created at #42577

BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: python%{python3_pkgversion}-setuptools
BuildRequires: python%{python3_pkgversion}-Cython
BuildRequires: python%{python3_version_nodots}
Copy link
Copy Markdown
Contributor

@tchaikov tchaikov Jun 23, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was looking at https://fedoraproject.org/wiki/PackagingDrafts:Python3EPEL and was referencing lots of actively maintained python packages when working on the rpm recipe, for instance

so i am not convinced that python3_pkgversion is not used in the RPM ecosystem.

ceph.spec.in Outdated
Requires: parted
Requires: psmisc
Requires: python%{python3_pkgversion}-setuptools
Requires: python%{python3_version_nodots}
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tchaikov what do you think about this one?

I wasn't sure when I added it: it affects the base package. On one hand I didn't want to impose a Ceph-wide dependency on Python 3.8, but on the other hand, it also relies on python3-setuptools which will in turn depend on python3x, so this makes the dependency more explicit. I personally feel that it's more dangerous to allow coexisting versions of Python on a mono-repo (and assume part of our code base is still 3.6 compliant, without making it clear which ones).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, the only python tool packaged by ceph-base is the ceph cli tool once #41999 gets merged. but ceph-base in turn depends on ceph-common which packages a bunch of ceph python modules, like

  • ceph-argparse
  • ceph-common

and python bindings for librados, libcephfs and librbd. all of them are build and installed for a certain python version. so yes, it should depend on a certain python runtime versioned with minor version number.

when it comes to python3-setuptool, i moved it to ceph-osd in #41999 as a cleanup. not sure what maintainers of ceph-volume think about the python3.8 dependencies. if we can go further by extracting ceph-volume into its own package, we don't need to worry about this problem anymore. but since ceph-osd depends on ceph-base, it's non-trivial to make the dependency from ceph-volume to "python3" but not "python3.8" explicit. and as you put, it might not be a best practice to use multiple python runtime in a deployment. i concur with you on this, as it'd be a pain for testability and maintainability, even it's completely technically viable and supported by python.

in short,

  • i'd avoid having both python3-setuptools and python38 as runtime dependencies of a single package.
  • if ceph-volume is extracted into its own package, and it does not depend on other ceph python modules. it can depend on python3-setuptools or python38-setuptools. but if we want to use python3-setuptools, we have to test both python36-setuptools and python38-setuptools.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

split ceph-volume pending on review at #42465

Copy link
Copy Markdown
Contributor

@tchaikov tchaikov Aug 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW, we will have to build python bindings for both python3.8 and python3.6, so we don't break the existing users of these python bindings, and package them individually. so each python binding will be built and packaged twice for python3.6 (or the default python3 on the distro) and python3.8.

@epuertat epuertat force-pushed the wip-51319-master branch 3 times, most recently from 9694598 to a4a393d Compare June 25, 2021 18:21
@github-actions
Copy link
Copy Markdown

This pull request can no longer be automatically merged: a rebase is needed and changes have to be manually resolved

Other changes:
- Added explicit dependency on git in ceph.spec (debian/control already
  had it).
- Tentatively removed hardcoded python3-devel install in install-deps.sh

Pros:
- Making dependencies on Python minor version numbers explicit
  (PEP-20: explicit is better than implicit): Ceph packages don't
  explicitly require a minor Python version, but they actually rely on
  3.6 features (f-strings just to name one).
- Python 3.6 reaches End of Life this Dec '21 (3.8 EoL is Oct '24).
- Python 3.8 provides new features that might help write more efficient
  and solid code:
  - Improved typing support
  - dataclasses
  - async
  - An statistics package
  - And other features [1] [2]
Performance-wise: Python 3.7/3.8 brought dramatic performance
improvements.

Fixes: https://tracker.ceph.com/issues/51319
Signed-off-by: Ernesto Puerta <epuertat@redhat.com>
@github-actions
Copy link
Copy Markdown

This pull request can no longer be automatically merged: a rebase is needed and changes have to be manually resolved

@tchaikov
Copy link
Copy Markdown
Contributor

tchaikov commented Aug 1, 2021

@epuertat is this change still relevant ? i will help migrating to python 3.8 if you are fine with this.

@epuertat
Copy link
Copy Markdown
Member Author

epuertat commented Aug 2, 2021

@epuertat is this change still relevant ? i will help migrating to python 3.8 if you are fine with this.

@tchaikov I'm more than fine with any help with this! This will become more and more relevant as long as we approach 3.8 EoL by end of this year.

@jecluis
Copy link
Copy Markdown
Member

jecluis commented Sep 13, 2021

@epuertat any idea what's needed to move this along?

@epuertat
Copy link
Copy Markdown
Member Author

@epuertat any idea what's needed to move this along?

@jecluis apart from rebasing... Based on this comment from @tchaikov, we'd need to modify our build pipeline to create 2 different set of packages for 3.8 and 3.6....

But to make things even funnier, I just tested with our 4 major target distros, and found that:

  • Both OpenSUSE Leap 15.3 and Debian 11 don't support 3.8, but just 3.9.
  • Both CentOS and Ubuntu provide support for both 3.8 and 3.9.

This is the detail on the testing with the following with docker images (centos:8, ubuntu:20.04, opensuse/leap:15, debian:11):

Distro Release Default Python 3 3.8 available
CentOS 8 3.6.8 3.8.6
dnf module -y install python38 (AppStream)
python3 --version: Python 3.8.6
Ubuntu 20.04 3.8.10 By default
apt install python3
OpenSUSE 15.3 3.6.13 No 3.8, 15.3 will directly support 3.9.
Debian 11 3.9.2 No 3.8 support, only 3.9.

Summarizing, if we want to support the above distro matrix, we should better go for 3.9 :/ Good thing is that the 3.9 will give us an extra year (EoL by 2025) and adds some features, like Annotations.

@epuertat
Copy link
Copy Markdown
Member Author

Harsher than initially expected. I barely started with CentOS and the main issue is that Python packages are installed in a specific /usr/lib/python3.6/site-packages/... location, even if they're cross-version compatible (same as with OpenSUSE, and just the opposite as Debian/Ubuntu distros where things go in /usr/lib/python3/dist-packages).

It can be easily hacked with a PYTHONPATH=/usr/lib/python3.6/site-packages/ python3 though :(

Tempted of doing this.

@epuertat
Copy link
Copy Markdown
Member Author

epuertat commented Sep 15, 2021

Package CentOS 8 OpenSUSE 15.3 Ubuntu 20.04 Debian 11 FreeBSD 13
Python 3 python39 python39 python3.8
(No Cython for 3.9)
python3 (3.9) python39
Python-only packages
(e.g.: Prettytable)
python39-prettytable
(in Fedora 33/34 ✔️)
python39-PrettyTable
(in Tumbleweed ✔️)
python3-prettytable
(3.x cross-compatible)
python3-prettytable
(3.x cross-compatible)
py37-prettytable

@stale
Copy link
Copy Markdown

stale bot commented Jan 9, 2022

This pull request has been automatically marked as stale because it has not had any activity for 60 days. It will be closed if no further activity occurs for another 30 days.
If you are a maintainer or core committer, please follow-up on this pull request to identify what steps should be taken by the author to move this proposed change forward.
If you are the author of this pull request, thank you for your proposed contribution. If you believe this change is still appropriate, please ensure that any feedback has been addressed and ask for a code review.

@stale stale bot added the stale label Jan 9, 2022
@epuertat epuertat removed the stale label Jan 14, 2022
@djgalloway djgalloway changed the base branch from master to main July 3, 2022 00:00
@ktdreyer
Copy link
Copy Markdown
Contributor

Red Hat's Python team will continue to maintain Python 3.6 in RHEL 8 (main EOL is May 31, 2029) and CentOS Stream 8 (EOL is May 31 2024).

We should consider dropping CentOS 8 support for Ceph in main. CentOS 9 ships Python 3.9 as the default Python version.

@cdeshmukh
Copy link
Copy Markdown

cdeshmukh commented Sep 7, 2022

@epuertat we were also looking for python-3.8(.13 as latest) upgrade, for reasons you had listed in PR description, plus in #56945 issue. Additionally, python-3.6 also has some security (CVEs) issues which asks for this upgrade strongly, however not all would apply here as python mainly used in build infra.

@epuertat is this change still relevant ? i will help migrating to python 3.8 if you are fine with this.
@tchaikov I'm more than fine with any help with this! This will become more and more relevant as long as we approach 3.8 EoL by end of this year.

After looking at this thread, saw much of the work and discussion has had happened already and was hopeful. Though after reading rest of the comments (below), seems additional packaging challenges would be added, which will be worth too i think, though would be more bulky, right?
#41979 (comment)
#41979 (comment)

From @tchaikov's comment

so each python binding will be built and packaged twice for python3.6 (or the default python3 on the distro) and python3.8.

Wouldn't this default version on distro can be bound too, to avoid breaking existing users python binding?

@epuertat @tchaikov
Atlast, would like to understand if there are plans to drive this PR further, can extend some help if needed.

@epuertat
Copy link
Copy Markdown
Member Author

epuertat commented Sep 7, 2022

@cdeshmukh yes, there are plans, but also multiple interlocking issues which complicate this:

  • From Ubuntu 22.04/Debian 11 this should be fine, as Ubuntu Jenkins CI (non-distro packaged) builds are currently running with Python 3.8, (@tchaikov can you please confirm)?
  • For CentOS that's a different story (CentOS 8 doesn't or didn't have all Python packages required for >=3.8, and CentOS 9 is still WIP) (@ktdreyer is that a fair description?)
  • Regarding other distros, like OpenSUSE, or older Ubuntu/Debian releases, I have no clue. Do we have any maintainer from those?

Are you targetting a specific distro?

@kshtsk
Copy link
Copy Markdown
Contributor

kshtsk commented Sep 8, 2022

The openSUSE recent version is Leap 15.4, which has python3.6 base version, however in stock distro there is python3.9 and even python3.10, but there is no python3.8 at all.

@epuertat
Copy link
Copy Markdown
Member Author

epuertat commented Sep 8, 2022

The openSUSE recent version is Leap 15.4, which has python3.6 base version, however in stock distro there is python3.9 and even python3.10, but there is no python3.8 at all.

Thanks for chiming in, @kshtsk ! There's no strict requirement on the minor of the Python version except that it be >=8 (based on a recent analysis on the base Python versions for newer distro releases, there's no agreement on it as there was with Python 3.6: some distros bring 3.8, others 3.9 and Ubuntu is directly going all-out for 3.10).

So could you please try to build Ceph on OpenSUSE with PYTHON RPM macros set to 3.9, install it and check if all build or install deps are met? Thanks!

@cdeshmukh
Copy link
Copy Markdown

cdeshmukh commented Sep 8, 2022

thanks @epuertat

For CentOS that's a different story (CentOS 8 doesn't or didn't have all Python packages required for >=3.8, and CentOS 9 is still WIP) (@ktdreyer is that a fair description?)
Are you targetting a specific distro?

We (cortx-rgw) are targeting RockyLinux 8.4 (CentOS 8 equivalent), which doesn't have python installed by default, though on explicit install of python3, 3.6.8 python version is installed from RockyLinux 8.4 repositories.

So what are the plans for upgrade then for CentOS 8? And this upgrade would be targeted independently for all distros, in ceph build scripts, or need to be together, i believe its the latter case.

@epuertat epuertat requested review from kshtsk and ktdreyer September 8, 2022 12:00
@ktdreyer
Copy link
Copy Markdown
Contributor

So what are the plans for upgrade then for CentOS 8?

The plan is that quincy will be the final release to support CentOS 8, and we'll minimally require CentOS 9 for reef and beyond.

@alfonsomthd alfonsomthd removed their request for review September 13, 2022 06:37
@cdeshmukh
Copy link
Copy Markdown

So what are the plans for upgrade then for CentOS 8?

The plan is that quincy will be the final release to support CentOS 8, and we'll minimally require CentOS 9 for reef and beyond.

thanks for the insightful link for upcoming Reef release, very useful details in there.

However, i should have been more specific. I meant to ask the plan for 'upgrade to python 3.8/3.9' on CentOS8 itself(until Reef is released & we can adopt), for which this PR was intended originally, along with to support other Distro versions.

@github-actions
Copy link
Copy Markdown

This pull request has been automatically marked as stale because it has not had any activity for 60 days. It will be closed if no further activity occurs for another 30 days.
If you are a maintainer or core committer, please follow-up on this pull request to identify what steps should be taken by the author to move this proposed change forward.
If you are the author of this pull request, thank you for your proposed contribution. If you believe this change is still appropriate, please ensure that any feedback has been addressed and ask for a code review.

@github-actions github-actions bot added the stale label Nov 28, 2022
@github-actions
Copy link
Copy Markdown

This pull request has been automatically closed because there has been no activity for 90 days. Please feel free to reopen this pull request (or open a new one) if the proposed change is still appropriate. Thank you for your contribution!

@github-actions github-actions bot closed this Dec 28, 2022
@rkachach
Copy link
Copy Markdown
Contributor

rkachach commented Apr 17, 2024

@epuertat @tchaikov it's been a while since this PR was closed. Checking the current supported versions I can see that both Python 3.6 and Python 3.7 are already EOL .. 3.8 is also close to its official EOL. Some newer libraries are already dropping support for the EOL versions so probably we have to check the feasibility of bumping up our min Python version.

@phlogistonjohn @adk3798

image

WDYT?

@tchaikov
Copy link
Copy Markdown
Contributor

@rkachach before we drop the support of RHEL 8, we still have to support python 3.6. see also #56617 .

@rkachach
Copy link
Copy Markdown
Contributor

rkachach commented Apr 17, 2024

Red Hat's Python team will continue to maintain Python 3.6 in RHEL 8 (main EOL is May 31, 2029) and CentOS Stream 8 (EOL is May 31 2024).

We should consider dropping CentOS 8 support for Ceph in main. CentOS 9 ships Python 3.9 as the default Python version.

I see, thanks @tchaikov.

@ktdreyer do you know how long should we support RHEL8?

@adk3798
Copy link
Copy Markdown
Contributor

adk3798 commented Apr 17, 2024

Red Hat's Python team will continue to maintain Python 3.6 in RHEL 8 (main EOL is May 31, 2029) and CentOS Stream 8 (EOL is May 31 2024).
We should consider dropping CentOS 8 support for Ceph in main. CentOS 9 ships Python 3.9 as the default Python version.

I see, thanks @tchaikov.

@ktdreyer do you know how long should we support RHEL8?

We are very close to moving over to centos 9 based containers (which have python 3.9 iirc) and that move is considered a blocker for the first squid RC build. On the other hand, we will still be doing quincy and reef releases on centos 8 containers.

@ktdreyer
Copy link
Copy Markdown
Contributor

we will still be doing quincy and reef releases on centos 8 containers.

Hopefully those will move to use an el9 base image also. Like Kefu said, CentOS 8 Stream will be EOL May 31.

@rkhudov
Copy link
Copy Markdown
Contributor

rkhudov commented Jul 19, 2024

@epuertat do we need to update default value for python3_pkgversion in ceph.spec.in file, since now the minimal supported version of python is 3.9?

@epuertat
Copy link
Copy Markdown
Member Author

@epuertat do we need to update default value for python3_pkgversion in ceph.spec.in file, since now the minimal supported version of python is 3.9?

In some RPM docs they suggest that python3_pkgversion be the dotted Python version (e.g.: 3.9, 3.11), as that's mostly used for core Python packages (python3.9-devel) but in our case we're using it for generating the Ceph Python packages (python3-rados) and dependencies (python3-grpcio).

That might work for installing deps, as most Python packages (that excludes OpenSUSE ecosystem) also define provides with the format pythonX.Y-<package> (e.g.: python3.9-grpcio), but for the package names in the Ceph spec file we should use then another macro. This may mean that the Ceph spec deserves a refactoring to properly deal with Python versions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants