[
https://issues.apache.org/jira/browse/AIRFLOW-3422?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16704462#comment-16704462
]
Till Heistermann commented on AIRFLOW-3422:
-------------------------------------------
The problem exists on "US/Eastern" and "Europe/Berlin" as well. So it likely
affects many / all timezones with DST.
Pendulum version is 1.4.4 (outdated, but pinned by airflow like this), pytz is
at 2018.7
Interestingly, the pendulum docs advise against using the timezone library in
python < 3.6
[https://pendulum.eustace.io/docs/#using-the-timezone-library-directly] due to
workarounds they had to implement for earlier python versions. So I fear we are
relying on non-documented behavior for the airflow code to work on 3.5 in the
first places. We should definitely add testing for airflow 3.6 to the travis
pipeline as well so this won't pop up again c.f. AIRFLOW-2973
> Infinite loops during springtime DST transitions on python 3.6
> --------------------------------------------------------------
>
> Key: AIRFLOW-3422
> URL: https://issues.apache.org/jira/browse/AIRFLOW-3422
> Project: Apache Airflow
> Issue Type: Bug
> Components: scheduler
> Affects Versions: 1.10.1
> Reporter: Till Heistermann
> Priority: Major
>
> Automatic DST transitions can cause dags to be stuck in an infinite loop, if
> they happen to be scheduled in the "skipped" hour during a springtime DST
> transition.
> The fix introduced in https://issues.apache.org/jira/browse/AIRFLOW-3277 does
> not seem to work for python 3.6, only for 3.5 and 2.7.
> Example to reproduce (current master, python 3.6):
> {code:java}
> import pendulum
> from datetime import datetime
> from airflow.utils.timezone import make_aware
> from airflow.models import DAG
> nsw = pendulum.Timezone.load("Australia/Sydney")
> dt = make_aware(datetime(2018, 10, 3, 2, 30), nsw)
> dag = DAG("id", schedule_interval="30 2 * * *", start_date=dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> dt = dag.following_schedule(dt); print(dt)
> {code}
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)