dsync: assert panic on mbox // no INBOX sync on hybrid mbox/maildir

David Gardner somloieater at gmail.com
Tue Sep 26 22:39:24 EEST 2017


Hi,
 This (hopefully!) might be a case of user error, as I'm new to
dovecot... Alternatively it might be some confusion in an index, since
I've been mucking about trying different things in my configuration
files and had frequent crashes.

I'm trying to sync 2 (LAN) hosts, ideally to have full automatic
replication happening.

They both have hybrid mbox INBOX and maildir++ folders, using
namespaces, as suggested in the wiki. I might have deviated the config
from the wiki version, in trying to get things working.

Both hosts communicate perfectly with an external IMAP client (thunderbird).
Replication is working, but only partially - it is syncing the folders
but not INBOX. I've thus been trying various things to try to get the
INBOX to sync.

The crash is only happening one of the 2 hosts which I've named
crashhost for this report. The process crashes no matter which host
starts the sync.
With a second user, the crash happens on the other host

crashhost: Ubuntu 16.04, x86_64, laptop,  Dovecot 2.2.22, and Dovecot
2.2.32 (from debian sid package, locally compiled)
otherhost: Ubuntu 16.04, x86_64, desktop,  Dovecot 2.2.22, and Dovecot
2.2.32 (from debian sid package, locally compiled)


RESULTS:

1) doveadm sync -f -u david tcp:otherhost
synchronises the folders, but does not touch INBOXes.

2) doveadm sync -f -m INBOX -u david tcp:otherhost
Does not touch INBOXes

3) doveadm sync -n '#mbox/'  -f -u david tcp:otherhost
dsync-local(david): Panic: file mbox-lock.c: line 800 (mbox_lock):
assertion failed: (lock_type == F_RDLCK || mbox->mbox_lock_type !=
F_RDLCK)

I added some debug code, the assertion failure is being triggered by a
call to mbox-lock() with:
locktype=F_WRCLK  mbox->mbox_lock_type=F_RDLCK,  mbox->external_transactions=1

The config files on the 2 hosts only differ by the hostnames they're
supposed to be syncing to.

$ dovecot -n
# 2.2.32 (dfbe293d4): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.20 (7cd71ba)
# OS: Linux 4.10.0-35-generic x86_64 Ubuntu 16.04.3 LTS
doveadm_password =  # hidden, use -P to show it
doveadm_port = 12346
imapc_host = crashhost
imapc_password =  # hidden, use -P to show it
imapc_port = 993
imapc_ssl = imaps
imapc_ssl_verify = no
imapc_user = %u
mail_location = maildir:~/mail
mail_plugins = " notify replication"
mail_privileged_group = mail
namespace {
  inbox = no
  list = yes
  location =
  prefix =
  separator = /
  subscriptions = yes
}
namespace inbox {
  hidden = yes
  inbox = yes
  list = no
  location = mbox:~/nomail:INBOX=/var/mail/%u:INDEX=/var/spool/mailindex/%u
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = "#mbox/"
  separator = /
  type = private
}
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
plugin {
  mail_replica = tcp:otherhost:12346
}
protocols = " imap"
service aggregator {
  fifo_listener replication-notify-fifo {
    mode = 0666
    user = vmail
  }
  unix_listener replication-notify {
    mode = 0666
    user = vmail
  }
}
service config {
  unix_listener config {
    user = vmail
  }
}
service doveadm {
  inet_listener {
    port = 12346
  }
  user = root
}
service replicator {
  process_min_avail = 1
  unix_listener replicator-doveadm {
    mode = 0666
  }
}
ssl = required
ssl_cert = </etc/dovecot/dovecot.pem
ssl_client_ca_dir = /etc/ssl
ssl_key =  # hidden, use -P to show it
userdb {
  args = username_format=%u /etc/dovecot/users
  driver = passwd-file
}

gdb) bt
#0  0x00007f37f426e428 in __GI_raise (sig=sig at entry=6) at
../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007f37f427002a in __GI_abort () at abort.c:89
#2  0x00007f37f469f7aa in ?? () from /usr/lib/dovecot/libdovecot.so.0
#3  0x00007f37f469f829 in default_fatal_handler () from
/usr/lib/dovecot/libdovecot.so.0
#4  0x00007f37f46302a1 in i_panic () from /usr/lib/dovecot/libdovecot.so.0
#5  0x00007f37f49ac235 in mbox_lock () from
/usr/lib/dovecot/libdovecot-storage.so.0
#6  0x00007f37f49adb11 in mbox_save_begin () from
/usr/lib/dovecot/libdovecot-storage.so.0
#7  0x00007f37f49769a1 in mailbox_save_begin () from
/usr/lib/dovecot/libdovecot-storage.so.0
#8  0x00007f37f496a2e8 in mail_storage_copy () from
/usr/lib/dovecot/libdovecot-storage.so.0
#9  0x00007f37f3e332a5 in ?? () from
/usr/lib/dovecot/modules/lib15_notify_plugin.so
#10 0x00007f37f4976b73 in ?? () from /usr/lib/dovecot/libdovecot-storage.so.0
#11 0x00007f37f4976d89 in mailbox_move () from
/usr/lib/dovecot/libdovecot-storage.so.0
#12 0x000055b45f0da448 in ?? ()
#13 0x000055b45f0db35a in ?? ()
#14 0x000055b45f0ddbc0 in dsync_mailbox_import_changes_finish ()
#15 0x000055b45f0d8645 in dsync_brain_sync_mails ()
#16 0x000055b45f0d3df8 in dsync_brain_run ()
#17 0x000055b45f0d4140 in ?? ()
#18 0x000055b45f0ea3ff in ?? ()
#19 0x00007f37f46b4c82 in io_loop_call_io () from
/usr/lib/dovecot/libdovecot.so.0
#20 0x00007f37f46b6309 in io_loop_handler_run_internal () from
/usr/lib/dovecot/libdovecot.so.0
#21 0x00007f37f46b4d1c in io_loop_handler_run () from
/usr/lib/dovecot/libdovecot.so.0
#22 0x00007f37f46b4ec8 in io_loop_run () from /usr/lib/dovecot/libdovecot.so.0
#23 0x000055b45f0bb4c2 in ?? ()
#24 0x000055b45f0bd91c in ?? ()
#25 0x000055b45f0be5aa in ?? ()
#26 0x000055b45f0beeda in doveadm_mail_try_run ()
#27 0x000055b45f0ae47c in main ()


More information about the dovecot mailing list