Imap process crashes when search in virtual mailbox

mihaiush mihaiush at gmail.com
Tue Jun 16 12:17:02 UTC 2015


Hi,

When searching in a virtual mailbox imap process crashes if the virtual
mailbox has a lot of physical mailboxes behind (more than 80 - 100
mailboxes).

Dovecot 2.2.18 build from sources ./configure --prefix=/opt/dovecot2
--with-mysql --with-sqlite --with-solr --with-ssl --disable-rpath
--disable-static.
Debian Wheezy 3.2.63-2 x86_64.
Filesystem is ZFS.

docecot -n :
# 2.2.18: /services/dovecot1/etc/dovecot.conf
# OS: Linux 3.2.0-4-amd64 x86_64 Debian 7.7
auth_master_user_separator = *
auth_mechanisms = plain login
base_dir = /services/dovecot1/var/run
default_client_limit = 10240
default_login_user = dovecot
dict {
  quotadict = mysql:/services/dovecot1/etc/quota.conf
}
disable_plaintext_auth = no
log_path =
login_log_format_elements = user=%u session=%{session} mpid=%e rip=%r
rrip=%{real_rip}
mail_location = mdbox:~/mails
mail_log_prefix = "store107: %s(%u): %{session}: "
mail_max_userip_connections = 0
mail_plugins = quota virtual fts fts_solr notify mail_log
mailbox_list_index = yes
mdbox_rotate_size = 256 k
mmap_disable = yes
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  prefix =
  separator = /
}
namespace virtual {
  hidden = yes
  list = no
  location = virtual:/services/dovecot1/etc/virtual:INDEX=~/mails/virtual
  mailbox all {
    auto = create
    special_use = \All
  }
  mailbox unseen {
    auto = create
  }
  prefix = virtual/
  separator = /
}
passdb {
  args = /services/dovecot1/etc/passwd.masterusers
  driver = passwd-file
  master = yes
  pass = yes
}
passdb {
  args = /services/dovecot1/etc/mysql.conf
  driver = sql
}
plugin {
  fts = solr
  fts_solr = break-imap-search url=http://10.78.18.127:8080/solr/
  mail_log_events = delete undelete expunge copy mailbox_delete
mailbox_rename flag_change save mailbox_create
  mail_log_fields = uid box msgid flags
  quota = dict:user::proxy::quotadict
  quota_rule = *:storage=1GB
  quota_rule2 = Trash:storage=+152M
  quota_rule3 = Trash:messages=+5
}
protocols = imap
service auth {
  unix_listener auth-client {
    mode = 0666
  }
  unix_listener auth-master {
    group = nogroup
    mode = 0660
  }
}
service dict {
  process_limit = 400
  unix_listener dict {
    mode = 0600
    user = nobody
  }
}
service imap-login {
  chroot = login
  client_limit = 2048
  inet_listener imap {
    address = 10.78.18.127
    port = 143
  }
  process_limit = 1024
  service_count = 0
}
service imap {
  process_limit = 10240
  vsz_limit = 320 M
}
service indexer-worker {
  process_limit = 4
  process_min_avail = 2
  service_count = 1
  vsz_limit = 1 G
}
shutdown_clients = no
ssl = no
syslog_facility = local3
userdb {
  args = /services/dovecot1/etc/mysql.conf
  driver = sql
}
protocol imap {
  mail_plugins = quota virtual fts fts_solr notify mail_log imap_quota
}
protocol lda {
  auth_socket_path = /services/dovecot1/var/run/auth-master
  mail_plugins = quota virtual fts fts_solr notify mail_log sieve
event_broker
  submission_host = osmtp:8090
}

/services/dovecot1/etc/virtual/all/dovecot-virtual :
*
-Trash
-Junk
  all

