On Thu, 4 Oct 2007, Bron Gondwana wrote:

a) MUST never lose a message that's been accepted for
  delivery except in the case of total drive failure.

b) MUST have a standard way to integrity check and
  repair a replica-pair after a system crash.

A replica system is automatically repaired to match its master, but this doesn't help with the split brain scenarios that you are worried about.

I've never faced a spilt brain situation which involved more than two or three messages (the outstanding log on an old master system). I suspect that this is simply because I've never had to run an unreliable replication engine which bails out on my production systems.

c) MUST have a clean process to "soft-failover" to the
  replica machine, making sure that all replication
  events from the ex-master have been synchronised.

Something more than sync_shutdown_file plus automatic retries on
recent work files?

d) MUST have replication start/restart automatically when
  the replica is available rather than requiring it be
  online at master start time.

Work in progress from Ken.

e) SHOULD be able to copy back messages which only exist
  on the replica due to a hard-failover, handling UIDs
  gracefully (more on this later),

This is the hard one. I think that assigning a new UIDvalidity and new UIDs for all the messages would be best as messages can then be sorted in the replacement mailbox based on their arrival time. Actually this would look remarkably like the new sync_combine_commit() on the replica side.

What I don't know is how we then synchronise back to the master. Up to now the replication engine has been very careful about _not_ making changes on the master, so that it only has the potential to mess up the spare system.

  alternatively as least
  MUST (to satisfy point 'a') notify the administrator
  that the message has different GUIDs on the two copies
  and something will need to be done about it (to satisfy
  point 'd' this must be done without bailing out
  replication for the remaining messages in the folder)

At the moment we replace messages (on the "master knows best" principle).

It would be easy enough to leave message in place and generate warnings instead, although this would generate a lot of warnings, one for every bad message every time that a given mailbox is updated.

f) SHOULD keep replicating in the face of an error which
  affects a single mailbox, keeping track of that mailbox
  so that a sysadmin can fix the issue and then replicate
  that mailbox hand.

You could try disabling the MAILBOX -> USER promotion to see what happens: the 3 x MAILBOXES retry will fix most transient problems caused by mailboxes moving around, leaving just the permanent errors.

The MAILBOX -> USER promotion was originally there on the principle that a mailbox disappearing under our feet was likely to appear somewhere else in the same account (without shared mailboxes to worry about).

My nightmare scenario is a replication engine which carries on running in the face of mboxlist corruption on the master: you could lose a lot of mailboxes on the replica that way.

g) MAY have a method to replicate to two different replicas
  concurrently (replay the same sync_log messages twice)
  allowing one replica to be taken out of service and
  a new one created while having no "gaps" in which there
  is no second copy alive (we use rsync, rsync again,
  stop replication, rsync a third time, start replication
  to the new site - but it's messy and gappy)

It would be easy enough to generate multiple replication log files.

MySQL keeps a single transaction log for multiple replicas, but that file contains quite a lot of information about each transaction. In contrast the Cyrus sync log is just a list of objects we need to pay attention to: the files have much less state, particularly without duplicates.

--
David Carter                             Email: [EMAIL PROTECTED]
University Computing Service,            Phone: (01223) 334502
New Museums Site, Pembroke Street,       Fax:   (01223) 334679
Cambridge UK. CB2 3QH.

Reply via email to