Dsync deleting mailboxes due to duplicate UIDs
Sami Ketola
sami.ketola at dovecot.fi
Sun Sep 9 23:08:09 EEST 2018
> On 9 Sep 2018, at 18.42, Andreas Thienemann <andreas at bawue.net> wrote:
>
> Hi,
>
> I am attempting to migrate a mailspool from a cyrus server to a dovecot server using the dsync backup approach as described in the wiki at <https://wiki.dovecot.org/Migration/Dsync>.
>
> The first attempt works great. Everything copies over and a quick glance over the spool looks good.
>
> Running doveadm backup again though results in the following error:
>
> dsync(eggs): Warning: Deleting mailbox 'INBOX.MailRestore': UID=39 already exists locally for a different mail: Headers hashes don't match (18d567fc7e258a67e47b629c8bb16500 vs 230354b2d5cad21ebbb4a7440b977adb)
>
> As promised, the folder MailRestore is gone after dsync finishes.
>
> Running doveadm backup again for the third time copies the folder again.
>
> Running it a fourth time gives the same error and the folder is gone.
>
> Trying to figure this out I initially had a few mails where the header hashes were 68b329da9893e34099c7d8ad5cb9c940, the md5sum of an empty string.
> Turns out that the source mailspool had a few broken emails and cleaning these out fixed most my issues.
>
> But in this case, I am stumped. UID 39 on the server is a valid mail with correct headers and everything.
>
> Is there a good way of identifying the two mails that seem to clash? I had a quick look at the dovecot code but did not see how the header_stream gets hashed into the hdr_hash used for comparing mails.
Is it possible to get imapc rawlogs to analyze? create a directory that is writeable and add -o imapc_rawlog_dir=/path/to/directory to command line.
Also with recent dovecot release you can tell dsync which header fields to hash when matching mails. Add dsync_hashed_headers=Message-ID to config and dovecot will only mach mails using Message-ID header fileld.
dsync_hashed_headers setting is supported since dovecot 2.2.33.
Sami
More information about the dovecot
mailing list