Hi,
I've just enabled FTS via Lucene on my Dovecot 2.2.24 installation but I
see the indexer crashing ?always?.
This simple testcase with a very tiny testing mailbox exposes the issue
immediately:
doveadm -v index -u anmesse INBOX
Program received signal SIGSEGV, Segmentation fault.
rescan_clear_unseen_mailbox (rescan_ctx=rescan_ctx@entry=0x0,
vname=0x555555839820 "INBOX.Testfolder 2", hdr=hdr@entry=0x7fffffffdaf0) at
lucene-wrapper.cc:831
831 (enum mailbox_flags)0);
(gdb) bt full
#0 rescan_clear_unseen_mailbox (rescan_ctx=rescan_ctx@entry=0x0,
vname=0x555555839820 "INBOX.Testfolder 2", hdr=hdr@entry=0x7fffffffdaf0) at
lucene-wrapper.cc:831
box = 0x7ffff76fd0ad <mailbox_list_iter_next+285>
metadata = {guid = "\230\332\377\377\377\177\000\000\200߈UUU\000",
virtual_size = 140737340823160, physical_size = 140737488345756,
first_save_date = 140737488345840,
cache_fields = 0x555500000000,
precache_fields = (MAIL_FETCH_SAVE_DATE |
MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_NUL_STATE | MAIL_FETCH_STREAM_BINARY
| MAIL_FETCH_IMAP_BODY | MAIL_FETCH_IMAP_BODYSTRUCTURE |
MAIL_FETCH_IMAP_ENVELOPE | MAIL_FETCH_FROM_ENVELOPE | MAIL_FETCH_REFCOUNT |
MAIL_FETCH_BODY_SNIPPET | unknown: 1409286144), backend_ns_prefix = 0x0,
backend_ns_type = (unknown: 4294957808)}
#1 0x00007ffff489aade in rescan_clear_unseen_mailboxes
(index=index@entry=0x555555822e20,
rescan_ctx=rescan_ctx@entry=0x0) at lucene-wrapper.cc:863
iter = 0x55555588d530
info = <optimized out>
vname = <optimized out>
hdr = {last_indexed_uid = 0, settings_checksum = 3784394109, unused
= 0}
ns = 0x55555580f6c0
#2 0x00007ffff489b700 in lucene_settings_check (index=0x555555822e20) at
lucene-wrapper.cc:429
set_checksum = <optimized out>
ret = <optimized out>
#3 lucene_index_build_init (index=0x555555822e20) at lucene-wrapper.cc:448
lock_path = 0x5555557dd320
"/srv/dovecot/anmesse/maildir/lucene-indexes/write.lock"
st = {st_dev = 93823560581121, st_ino = 0, st_nlink =
140737344007992, st_mode = 4150696184, st_uid = 32767, st_gid = 5, __pad0 =
0, st_rdev = 93824995156880, st_size = 93824995175648,
st_blksize = 140737351975397, st_blocks = 93824995096256, st_atim
= {tv_sec = 140737488346056, tv_nsec = 5}, st_mtim = {tv_sec = 5, tv_nsec =
93824995156880}, st_ctim = {
tv_sec = 93824995175648, tv_nsec = 140737488346352},
__glibc_reserved = {140737488346352, 93824995267672, 140737344364485}}
exists = <optimized out>
#4 0x00007ffff4899dbe in fts_backend_lucene_update_set_build_key
(_ctx=0x55555583a550, key=0x7fffffffdcf0) at fts-backend-lucene.c:366
ctx = 0x55555583a550
backend = 0x555555822ce0
__FUNCTION__ = "fts_backend_lucene_update_set_build_key"
#5 0x00007ffff674c984 in fts_backend_update_set_build_key
(ctx=0x55555583a550, key=key@entry=0x7fffffffdcf0) at fts-api.c:175
__FUNCTION__ = "fts_backend_update_set_build_key"
#6 0x00007ffff674dbb8 in fts_build_mail_header (block=0x7fffffffdcd0,
block=0x7fffffffdcd0, ctx=0x7fffffffdd20) at fts-build-mail.c:174
hdr = <optimized out>
key = {uid = 96, type = FTS_BACKEND_BUILD_KEY_HDR, part =
0x5555557dd2c0, hdr_name = 0x5555558396b0 "Return-Path", body_content_type
= 0x0, body_content_disposition = 0x0}
ret = <optimized out>
#7 fts_build_mail_real (mail=0x555555838190, update_ctx=0x55555583a550) at
fts-build-mail.c:548
block = {part = 0x5555557dd2c0, hdr = 0x555555839458, data =
0x55550000007c <error: Cannot access memory at address 0x55550000007c>,
size = 0}
ret = <optimized out>
input = 0x555555838eb0
raw_block = {part = 0x5555557dd2c0, hdr = 0x5555558395e0, data =
0x0, size = 0}
skip_body = false
ctx = {mail = 0x555555838190, update_ctx = 0x55555583a550,
content_type = 0x0, content_disposition = 0x0, body_parser = 0x0, word_buf
= 0x0, pending_input = 0x0, cur_user_lang = 0x0}
prev_part = 0x5555557dd2c0
parser = 0x555555839070
decoder = 0x555555839440
parts = 0x31
body_part = false
body_added = false
binary_body = <optimized out>
error = 0x60 <error: Cannot access memory at address 0x60>
#8 fts_build_mail (update_ctx=0x55555583a550, mail=mail@entry=0x555555838190)
at fts-build-mail.c:594
_data_stack_cur_id = 5
#9 0x00007ffff675393e in fts_mail_index (_mail=0x555555838190) at
fts-storage.c:501
ft = 0x5555558366a0
flist = 0x55555581ea68
#10 fts_mail_precache (_mail=0x555555838190) at fts-storage.c:520
_data_stack_cur_id = 4
mail = 0x555555838190
fmail = <optimized out>
ft = <optimized out>
#11 0x00007ffff76987b9 in mail_precache (mail=0x555555838190) at mail.c:401
_data_stack_cur_id = 3
p = 0x555555838190
#12 0x0000555555582fa7 in cmd_index_box_precache (box=0x55555582fd80) at
doveadm-mail-index.c:75
ctx = 0x555555839be0
metadata = {guid = '\000' <repeats 15 times>, virtual_size = 0,
physical_size = 0, first_save_date = 0, cache_fields = 0x0,
precache_fields = (MAIL_FETCH_STREAM_HEADER |
MAIL_FETCH_STREAM_BODY | MAIL_FETCH_RECEIVED_DATE | MAIL_FETCH_SAVE_DATE |
MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE |
MAIL_FETCH_UIDL_BACKEND | MAIL_FETCH_GUID | MAIL_FETCH_POP3_ORDER),
backend_ns_prefix = 0x0, backend_ns_type = (unknown: 0)}
counter = 0
max = 15
status = {messages = 15, recent = 0, unseen = 0, uidvalidity =
1048765368, uidnext = 151, first_unseen_seq = 0, first_recent_uid = 151,
last_cached_seq = 0, highest_modseq = 0,
highest_pvt_modseq = 0, keywords = 0x0, permanent_flags = 0,
permanent_keywords = 0, allow_new_keywords = 0, nonpermanent_modseqs = 0,
no_modseq_tracking = 0, have_guids = 1,
have_save_guids = 1, have_only_guid128 = 0}
mail = 0x555555838190
ret = 0
trans = 0x555555834310
search_args = 0x0
seq = <optimized out>
#13 cmd_index_box (info=<optimized out>, info=<optimized out>,
ctx=0x555555807410) at doveadm-mail-index.c:130
box = 0x55555582fd80
status = {messages = 130, recent = 0, unseen = 0, uidvalidity = 0,
uidnext = 1434552496, first_unseen_seq = 21845, first_recent_uid =
4294958896, last_cached_seq = 32767,
highest_modseq = 93824995069728, highest_pvt_modseq =
93824995074385, keywords = 0x555555819868, permanent_flags = 4150947016,
permanent_keywords = 1, allow_new_keywords = 1,
nonpermanent_modseqs = 1, no_modseq_tracking = 1, have_guids = 1,
have_save_guids = 1, have_only_guid128 = 1}
ret = 0
#14 cmd_index_run (_ctx=0x555555807410, user=0x5555558188b0) at
doveadm-mail-index.c:201
_data_stack_cur_id = 2
iter = 0x55555582b9f0
info = <optimized out>
ret = 0
user = 0x5555558188b0
_ctx = 0x555555807410
ctx = 0x555555807410
i = <optimized out>
#15 0x000055555557dedf in doveadm_mail_next_user (ctx=ctx@entry=0x555555807410,
cctx=cctx@entry=0x7fffffffe2a0, error_r=error_r@entry=0x7fffffffe0b8) at
doveadm-mail.c:400
input = {module = 0x0, service = 0x5555555b15a9 "doveadm", username
= 0x5555557da298 "anmesse", session_id = 0x0, session_id_prefix = 0x0,
local_ip = {family = 0, u = {ip6 = {__in6_u = {
---Type <return> to continue, or q <return> to quit---
__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0,
0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, ip4 = {s_addr = 0}}},
remote_ip = {family = 0, u = {ip6 = {
__in6_u = {__u6_addr8 = '\000' <repeats 15 times>,
__u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, ip4 =
{s_addr = 0}}}, local_port = 0, remote_port = 0,
userdb_fields = 0x0, flags_override_add = (unknown: 0),
flags_override_remove = (unknown: 0), no_userdb_lookup = 0, debug = 0}
error = 0x20 <error: Cannot access memory at address 0x20>
ip = <optimized out>
ret = <optimized out>
__FUNCTION__ = "doveadm_mail_next_user"
#16 0x000055555557e843 in doveadm_mail_single_user
(ctx=ctx@entry=0x555555807410,
cctx=cctx@entry=0x7fffffffe2a0, error_r=error_r@entry=0x7fffffffe0b8) at
doveadm-mail.c:431
__FUNCTION__ = "doveadm_mail_single_user"
#17 0x000055555557e8fd in doveadm_mail_cmd_exec (ctx=ctx@entry=0x555555807410,
cctx=cctx@entry=0x7fffffffe2a0, wildcard_user=wildcard_user@entry=0x0) at
doveadm-mail.c:589
ret = <optimized out>
error = 0x7ffff7fe89e8 ""
#18 0x000055555557f6ef in doveadm_cmd_ver2_to_mail_cmd_wrapper
(cctx=0x7fffffffe2a0) at doveadm-mail.c:1030
mctx = 0x555555807410
wildcard_user = <optimized out>
username_args = {0x5555555b1479 "-u", 0x5555557da298 "anmesse", 0x0}
fieldstr = 0x7ffff73d7423 <t_malloc0+35>
"H\203\304\bH\211\330[]\303\017\037"
username_args_count = <optimized out>
i = <optimized out>
mail_cmd = {alloc = 0x555555582ad0 <cmd_index_alloc>, name =
0x5555555b3e7b "index", usage_args = 0x5555555b2ee8 "[-u <user>|-A] [-S
<socket_path>] [-q] [-n <max recent>] <mailbox mask>"}
#19 0x000055555558c93c in doveadm_cmd_run_ver2 (argc=4,
argv=0x5555557e13a0, cctx=cctx@entry=0x7fffffffe2a0) at doveadm-cmd.c:524
param = <optimized out>
pargv = {arr = {buffer = 0x5555557d9a40, element_size = 104}, v =
0x5555557d9a40, v_modifiable = 0x5555557d9a40}
opts = {arr = {buffer = <optimized out>, element_size = 32}, v =
<optimized out>, v_modifiable = <optimized out>}
pargc = 7
c = -1
li = 21845
pool = 0x5555557d9778
optbuf = 0x5555557d9790
__FUNCTION__ = "doveadm_cmd_run_ver2"
#20 0x000055555558c9d7 in doveadm_cmd_try_run_ver2 (cmd_name=<optimized
out>, argc=4, argv=0x5555557e13a0, cctx=0x7fffffffe2a0) at doveadm-cmd.c:447
cmd = <optimized out>
#21 0x000055555556fb1f in main (argc=4, argv=0x5555557e13a0) at
doveadm.c:376
cctx = {cmd = 0x5555557e8208, argc = 7, argv = 0x5555557d9a78,
username = 0x5555557da298 "anmesse", cli = true, local_ip = {family = 0, u
= {ip6 = {__in6_u = {
__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0,
0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, ip4 = {s_addr = 0}}},
remote_ip = {family = 0, u = {ip6 = {
__in6_u = {__u6_addr8 = '\000' <repeats 15 times>,
__u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, ip4 =
{s_addr = 0}}}, local_port = 0, remote_port = 0}
cmd_name = 0x5555557e13dc "index"
quick_init = false
c = <optimized out>
doveconf -n:
# 2.2.24 (a82c823): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.14 (099a97c)
# OS: Linux 4.1.21-14-default x86_64 openSUSE 42.1 (x86_64)
auth_mechanisms = plain login
imap_id_log = *
mail_gid = vmail
mail_home = /srv/dovecot/%u
mail_location = maildir:~/maildir
mail_plugins = acl fts fts_lucene virtual zlib quota
mail_uid = vmail
mailbox_list_index = yes
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character
vacation subaddress comparator-i;ascii-numeric relational regex imap4flags
copy include variables body enotify environment
mailbox date index ihave duplicate mime foreverypart extracttext
namespace {
list = children
location =
maildir:/srv/dovecot/%%u/maildir:INDEX=~/maildir/shared/%%u:CONTROL=~/maildir/shared/%%u
prefix = shared.%%n.
separator = .
subscriptions = yes
type = shared
}
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = \Drafts
}
mailbox Entwürfe {
special_use = \Drafts
}
mailbox "Gesendete Objekte" {
special_use = \Sent
}
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Items" {
special_use = \Sent
}
mailbox Spam {
auto = create
special_use = \Junk
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
prefix = INBOX.
separator = .
type = private
}
passdb {
args = /etc/dovecot/dovecot-ldap.conf.ext
driver = ldap
}
plugin {
acl = vfile
acl_shared_dict = file:/srv/dovecot/shared-mailboxes.db
fts = lucene
fts_autoindex = yes
fts_lucene = whitespace_chars="@"
quota = dict:User quota::file:%h/dovecot-quota
quota_grace = 10%%
quota_rule = *:storage=100M
quota_rule2 = INBOX.Trash:storage=+10M
quota_status_nosuser = DUNNO
quota_status_overquota = 552 5.2.2 Mailbox is full / Mailbox ist voll
quota_status_success = DUNNO
sieve = file:~/sieve;active=~/.dovecot.sieve
zlib_save = gz
zlib_save_level = 6
}
protocols = imap pop3 lmtp sieve
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-userdb {
mode = 0777
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0660
user = postfix
}
}
service managesieve-login {
inet_listener sieve {
port = 4190
}
inet_listener sieve_deprecated {
port = 2000
}
}
service quota-status {
client_limit = 1
executable = quota-status -p postfix
inet_listener {
address = 127.0.0.1,::1
port = 12340
}
}
ssl_cert = <
ssl_dh_parameters_length = 2048
ssl_key = <
ssl_options = no_compression
ssl_prefer_server_ciphers = yes
userdb {
driver = prefetch
}
userdb {
args = /etc/dovecot/dovecot-ldap.conf.ext
driver = ldap
}
userdb {
args = username_format=%n /etc/dovecot/shared-mailboxes
default_fields = uid=600 gid=600 home=/srv/dovecot/%n
driver = passwd-file
}
protocol lmtp {
mail_plugins = acl fts fts_lucene virtual zlib quota sieve
}
protocol imap {
mail_max_userip_connections = 30
mail_plugins = acl fts fts_lucene virtual zlib quota imap_acl imap_zlib
imap_quota
namespace inbox {
location =
mailbox Spam {
autoexpunge = 90 days
}
mailbox Trash {
autoexpunge = 370 days
}
prefix =
}
}