[Dovecot] Save/restore IMAP session state

Timo Sirainen
Mon, 29 Oct 2012 16:53:00 -0000

Some future Dovecot version will have "imap-idle" processes where
IDLEing IMAP connections get moved, so the system wouldn't waste so much
memory for all the IDLEing imap processes. A week ago I thought I'd see
how easy it would be to implement this. I got a basic proof of concept
working as a "X-STATE" command.

Save the state:

a x-state
* STATE AQDLW45QdwAAAAMAAABuAQAAAAAAAFAcffYAPHnpFctbjlDbYQAAcEmzCwAA
a OK State exported.

Restore the state:

b x-state AQDLW45QdwAAAAMAAABuAQAAAAAAAFAcffYAPHnpFctbjlDbYQAAcEmzCwAA
b OK State imported.

This could also be used to implement quick session state restoring for
webmails (as suggested by Michael Slusarz).

For getting the imap-idle process there would have to be code that:
 * triggers the session saving when process is IDLEing
 * figures out what filesystem paths the imap-idle should be looking at
(i.e. paths to selected mailbox's dovecot.index.log file and maybe for
e.g. maildir new/)
 * send the session state string, paths and imap connection fd to
imap-idle process via UNIX socket
 * implement the actual imap-idle process
 * implement a way for imap-idle process to send back the state and
connection fd to restore the imap process

The patch is ugly and still missing many things. Anyway I thought I'd
include it here just in case someone was really eager to continue
implementing it. :) I'm not sure when I'll have time for it.

A full patch would probably have to have some
session_save()/session_restore() functions in lib-storage API. But a
quick and dirty way is possible to implement for v2.1 as well, as long
as some IMAP extensions aren't used (most importantly rfc5267).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: imap-state.diff
Type: text/x-patch
Size: 11305 bytes
Desc: not available
URL:
<http://dovecot.org/pipermail/dovecot/attachments/20121029/c4e6f599/attachment-0004.bin>