On Sat, 2007-12-08 at 14:02 +0200, Timo Sirainen wrote:
You mention some problems like unique ID's. This is actually pretty simple - just use some GUID type process. All you need is something guaranteed unique on each server, combinations of time, something unique per server and some randomness get you there. Discount anything which is some kind of counter because it will break eventually.
It will have global UIDs which it uses internally. I hadn't thought much yet how those would be generated, but they're not the problem. The problem is IMAP protocol where it's not possible to use them. IMAP requires using a growing 32bit integer as the UID. There's no way around that, so IMAP UID conflicts can happen and they have to be handled somehow.
The IMAP UID conflicts are detected by a message having the same IMAP UID but different global UIDs. So the replication then just needs to make a new global UID -> IMAP UID mapping for both of the messages to fix the problem.
Although if you just want to keep the servers synchronized and use completely different clients for them, then there's no need to keep IMAP UIDs synchronized.
I was thinking more about a setup where a client could connect to any of the replicated servers. If you just need to have for example Dovecot on a laptop where the mail client on laptop always connects only to the laptop Dovecot, there's no problem with IMAP UID conflicts.