Lazy
2015-Dec-30 16:35 UTC
segfault in dict_transaction_rollback() on doveadm quota recalc -u
Bump> Hi, > > We have a dovecot cluster with nfs storage, 2 directors and 3 > imap/pop3/lmtp backends. > > Redis is used as a dict backend with a dict proxy. > > dict { > quota = redis:host=127.0.0.1:prefix=user/ > } > > plugin { > > quota = dict:User quota::proxy::quota > > } > > Redis server is behind haproxy working in tcp mode. > > doveadm quota recalc -u user always couses dict process segfault (called > from imap backend or director host), otherwise quota is working correctly. > > > #0 dict_transaction_rollback (_ctx=_ctx at entry=0xea5fd0) at dict.c:194 > 194 ctx->dict->v.transaction_rollback(ctx); > (gdb) bt > #0 dict_transaction_rollback (_ctx=_ctx at entry=0xea5fd0) at dict.c:194 > #1 0x0000000000404d4d in dict_connection_destroy (conn=conn at entry=0xea5af0) > at dict-connection.c:166 > #2 0x0000000000405098 in dict_connection_input (conn=<optimized out>) at > dict-connection.c:127 > #3 dict_connection_input (conn=0xea5af0) at dict-connection.c:96 > #4 0x00007fbf886fe4fb in io_loop_call_io (io=0xeab550) at ioloop.c:501 > #5 0x00007fbf886ff54b in io_loop_handler_run_internal (ioloop=ioloop at entry=0xe9f730) > at ioloop-epoll.c:220 > #6 0x00007fbf886fe589 in io_loop_handler_run (ioloop=ioloop at entry=0xe9f730) > at ioloop.c:548 > #7 0x00007fbf886fe608 in io_loop_run (ioloop=0xe9f730) at ioloop.c:525 > #8 0x00007fbf8869fbc3 in master_service_run (service=0xe9f5c0, > callback=callback at entry=0x4059c0 <client_connected>) at > master-service.c:581 > #9 0x0000000000404ad8 in main (argc=1, argv=0xe9f390) at main.c:105 > (gdb) p ctx > $1 = (struct dict_transaction_context *) 0x0 > > > dovecot 2.2.18, redis server 2.8 > > > > Regards Michal >
Timo Sirainen
2015-Dec-30 22:02 UTC
segfault in dict_transaction_rollback() on doveadm quota recalc -u
> Lazy <lazy404 at gmail.com> kirjoitti 30.12.2015 kello 11.35: > > BumpDid you try with v2.2.21? There are some fixes related to dict.> > >> Hi, >> >> We have a dovecot cluster with nfs storage, 2 directors and 3 >> imap/pop3/lmtp backends. >> >> Redis is used as a dict backend with a dict proxy. >> >> dict { >> quota = redis:host=127.0.0.1:prefix=user/ >> } >> >> plugin { >> >> quota = dict:User quota::proxy::quota >> >> } >> >> Redis server is behind haproxy working in tcp mode. >> >> doveadm quota recalc -u user always couses dict process segfault (called >> from imap backend or director host), otherwise quota is working correctly. >> >> >> #0 dict_transaction_rollback (_ctx=_ctx at entry=0xea5fd0) at dict.c:194 >> 194 ctx->dict->v.transaction_rollback(ctx); >> (gdb) bt >> #0 dict_transaction_rollback (_ctx=_ctx at entry=0xea5fd0) at dict.c:194 >> #1 0x0000000000404d4d in dict_connection_destroy (conn=conn at entry=0xea5af0) >> at dict-connection.c:166 >> #2 0x0000000000405098 in dict_connection_input (conn=<optimized out>) at >> dict-connection.c:127 >> #3 dict_connection_input (conn=0xea5af0) at dict-connection.c:96 >> #4 0x00007fbf886fe4fb in io_loop_call_io (io=0xeab550) at ioloop.c:501 >> #5 0x00007fbf886ff54b in io_loop_handler_run_internal (ioloop=ioloop at entry=0xe9f730) >> at ioloop-epoll.c:220 >> #6 0x00007fbf886fe589 in io_loop_handler_run (ioloop=ioloop at entry=0xe9f730) >> at ioloop.c:548 >> #7 0x00007fbf886fe608 in io_loop_run (ioloop=0xe9f730) at ioloop.c:525 >> #8 0x00007fbf8869fbc3 in master_service_run (service=0xe9f5c0, >> callback=callback at entry=0x4059c0 <client_connected>) at >> master-service.c:581 >> #9 0x0000000000404ad8 in main (argc=1, argv=0xe9f390) at main.c:105 >> (gdb) p ctx >> $1 = (struct dict_transaction_context *) 0x0 >> >> >> dovecot 2.2.18, redis server 2.8 >> >> >> >> Regards Michal >>
Timo Sirainen
2016-Jan-04 18:53 UTC
segfault in dict_transaction_rollback() on doveadm quota recalc -u
On 30 Dec 2015, at 11:35, Lazy <lazy404 at gmail.com> wrote:> >> dict { >> quota = redis:host=127.0.0.1:prefix=user/ >> } >> >> plugin { >> >> quota = dict:User quota::proxy::quota >> >> } >> >> Redis server is behind haproxy working in tcp mode. >> >> doveadm quota recalc -u user always couses dict process segfault (called >> from imap backend or director host), otherwise quota is working correctly. >> >> >> #0 dict_transaction_rollback (_ctx=_ctx at entry=0xea5fd0) at dict.c:194 >> 194 ctx->dict->v.transaction_rollback(ctx);This should fix it: https://github.com/dovecot/core/commit/f6d8250f99520eac003da742a5f34abd2b537c38