On Tue, 2008-04-29 at 16:28 +0100, Ed W wrote:
I think they imapsync style protocol is the most powerful starting point for master/master sync. However, that style of sync can be made more efficient by using the LEMONADE features you previously added, in particular by offering a limited log file of recent actions in a folder we can avoid a full sync and apply only the recent changes to a given folder (fallback to full sync and compare if folders fall out of sync)
The updated design #2 should address this. The mailbox synchronization step works pretty much the same as QRESYNC.
The other advantage of the imapsync style protocol is that it's much simpler to support partial replication, eg replicate only certain folders over certain date ranges (or only parts of certain messages, eg excluding large attachments)
This isn't really there yet.. QRESYNC supports replicating only a specific UID range and that would be easy to add to my replication protocol as well if needed. Excluding large attachments then.. Well, two possibilities:
a) Add a FETCH-SMALL command that drops large attachements and somehow remembers this so that they could later be downloaded again when there's more bandwidth or user requests it.
b) Use IMAP protocol for the synchronization and let the client figure out itself what/when/how it wants to fetch.
Using IMAP protocol for replication has at least two disadvantages:
It's a bit too chatty, wasting bandwidth on replies the replication isn't interested in.
Sending updated flag/keyword changes can't be done in a standard way, because it only shows the last flag+keyword state, not the changes that were done (e.g. "\Seen" vs. "+\Seen -\Flagged").