Error log:
2015-06-16T12:49:25.502864+02:00 sr-be-store07 dovecot: store107: imap(
mihaiush at sunrise.ch): hCdxU6AY/wAKThJr: Panic: file mail-index-map.c: line
547 (mail_index_map_lookup_seq_range): assertion failed: (first_uid > 0)
2015-06-16T12:49:25.503429+02:00 sr-be-store07 dovecot: store107: imap(
mihaiush at sunrise.ch): hCdxU6AY/wAKThJr: Error: Raw backtrace:
/opt/dovecot2/lib/dovecot/libdovecot.so.0(+0x7c13f) [0x7fe2e433713f] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(+0x7c19e) [0x7fe2e433719e] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(i_fatal+0) [0x7fe2e42e5555] ->
/opt/dovecot2/lib/dovecot/libdovecot-storage.so.0(+0xc4d32)
[0x7fe2e466fd32] ->
/opt/dovecot2/lib/dovecot/libdovecot-storage.so.0(mail_index_lookup_seq_range+0xa)
[0x7fe2e46817fa] -> /opt/dovecot2/lib/dovecot/lib20_fts_plugin.so(+0xd0b1)
[0x7fe2e30c40b1] -> /opt/dovecot2/lib/dovecot/lib20_fts_plugin.so(+0xd963)
[0x7fe2e30c4963] ->
/opt/dovecot2/lib/dovecot/lib20_fts_plugin.so(fts_search_lookup+0xa6)
[0x7fe2e30c4c36] -> /opt/dovecot2/lib/dovecot/lib20_fts_plugin.so(+0xfdef)
[0x7fe2e30c6def] -> dovecot/imap(imap_search_start+0x70) [0x41dec0] ->
dovecot/imap(cmd_sort+0x205) [0x414565] -> dovecot/imap(command_exec+0x4c)
[0x418aec] -> dovecot/imap() [0x417ad0] -> dovecot/imap() [0x417b64] ->
dovecot/imap(client_handle_input+0x115) [0x417e45] ->
dovecot/imap(client_input+0x72) [0x418212] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(io_loop_call_io+0x5b)
[0x7fe2e43494fb] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(io_loop_handler_run_internal+0xbb)
[0x7fe2e434a54b] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(io_loop_handler_run+0x9)
[0x7fe2e4349589] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(io_loop_run+0x38)
[0x7fe2e4349608] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(master_service_run+0x13)
[0x7fe2e42eabc3] -> dovecot/imap(main+0x27b) [0x40c60b] ->
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd) [0x7fe2e3f4eead] ->
dovecot/imap() [0x40c769]
2015-06-16T12:49:25.552150+02:00 sr-be-store07 dovecot: store107: imap(
mihaiush at sunrise.ch): hCdxU6AY/wAKThJr: Fatal: master: service(imap): child
3923 killed with signal 6 (core dumped)

IMAP session:
# telnet store107 143
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE
AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
x login mihaiush at sunrise.ch XXX
x OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE
SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT
MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS
LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN
CONTEXT=SEARCH LIST-STATUS BINARY MOVE SEARCH=FUZZY NOTIFY SPECIAL-USE
QUOTA] Logged in
x select virtual/all
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft $Label3 $Label2 $Label5
$Label1 $Label4 parsed attachment)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft $Label3
$Label2 $Label5 $Label1 $Label4 parsed attachment \*)] Flags permitted.
* 1963 EXISTS
* 1256 RECENT
* OK [UNSEEN 2] First unseen.
* OK [UIDVALIDITY 1434024437] UIDs valid
* OK [UIDNEXT 2677] Predicted next UID
* OK [HIGHESTMODSEQ 76] Highest
x OK [READ-WRITE] Select completed (0.087 secs).
x sort (reverse arrival) utf-8 text vpopmail
Connection closed by foreign host.

GDB:
# gdb /opt/dovecot2/libexec/dovecot/imap /services/dovecot1/var/data/
sunrise.ch/m/mihaiush/core
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html
>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /opt/dovecot2/libexec/dovecot/imap...done.
[New LWP 3923]

warning: Can't read pathname for load map: Input/output error.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `dovecot/imap'.
Program terminated with signal 6, Aborted.
#0  0x00007fe2e3f62165 in raise () from /lib/x86_64-linux-gnu/libc.so.6
(gdb)
(gdb) bt full
#0  0x00007fe2e3f62165 in raise () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#1  0x00007fe2e3f653e0 in abort () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#2  0x00007fe2e4337135 in default_fatal_finish (type=<optimized out>,
status=status at entry=0) at failures.c:202
        backtrace = 0x2166c38
