Time moved backwards error
==========================

Dovecot isn't very forgiving if your system's time moves backwards. There are
usually two possibilities why it's moving backwards:

 1. You're running ntpdate periodically. This isn't a good idea.
 2. You're using some kind of a virtual server and you haven't configured it
    right (or it's buggy).

Moving time backwards might cause various problems (see below), so for now
Dovecot doesn't even try to handle the situation. Perhaps in some future
version.

Time synchronization
--------------------

There are two choices for synchronizing your clock:

 1. Use http://www.ntp.org/ntpd. It periodically checks the current time from
    NTP server and slows down or speeds up the clock if necessary. Unlike
    ntpdate, it doesn't just move the time forwards or backwards (unless the
    difference is large).
 2. If the time difference is too large for ntpd and it "steps", then use "-x"
    as a command line option for ntpd or use "tinker step 0" in /etc/ntp.conf.
 3. If ntpd doesn't work well (e.g. a bad network connection), you can use
    clockspeed [http://cr.yp.to/clockspeed.html] as well.

If all else fails, you can just go and remove the error checking code from
'src/lib/ioloop.c'. It's unlikely that anything will break badly, but you might
get some errors logged once in a while.

In some systems ntpd/ntpdate is run at boot, but only after Dovecot has
started. That can cause Dovecot to die immediately. If you have this problem,
fix your init scripts to run ntpd/ntpdate first, before starting Dovecot.  And
again, strongly consider running ntp-wait before starting Dovecot.

Bugs/Issues
-----------

 * With Xen you should run ntpd only in dom0. Other domains should synchronize
   time automatically (see this Xen FAQ [http://xen.epiuse.com/xen-faq.txt]).
 * Time moved backwards by 4398 seconds
   [http://www.dovecot.org/list/dovecot/2008-June/031548.html]? Buggy
   kernel/hardware.

What about Daylight Saving/Summer time?
---------------------------------------

On Unix-like systems, time is stored internally as the number of seconds since
January 1, 1970, 00:00:00 UTC (see Unix_time [WikiPedia:Unix_time] on
Wikipedia); concepts such as time zones and daylight saving time are applied in
user space by the C library, and will normally not have an impact on Dovecot's
behavior.

Why not just..?
---------------

It's not as simple as fixing timeout handling to work correctly. Even a full
Dovecot restart doesn't necessarily help, because some files' timestamps can be
in future. To make Dovecot correctly handle time moving backwards would require
verifying every single timestamp comparison code to make sure that it behaves
correctly with future timestamps or with the current timestamp suddenly
shrinking instead of growing. Perhaps all this will be made to work with future
Dovecot releases, but why bother when you can just fix the real problem, which
might fix some other random software failures as well?

(This file was created from the wiki on 2009-03-02 04:42)
