[Dovecot] Replication and public namespaces

Markus Weippert markus at gekmihesg.de
Mon Jan 13 13:48:25 EET 2014


Hi,

I'm having some issues with replicating public namespaces. Everything
seems to work fine for private namespaces, but while importing some huge
mailboxes (many small mails) into a public namespace via imapsync,
something goes wrong.

The expected mail flow is:
old-server (imapsync)> new-server1 (replication)> new-server2

But then, dovecot seems to run into race conditions when the
replications process tries to sync the same public mailbox under two or
more different users at the same time. As a result, messages get
duplicated, new-server2 sends those back to new-server1 which then
starts to produce duplicates too. If I don't kill the processes in time
and delete the faulty mailbox, they start to produce thousands of mails.
In fact, server2 should not export messages at all, since it's not
productive yet and does not get any mail except from the replication.

The only thing getting logged (only few compared to the huge amount of
duplicates produced):
"dsync-server(user at example.com): Warning: Maildir /...: Expunged message
reappeared, giving a new UID"

Is there any way to fix this?

Regards,
Markus




doveadm_password = ***********
doveadm_port = *****
mail_home = /var/vmail/private/%d/%n
mail_location = maildir:~/mail
mail_plugins = acl virtual listescape notify replication
namespace inbox {
  inbox = yes
  location =
  prefix =
  separator = /
  type = private
}
namespace legacy {
  alias_for =
  # ...
}
namespace ns_public {
  list = children
  location = maildir:/var/vmail/public/%d
  prefix = Public/
  separator = /
  subscriptions = no
  type = public
}
namespace virtual {
  # ...
}
plugin {
  mail_replica = tcps:**************
}
protocols = imap lmtp sieve
replication_dsync_parameters = -d -l 60 -N -x virtual -x ns_public -U
replication_full_sync_interval = 4 hours
replication_max_conns = 20
service aggregator {
  fifo_listener replication-notify-fifo {
    user = vmail
  }
  unix_listener replication-notify {
    user = vmail
  }
}
service doveadm {
  inet_listener {
    port = 8143
    ssl = yes
  }
  process_min_avail = 5
  user = vmail
  vsz_limit = 4 G
}
service replicator {
  process_min_avail = 1
  unix_listener replicator-doveadm {
    mode = 0600
    user = vmail
  }
}


More information about the dovecot mailing list