Thank you for comment, Valentyn. > 1) We can seed the smoke test suite with typehints tests, and add more tests > later if there is a need. We can identify them by the file path or by special > attributes in test files. Identifying them using filepath seems simpler and > independent of test runner.
Yes, making run_pylint.sh allow target test file paths as arguments is good way if could. > 3) We should reduce the code duplication across > beam/sdks/python/test-suites/$runner/py3*. I think we could move the suite > definition into a common file like > beam/sdks/python/test-suites/$runner/build.gradle perhaps, and populate > individual suites (beam/sdks/python/test-suites/$runner/py38/build.gradle) > including the common file and/or logic from PythonNature [1]. Exactly. I'll check it out. > 4) We have some tests that we run only under specific Python 3 versions, for > example: FlinkValidatesRunner test runs using Python 3.5: [2] > HDFS Python 3 tests are running only with Python 3.7 [3]. Cross-language Py3 > tests for Spark are running under Python 3.5[4]: , there may be more test > suites that selectively use particular versions. > We need to correct such suites, so that we do not tie them to a specific > Python version. I see several options here: such tests should run either for > all high-priority versions, or run only under the lowest version among the > high-priority versions. We don't have to fix them all at the same time. In > general, we should try to make it as easy as possible to configure, whether a > suite runs across all versions, all high-priority versions, or just one > version. The way of high-priority/low-priority configuration would be useful for this. And which versions to be tested may be related to 5). > 5) If postcommit suites (that need to run against all versions) still > constitute too much load on the infrastructure, we may need to investigate > how to run these suites less frequently. That's certainly true, beam_PostCommit_PythonXX and beam_PostCommit_Python_Chicago_Taxi_(Dataflow|Flink) take about 1 hour. Does anyone have knowledge about this? 2020年5月2日(土) 5:18 Valentyn Tymofieiev <valen...@google.com>: > > Hi Yoshiki, > > Thanks a lot for your help with Python 3 support so far and most recently, > with your work on Python 3.8. > > Overall the proposal sounds good to me. I see several aspects here that we > need to address: > > 1) We can seed the smoke test suite with typehints tests, and add more tests > later if there is a need. We can identify them by the file path or by special > attributes in test files. Identifying them using filepath seems simpler and > independent of test runner. > > 2) Defining high priority/low priority versions in gradle.properties sounds > good to me. > > 3) We should reduce the code duplication across > beam/sdks/python/test-suites/$runner/py3*. I think we could move the suite > definition into a common file like > beam/sdks/python/test-suites/$runner/build.gradle perhaps, and populate > individual suites (beam/sdks/python/test-suites/$runner/py38/build.gradle) > including the common file and/or logic from PythonNature [1]. > > 4) We have some tests that we run only under specific Python 3 versions, for > example: FlinkValidatesRunner test runs using Python 3.5: [2] > HDFS Python 3 tests are running only with Python 3.7 [3]. Cross-language Py3 > tests for Spark are running under Python 3.5[4]: , there may be more test > suites that selectively use particular versions. > > We need to correct such suites, so that we do not tie them to a specific > Python version. I see several options here: such tests should run either for > all high-priority versions, or run only under the lowest version among the > high-priority versions. We don't have to fix them all at the same time. In > general, we should try to make it as easy as possible to configure, whether a > suite runs across all versions, all high-priority versions, or just one > version. > > 5) If postcommit suites (that need to run against all versions) still > constitute too much load on the infrastructure, we may need to investigate > how to run these suites less frequently. > > [1] > https://github.com/apache/beam/blob/b78c7ed4836e44177a149155581cfa8188e8f748/sdks/python/test-suites/portable/py37/build.gradle#L19-L20 > [2] > https://github.com/apache/beam/blob/93181e792f648122d3b4a5080d683f21c6338132/.test-infra/jenkins/job_PostCommit_Python35_ValidatesRunner_Flink.groovy#L34 > [3] > https://github.com/apache/beam/blob/93181e792f648122d3b4a5080d683f21c6338132/sdks/python/test-suites/direct/py37/build.gradle#L58 > [4] > https://github.com/apache/beam/blob/93181e792f648122d3b4a5080d683f21c6338132/.test-infra/jenkins/job_PostCommit_CrossLanguageValidatesRunner_Spark.groovy#L44 > > On Fri, May 1, 2020 at 8:42 AM Yoshiki Obata <yoshiki.ob...@gmail.com> wrote: >> >> Hello everyone. >> >> I'm working on Python 3.8 support[1] and now is the time for preparing >> test infrastructure. >> According to the discussion, I've considered how to prioritize tests. >> My plan is as below. I'd like to get your thoughts on this. >> >> - With all low-pri Python, apache_beam.typehints.*_test run in the >> PreCommit test. >> New gradle task should be defined like "preCommitPy3*-minimum". >> If there are essential tests for all versions other than typehints, >> please point out. >> >> - With high-pri Python, the same tests as running in the current >> PreCommit test run for testing extensively; "tox:py3*:preCommitPy3*", >> "dataflow:py3*:preCommitIT" and "dataflow:py3*:preCommitIT_V2". >> >> - Low-pri versions' whole PreCommit tests are moved to each PostCommit tests. >> >> - High-pri and low-pri versions are defined in gralde.properties and >> PreCommit/PostCommit task dependencies are built dynamically according >> to them. >> It would be easy for switching priorities of Python versions. >> >> [1] https://issues.apache.org/jira/browse/BEAM-8494 >> >> 2020年4月4日(土) 7:51 Robert Bradshaw <rober...@google.com>: >> > >> > https://pypistats.org/packages/apache-beam is an interesting data point. >> > >> > The good news: Python 3.x more than doubled to nearly 40% of downloads >> > last month. Interestingly, it looks like a good chunk of this increase was >> > 3.5 (which is now the most popular 3.x version by this metric...) >> > >> > I agree with using Python EOL dates as a baseline, with the possibility of >> > case-by-case adjustments. Refactoring our tests to support 3.8 without >> > increasing the load should be our focus now. >> > >> > >> > On Fri, Apr 3, 2020 at 3:41 PM Valentyn Tymofieiev <valen...@google.com> >> > wrote: >> >> >> >> Some good news on Python 3.x support: thanks to +David Song and +Yifan >> >> Zou we now have Python 3.8 on Jenkins, and can start working on adding >> >> Python 3.8 support to Beam (BEAM-8494). >> >> >> >>> One interesting variable that has not being mentioned is what versions >> >>> of python 3 >> >>> are available to users via their distribution channels (the linux >> >>> distributions they use to develop/run the pipelines). >> >> >> >> >> >> Good point. Looking at Ubuntu 16.04, which comes with Python 3.5.2, we >> >> can see that the end-of-life for 16.04 is in 2024, end-of-support is >> >> April 2021 [1]. Both of these dates are beyond the announced Python 3.5 >> >> EOL in September 2020 [2]. I think it would be difficult for Beam to keep >> >> Py3.5 support until these EOL dates, and users of systems that stock old >> >> versions of Python have viable workarounds: >> >> - install a newer version of Python interpreter via pyenv[3], from >> >> sources, or from alternative repositories. >> >> - use a docker container that comes with a newer version of interpreter. >> >> - use older versions of Beam. >> >> >> >> We didn't receive feedback from user@ on how long 3.x versions on the >> >> lower/higher end of the range should stay supported. I would suggest for >> >> now that we plan to support all Python 3.x versions that were released >> >> and did not reach EOL. We can discuss exceptions to this rule on a >> >> case-by-case basis, evaluating any maintenance burden to continue >> >> support, or stop early. >> >> >> >> We should now focus on adjusting our Python test infrastructure to make >> >> it easy to split 3.5, 3.6, 3.7, 3.8 suites into high-priority and >> >> low-priority suites according to the Python version. Ideally, we should >> >> make it easy to change which versions are high/low priority without >> >> having to change all the individual test suites, and without losing test >> >> coverage signal. >> >> >> >> [1] https://wiki.ubuntu.com/Releases >> >> [2] https://devguide.python.org/#status-of-python-branches >> >> [3] https://github.com/pyenv/pyenv/blob/master/README.md >> >> >> >> On Fri, Feb 28, 2020 at 1:25 AM Ismaël Mejía <ieme...@gmail.com> wrote: >> >>> >> >>> One interesting variable that has not being mentioned is what versions >> >>> of python >> >>> 3 are available to users via their distribution channels (the linux >> >>> distributions they use to develop/run the pipelines). >> >>> >> >>> - RHEL 8 users have python 3.6 available >> >>> - RHEL 7 users have python 3.6 available >> >>> - Debian 10/Ubuntu 18.04 users have python 3.7/3.6 available >> >>> - Debian 9/Ubuntu 16.04 users have python 3.5 available >> >>> >> >>> >> >>> We should consider this when we evaluate future support removals. >> >>> >> >>> Given that the distros that support python 3.5 are ~4y old and since >> >>> python 3.5 >> >>> is also losing LTS support soon is probably ok to not support it in Beam >> >>> anymore as Robert suggests. >> >>> >> >>> >> >>> On Thu, Feb 27, 2020 at 3:57 AM Valentyn Tymofieiev >> >>> <valen...@google.com> wrote: >> >>>> >> >>>> Thanks everyone for sharing your perspectives so far. It sounds like we >> >>>> can mitigate the cost of test infrastructure by having: >> >>>> - a selection of (fast) tests that we will want to run against all >> >>>> Python versions we support. >> >>>> - high priority Python versions, which we will test extensively. >> >>>> - infrequent postcommit test that exercise low-priority versions. >> >>>> We will need test infrastructure improvements to have the flexibility >> >>>> of designating versions of high-pri/low-pri and minimizing efforts >> >>>> requiring adopting a new version. >> >>>> >> >>>> There is still a question of how long we want to support old Py3.x >> >>>> versions. As mentioned above, I think we should not support them beyond >> >>>> EOL (5 years after a release). I wonder if that is still too long. The >> >>>> cost of supporting a version may include: >> >>>> - Developing against older Python version >> >>>> - Release overhead (building & storing containers, wheels, doing >> >>>> release validation) >> >>>> - Complexity / development cost to support the quirks of the minor >> >>>> versions. >> >>>> >> >>>> We can decide to drop support, after, say, 4 years, or after usage >> >>>> drops below a threshold, or decide on a case-by-case basis. Thoughts? >> >>>> Also asked for feedback on user@ [1] >> >>>> >> >>>> [1] >> >>>> https://lists.apache.org/thread.html/r630a3b55aa8e75c68c8252ea6f824c3ab231ad56e18d916dfb84d9e8%40%3Cuser.beam.apache.org%3E >> >>>> >> >>>> On Wed, Feb 26, 2020 at 5:27 PM Robert Bradshaw <rober...@google.com> >> >>>> wrote: >> >>>>> >> >>>>> On Wed, Feb 26, 2020 at 5:21 PM Valentyn Tymofieiev >> >>>>> <valen...@google.com> wrote: >> >>>>> > >> >>>>> > > +1 to consulting users. >> >>>>> > I will message user@ as well and point to this thread. >> >>>>> > >> >>>>> > > I would propose getting in warnings about 3.5 EoL well ahead of >> >>>>> > > time. >> >>>>> > I think we should document on our website, and in the code >> >>>>> > (warnings) that users should not expect SDKs to be supported in Beam >> >>>>> > beyond the EOL. If we want to have flexibility to drop support >> >>>>> > earlier than EOL, we need to be more careful with messaging because >> >>>>> > users might otherwise expect that support will last until EOL, if we >> >>>>> > mention EOL date. >> >>>>> >> >>>>> +1 >> >>>>> >> >>>>> > I am hoping that we can establish a consensus for when we will be >> >>>>> > dropping support for a version, so that we don't have to discuss it >> >>>>> > on a case by case basis in the future. >> >>>>> > >> >>>>> > > I think it would makes sense to add support for 3.8 right away (or >> >>>>> > > at least get a good sense of what work needs to be done and what >> >>>>> > > our dependency situation is like) >> >>>>> > https://issues.apache.org/jira/browse/BEAM-8494 is a starting point. >> >>>>> > I tried 3.8 a while ago some dependencies were not able to install, >> >>>>> > checked again just now. SDK is "installable" after minor changes. >> >>>>> > Some tests don't pass. BEAM-8494 does not have an owner atm, and if >> >>>>> > anyone is interested I'm happy to give further pointers and help get >> >>>>> > started. >> >>>>> > >> >>>>> > > For the 3.x series, I think we will get the most signal out of the >> >>>>> > > lowest and highest version, and can get by with smoke tests + >> >>>>> > infrequent post-commits for the ones between. >> >>>>> > >> >>>>> > > I agree with having low-frequency tests for low-priority versions. >> >>>>> > > Low-priority versions could be determined according to least usage. >> >>>>> > >> >>>>> > These are good ideas. Do you think we will want to have an ability >> >>>>> > to run some (inexpensive) tests for all versions frequently (on >> >>>>> > presubmits), or this is extra complexity that can be avoided? I am >> >>>>> > thinking about type inference for example. Afaik inference logic is >> >>>>> > very sensitive to the version. Would it be acceptable to catch >> >>>>> > errors there in infrequent postcommits or an early signal will be >> >>>>> > preferred? >> >>>>> >> >>>>> This is a good example--the type inference tests are sensitive to >> >>>>> version (due to using internal details and relying on the >> >>>>> still-evolving typing module) but also run in ~15 seconds. I think >> >>>>> these should be in precommits. We just don't need to run every test >> >>>>> for every version. >> >>>>> >> >>>>> > On Wed, Feb 26, 2020 at 5:17 PM Kyle Weaver <kcwea...@google.com> >> >>>>> > wrote: >> >>>>> >> >> >>>>> >> Oh, I didn't see Robert's earlier email: >> >>>>> >> >> >>>>> >> > Currently 3.5 downloads sit at 3.7%, or about >> >>>>> >> > 20% of all Python 3 downloads. >> >>>>> >> >> >>>>> >> Where did these numbers come from? >> >>>>> >> >> >>>>> >> On Wed, Feb 26, 2020 at 5:15 PM Kyle Weaver <kcwea...@google.com> >> >>>>> >> wrote: >> >>>>> >>> >> >>>>> >>> > I agree with having low-frequency tests for low-priority >> >>>>> >>> > versions. >> >>>>> >>> > Low-priority versions could be determined according to least >> >>>>> >>> > usage. >> >>>>> >>> >> >>>>> >>> +1. While the difference may not be as great between, say, 3.6 and >> >>>>> >>> 3.7, I think that if we had to choose, it would be more useful to >> >>>>> >>> test the versions folks are actually using the most. 3.5 only has >> >>>>> >>> about a third of the Docker pulls of 3.6 or 3.7 [1]. Does anyone >> >>>>> >>> have other usage statistics we can consult? >> >>>>> >>> >> >>>>> >>> [1] https://hub.docker.com/search?q=apachebeam%2Fpython&type=image >> >>>>> >>> >> >>>>> >>> On Wed, Feb 26, 2020 at 5:00 PM Ruoyun Huang <ruo...@google.com> >> >>>>> >>> wrote: >> >>>>> >>>> >> >>>>> >>>> I feel 4+ versions take too long to run anything. >> >>>>> >>>> >> >>>>> >>>> would vote for lowest + highest, 2 versions. >> >>>>> >>>> >> >>>>> >>>> On Wed, Feb 26, 2020 at 4:52 PM Udi Meiri <eh...@google.com> >> >>>>> >>>> wrote: >> >>>>> >>>>> >> >>>>> >>>>> I agree with having low-frequency tests for low-priority >> >>>>> >>>>> versions. >> >>>>> >>>>> Low-priority versions could be determined according to least >> >>>>> >>>>> usage. >> >>>>> >>>>> >> >>>>> >>>>> >> >>>>> >>>>> >> >>>>> >>>>> On Wed, Feb 26, 2020 at 4:06 PM Robert Bradshaw >> >>>>> >>>>> <rober...@google.com> wrote: >> >>>>> >>>>>> >> >>>>> >>>>>> On Wed, Feb 26, 2020 at 3:29 PM Kenneth Knowles >> >>>>> >>>>>> <k...@apache.org> wrote: >> >>>>> >>>>>> > >> >>>>> >>>>>> > Are these divergent enough that they all need to consume >> >>>>> >>>>>> > testing resources? For example can lower priority versions be >> >>>>> >>>>>> > daily runs or some such? >> >>>>> >>>>>> >> >>>>> >>>>>> For the 3.x series, I think we will get the most signal out of >> >>>>> >>>>>> the >> >>>>> >>>>>> lowest and highest version, and can get by with smoke tests + >> >>>>> >>>>>> infrequent post-commits for the ones between. >> >>>>> >>>>>> >> >>>>> >>>>>> > Kenn >> >>>>> >>>>>> > >> >>>>> >>>>>> > On Wed, Feb 26, 2020 at 3:25 PM Robert Bradshaw >> >>>>> >>>>>> > <rober...@google.com> wrote: >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> +1 to consulting users. Currently 3.5 downloads sit at 3.7%, >> >>>>> >>>>>> >> or about >> >>>>> >>>>>> >> 20% of all Python 3 downloads. >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> I would propose getting in warnings about 3.5 EoL well ahead >> >>>>> >>>>>> >> of time, >> >>>>> >>>>>> >> at the very least as part of the 2.7 warning. >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> Fortunately, supporting multiple 3.x versions is >> >>>>> >>>>>> >> significantly easier >> >>>>> >>>>>> >> than spanning 2.7 and 3.x. I would rather not impose an >> >>>>> >>>>>> >> ordering on >> >>>>> >>>>>> >> dropping 3.5 and adding 3.8 but consider their merits >> >>>>> >>>>>> >> independently. >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> >> >>>>> >>>>>> >> On Wed, Feb 26, 2020 at 3:16 PM Kyle Weaver >> >>>>> >>>>>> >> <kcwea...@google.com> wrote: >> >>>>> >>>>>> >> > >> >>>>> >>>>>> >> > 5 versions is too many IMO. We've had issues with Python >> >>>>> >>>>>> >> > precommit resource usage in the past, and adding another >> >>>>> >>>>>> >> > version would surely exacerbate those issues. And we have >> >>>>> >>>>>> >> > also already had to leave out certain features on 3.5 [1]. >> >>>>> >>>>>> >> > Therefore, I am in favor of dropping 3.5 before adding >> >>>>> >>>>>> >> > 3.8. After dropping Python 2 and adding 3.8, that will >> >>>>> >>>>>> >> > leave us with the latest three minor versions (3.6, 3.7, >> >>>>> >>>>>> >> > 3.8), which I think is closer to the "sweet spot." Though >> >>>>> >>>>>> >> > I would be interested in hearing if there are any users >> >>>>> >>>>>> >> > who would prefer we continue supporting 3.5. >> >>>>> >>>>>> >> > >> >>>>> >>>>>> >> > [1] >> >>>>> >>>>>> >> > https://github.com/apache/beam/blob/8658b95545352e51f35959f38334f3c7df8b48eb/sdks/python/apache_beam/runners/portability/flink_runner.py#L55 >> >>>>> >>>>>> >> > >> >>>>> >>>>>> >> > On Wed, Feb 26, 2020 at 3:00 PM Valentyn Tymofieiev >> >>>>> >>>>>> >> > <valen...@google.com> wrote: >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> I would like to start a discussion about identifying a >> >>>>> >>>>>> >> >> guideline for answering questions like: >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> 1. When will Beam support a new Python version (say, >> >>>>> >>>>>> >> >> Python 3.8)? >> >>>>> >>>>>> >> >> 2. When will Beam drop support for an old Python version >> >>>>> >>>>>> >> >> (say, Python 3.5)? >> >>>>> >>>>>> >> >> 3. How many Python versions should we aim to support >> >>>>> >>>>>> >> >> concurrently (investigate issues, have continuous >> >>>>> >>>>>> >> >> integration tests)? >> >>>>> >>>>>> >> >> 4. What comes first: adding support for a new version >> >>>>> >>>>>> >> >> (3.8) or deprecating older one (3.5)? This may affect the >> >>>>> >>>>>> >> >> max load our test infrastructure needs to sustain. >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> We are already getting requests for supporting Python 3.8 >> >>>>> >>>>>> >> >> and there were some good reasons[1] to drop support for >> >>>>> >>>>>> >> >> Python 3.5 (at least, early versions of 3.5). Answering >> >>>>> >>>>>> >> >> these questions would help set expectations in Beam user >> >>>>> >>>>>> >> >> community, Beam dev community, and may help us establish >> >>>>> >>>>>> >> >> resource requirements for test infrastructure and plan >> >>>>> >>>>>> >> >> efforts. >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> PEP-0602 [2] establishes a yearly release cycle for >> >>>>> >>>>>> >> >> Python versions starting from 3.9. Each release is a >> >>>>> >>>>>> >> >> long-term support release and is supported for 5 years: >> >>>>> >>>>>> >> >> first 1.5 years allow for general bug fix support, >> >>>>> >>>>>> >> >> remaining 3.5 years have security fix support. >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> At every point, there may be up to 5 Python minor >> >>>>> >>>>>> >> >> versions that did not yet reach EOL, see "Release overlap >> >>>>> >>>>>> >> >> with 12 month diagram" [3]. We can try to support all of >> >>>>> >>>>>> >> >> them, but that may come at a cost of velocity: we will >> >>>>> >>>>>> >> >> have more tests to maintain, and we will have to develop >> >>>>> >>>>>> >> >> Beam against a lower version for a longer period. >> >>>>> >>>>>> >> >> Supporting less versions will have implications for user >> >>>>> >>>>>> >> >> experience. It also may be difficult to ensure support of >> >>>>> >>>>>> >> >> the most recent version early, since our dependencies >> >>>>> >>>>>> >> >> (e.g. picklers) may not be supporting them yet. >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> Currently we support 4 Python versions (2.7, 3.5, 3.6, >> >>>>> >>>>>> >> >> 3.7). >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> Is 4 versions a sweet spot? Too much? Too little? What do >> >>>>> >>>>>> >> >> you think? >> >>>>> >>>>>> >> >> >> >>>>> >>>>>> >> >> [1] >> >>>>> >>>>>> >> >> https://github.com/apache/beam/pull/10821#issuecomment-590167711 >> >>>>> >>>>>> >> >> [2] https://www.python.org/dev/peps/pep-0602/ >> >>>>> >>>>>> >> >> [3] https://www.python.org/dev/peps/pep-0602/#id17