"/opt/dovecot2/lib/dovecot/libdovecot.so.0(+0x7c13f) [0x7fe2e433713f] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(+0x7c19e) [0x7fe2e433719e] ->
/opt/dovecot2/lib/dovecot/libdovecot.so.0(i_fatal+0) [0x"...
#3  0x00007fe2e433719e in i_internal_fatal_handler (ctx=0x7fffa5660ea0,
format=<optimized out>, args=<optimized out>) at failures.c:671
        status = 0
#4  0x00007fe2e42e5555 in i_panic (format=format at entry=0x7fe2e468d068 "file
%s: line %d (%s): assertion failed: (%s)") at failures.c:276
        ctx = {type = LOG_TYPE_PANIC, exit_status = 0, timestamp = 0x0,
timestamp_usecs = 0}
        args = {{gp_offset = 40, fp_offset = 48, overflow_arg_area =
0x7fffa5660f90, reg_save_area = 0x7fffa5660ed0}}
#5  0x00007fe2e466fd32 in mail_index_map_lookup_seq_range (map=<optimized
out>, first_uid=0, last_uid=<optimized out>, first_seq_r=<optimized out>,
last_seq_r=<optimized out>) at mail-index-map.c:547
        __FUNCTION__ = "mail_index_map_lookup_seq_range"
#6  0x00007fe2e46817fa in mail_index_lookup_seq_range (view=<optimized
out>, first_uid=<optimized out>, last_uid=<optimized out>,
first_seq_r=first_seq_r at entry=0x7fffa5660fe8, last_seq_r=last_seq_r at entry
=0x7fffa5660fec)
    at mail-index-view.c:513
No locals.
#7  0x00007fe2e45f819c in mailbox_get_seq_range (box=<optimized out>,
uid1=<optimized out>, uid2=<optimized out>, seq1_r=seq1_r at entry=0x7fffa5660fe8,
seq2_r=seq2_r at entry=0x7fffa5660fec) at mailbox-get.c:11
No locals.
#8  0x00007fe2e30c40b1 in uid_range_to_seqs
(uid_range=uid_range at entry=0x7fffa56610b0,
seq_range=seq_range at entry=0x25e4840, fctx=<error reading variable:
Unhandled dwarf expression opcode 0xfa>,
    fctx=<error reading variable: Unhandled dwarf expression opcode 0xfa>)
at fts-search.c:28
        range = 0x2166738
        i = <optimized out>
        count = <optimized out>
        seq1 = 41023456
        seq2 = 0
#9  0x00007fe2e30c4963 in multi_add_lookup_result (args=0x2363d50,
level=0x25e4840, fctx=0x23637e0, result=<optimized out>) at fts-search.c:138
        br = 0x271f7e0
        vuids = {arr = {buffer = 0x2166700, element_size = 8}, v =
0x2166700, v_modifiable = 0x2166700}
        orig_size = <optimized out>
        i = <optimized out>
        vbox = 0x2197c70
#10 fts_search_lookup_level_multi (and_args=<optimized out>,
args=0x2363d50, fctx=0x23637e0) at fts-search.c:198
        flags = FTS_LOOKUP_FLAG_AND_ARGS
        mailboxes_arr = {arr = {buffer = 0x2717670, element_size = 8}, v =
0x2717670, v_modifiable = 0x2717670}
        backend = <optimized out>
        j = 69
        vbox = <optimized out>
        mailboxes = 0x27176a8
        level = 0x25e4840
        result = {pool = 0x2717650, box_results = 0x271f7a0}
        i = <optimized out>
        mailbox_count = 69
#11 fts_search_lookup_level (fctx=fctx at entry=0x23637e0, args=0x2363d50,
and_args=and_args at entry=true) at fts-search.c:212
        _data_stack_cur_id = 4
        ret = <optimized out>
#12 0x00007fe2e30c4c36 in fts_search_lookup (fctx=fctx at entry=0x23637e0) at
fts-search.c:358
        last_uid = 2676
        seq1 = 0
        seq2 = 0
        __FUNCTION__ = "fts_search_lookup"
#13 0x00007fe2e30c6def in fts_mailbox_search_init (t=<optimized out>,
args=0x2363c90, sort_program=0x7fffa5661250, wanted_fields=<optimized out>,
wanted_headers=<optimized out>) at fts-storage.c:240
        ft = 0x23908a0
        fbox = <optimized out>
        flist = <optimized out>
        ctx = 0x2695dc0
        fctx = 0x23637e0
