On Tue, 29 Apr 2008, Timo Sirainen wrote:
I'll probably be implementing multi-master replication this summer. My previous thoughts about it are here: http://dovecot.org/list/dovecot/2007-December/027284.html
Below is a description of how the replication protocol will probably work. It should work just as well for master-slave and multi-master setups. Comments welcome. I'll write later a separate mail about how it'll be implemented to Dovecot.
(I'm CC:ing tv since he and I once chatted about IMAP replication.)
Multi-master will be very interesting. I'm really curious what you will do as far as this scenario:
- A mail arrives in server1
- User reads it (therefore the mail has a UID assigned)
- server2 gets isolated from server1
- A mail arrives at server2
- User logs in to server2 and reads it (therefore the mail has a UID assigned)
- server2 and server1 are connected again, and are told to sync
Questions:
a. Does the client get told two different messages have the same UID in the folder?
b. What is the graceful sync proposal?
Oh, look - you mention that right at the end of your protocol:
A special case is when two servers have been saving messages independently from each others. In this case it's possible that the servers have used the same UIDs for different messages (different global UIDs). These need to be resolved by giving both conflicting UIDs new unused UIDs, otherwise IMAP clients may show them as wrong messages from their caches.
FIXME: If the other server had expunged a conflicting UID it still should be given a new UID. How do we find out this has happened?
I guess this doesn't address my Question (a), though.
The above scenario may be handled by your root-based election process - but what prevents two roots from simultaneously existing, and therefore two masters existing, and then the above scenario happening?
I'm really interested to see where this goes - I think this would be really swell as a replacement for my use of offlineimap. I also want to have you consider letting non-root users use Dovecot replication features; that way, I could just have a cron job that asks my laptop's Dovecot to replicate from my server's Dovecot, without giving it any special permissions.
Thanks for all the great work Dovecot represents!
-- Asheesh.
-- I joined scientology at a garage sale!!