Periodic update strategy

The agent supports a periodic strategy, which allows gating reboots based on “reboot windows”, defined on weekly basis.

This strategy is a port of locksmith reboot windows, with a few differences:

  • multiple disjoint reboot windows are supported
  • multiple configuration entries are assembled into a single weekly calendar
  • weekdays need to be specified, in either long or abbreviated form
  • length duration is always specified in minutes

Timing and configuration

Window granularity is at the “minutes” level. For this reason, the configuration parameter length_minutes is a plain non-zero integer (instead of a free-form duration string).

In order to ease the case where the same time-window has to be applied on multiple specific days, the days parameter accepts a set of weekdays (instead of a single day).

The start of a reboot window is a single point in time, specified in 24h format with minutes granularity (e.g. 22:30) via the start_time parameter.

By default, all times and dates are UTC-based. UTC times must be used to avoid:

  • shortening or skipping reboot windows due to Daylight Saving Time time-change
  • lengthening reboot windows due to Daylight Saving Time time-change
  • mixups due to short-notice law changes in time-zone definitions
  • errors due to stale tzdata entries
  • human confusion on machines with different local-timezone configurations

Overall, the use of the default UTC times guarantee that the total weekly length for reboot windows is respected, regardless of local time zone laws.

As a side-effect, this also helps when cross-checking configurations across multiple machines located in different places.

Nevertheless, user-specified non-UTC time zones can still be configured, but with caveats.

Implementation details

Configuration fragments are merged into a single weekly calendar.

In order to avoid too many unwieldy datetime operations to be performed in “modulo 7 days”, all times are converted to “minutes since beginning of week”. This means that all datetimes are mapped to the range that goes from 0 (00:00 on Monday morning) to MAX_WEEKLY_MINS (23:59 on Sunday night). A reboot window which is specified across week boundary (e.g. starting on Sunday and ending on Monday) gets split into two sub-windows in order to respect the range above.

Reboot windows are internally stored within an Augmented Interval Tree data-structure.