#14 0x000000000041dec0 in imap_search_start (ctx=ctx at entry=0x2195590,
sargs=0x2363c90, sort_program=sort_program at entry=0x7fffa5661250) at
imap-search.c:587
        cmd = 0x2195450
        __FUNCTION__ = "imap_search_start"
#15 0x0000000000414565 in cmd_sort (cmd=0x2195450) at cmd-sort.c:141
        ctx = 0x2195590
        sargs = 0x2363c90
        sort_program = {4097, MAIL_SORT_END, 56, MAIL_SORT_END, 3831136736,
32738, 35045104, MAIL_SORT_END, MAIL_SORT_ARRIVAL, MAIL_SORT_END,
MAIL_SORT_ARRIVAL, MAIL_SORT_END}
        args = 0x216cb98
        list_args = 0x216ccd0
        charset = 0x216ce30 "utf-8"
        ret = <optimized out>
#16 0x0000000000418aec in command_exec (cmd=cmd at entry=0x2195450) at
imap-commands.c:167
        hook = 0x216a120
        diff = <optimized out>
---Type <return> to continue, or q <return> to quit---
        finished = <optimized out>
#17 0x0000000000417ad0 in client_command_input (cmd=cmd at entry=0x2195450) at
imap-client.c:814
        client = 0x2194850
        command = <optimized out>
        __FUNCTION__ = "client_command_input"
#18 0x0000000000417b64 in client_command_input (cmd=0x2195450) at
imap-client.c:874
        client = 0x2194850
        command = <optimized out>
        __FUNCTION__ = "client_command_input"
#19 0x0000000000417e45 in client_handle_next_command
(remove_io_r=<synthetic pointer>, client=0x2194850) at imap-client.c:912
No locals.
#20 client_handle_input (client=client at entry=0x2194850) at imap-client.c:924
        _data_stack_cur_id = 3
        ret = 2
        remove_io = false
        handled_commands = false
        __FUNCTION__ = "client_handle_input"
#21 0x0000000000418212 in client_input (client=0x2194850) at
imap-client.c:966
        cmd = <optimized out>
        output = 0x2195270
        bytes = 46
        __FUNCTION__ = "client_input"
#22 0x00007fe2e43494fb in io_loop_call_io (io=0x2195360) at ioloop.c:501
        ioloop = 0x2169760
        t_id = 2
        __FUNCTION__ = "io_loop_call_io"
#23 0x00007fe2e434a54b in io_loop_handler_run_internal
(ioloop=ioloop at entry=0x2169760)
at ioloop-epoll.c:220
        ctx = 0x216a490
        events = 0xf53
        event = 0x216b300
        list = 0x216bef0
        io = <optimized out>
        tv = {tv_sec = 1799, tv_usec = 999663}
        events_count = <optimized out>
        msecs = <optimized out>
        ret = 1
        i = <optimized out>
        call = <optimized out>
        __FUNCTION__ = "io_loop_handler_run_internal"
#24 0x00007fe2e4349589 in io_loop_handler_run (ioloop=ioloop at entry=0x2169760)
at ioloop.c:548
No locals.
#25 0x00007fe2e4349608 in io_loop_run (ioloop=0x2169760) at ioloop.c:525
        __FUNCTION__ = "io_loop_run"
#26 0x00007fe2e42eabc3 in master_service_run (service=0x21695f0,
callback=callback at entry=0x421140 <client_connected>) at master-service.c:581
No locals.
#27 0x000000000040c60b in main (argc=1, argv=0x2169390) at main.c:431
        set_roots = {0x428c20, 0x0}
        login_set = {auth_socket_path = 0x2161060 "\210\020\026\002",
postlogin_socket_path = 0x0, postlogin_timeout_secs = 60, callback =
0x420f80 <login_client_connected>, failure_callback = 0x4210f0
<login_client_failed>,
          request_auth_token = 1}
        service_flags = <optimized out>
        storage_service_flags = <optimized out>
        username = 0x0
        c = <optimized out>
(gdb)

If necessary I can provide the mailbox, it has 7MB.


More information about the dovecot mailing list