This series changes CalendarEvent::compute_next_event to not translatee back and forth between time stamps and calendar time at each iteration, as this can cause endless loops (see patch 1 for an example trigger code and patch 3 for test cases).
The problem here lies in the fact that when converting a timestamp to calendar time there are calendar times which exist twice, and when converting them back to a time stamp there are two possible results, of which we of course only get 1 back. This can result in a case where we're trying to schedule an event to happen "in an hour" - which is a change, causing our loop to re-iterate from the beginning, starting with converting the new time stamp back and forth, bringing it back to its original value (because the time exists twice). After that we repeat the "in an hour" step, and, having changed the value again, we re-iterate from the top. And so it continues. So we now stay in calendar time (and have to take care to wrap around minutes/hours/days/... when incrementing components). This on the other hand can result in a schedule for fixed times (eg. 2am in the morning) to happen twice if the server is using local time. If this is a problem, time specs can now optionally take a 'UTC' flag at the end to cause everything to happen in UTC. Wolfgang Bumiller (3): fix #1963: don't do day-time related math on time stamps CalendarEvent: add 'utc' flag to calendar specs tests: update to utc flag and add daylight savings test src/PVE/CalendarEvent.pm | 182 +++++++++++++++++++++++++++++--------------- test/calendar_event_test.pl | 35 ++++++++- 2 files changed, 152 insertions(+), 65 deletions(-) -- 2.11.0 _______________________________________________ pve-devel mailing list [email protected] https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
