Skip to content

Daylight savings bug causes scheduler to terminate when time is set backwardsΒ #407

@adz

Description

@adz

We found our jobs not running, and it turned out our Quantum based scheduler had terminated.

Our jobs are configured with timezone: "Australia/Adelaide", and Adelaide had daylight savings move the clock backwards one hour yesterday, resulting in ambiguous time:

<Ambiguous(#DateTime<2019-04-07 02:00:06.340067+10:30 ACDT Australia/Adelaide> ~ #DateTime<2019-04-07 01:00:06.340067+09:30 ACST Australia/Adelaide>)

Note this is different from #321 where a time does not exist due to moving forward!

This fails to convert to UTC resulting in an error and eventual termination:

** (FunctionClauseError) no function clause matching in DateTime.to_naive/1
    (elixir) lib/calendar/datetime.ex:301: DateTime.to_naive(#<Ambiguous(#DateTime<2019-04-07 02:00:06.340067+10:30 ACDT Australia/Adelaide> ~ #DateTime<2019-04-07 01:00:06.340067+09:30 ACST Australia/Adelaide>)>)
    (quantum) lib/quantum/execution_broadcaster.ex:313: Quantum.ExecutionBroadcaster.get_next_execution_time/2
    (quantum) lib/quantum/execution_broadcaster.ex:284: Quantum.ExecutionBroadcaster.add_job_to_state/2
    (elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
    (quantum) lib/quantum/execution_broadcaster.ex:132: Quantum.ExecutionBroadcaster.handle_events/3
    (gen_stage) lib/gen_stage.ex:2329: GenStage.consumer_dispatch/6
    (gen_stage) lib/gen_stage.ex:2502: GenStage.take_pc_events/3
    (stdlib) gen_server.erl:637: :gen_server.try_dispatch/4
    (stdlib) gen_server.erl:711: :gen_server.handle_msg/6
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3

I reproduced this by setting my system clock to 1:59am 7th April 2019 and running our app with jobs that start in less than an hour.

We're going to use UTC in our scheduler to work around.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions