-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi,
I have ACL-dict-postgres trouble again. Eventually a session does not update the ACL dictionary no longer.
I execute (for testing) this script: for a in $(seq 1 ${1-4}); do echo 3-$a deleteAcl Junk dvtest1 sleep 30 echo 3-$a SetAcl Junk dvtest1 kxilrsc sleep 30 done
It works two loops
2013-01-24 11:07:59 dict: Info: pgsql(localhost): Connected to database dovecot 2013-01-24 11:07:59 dict: Info: pgsql(localhost): Connected to database dovecot 2013-01-24 11:07:59 dict: Info: pgsql(localhost): Connected to database dovecot 2013-01-24 11:08:59 dict: Info: pgsql(localhost): Connected to database dovecot 2013-01-24 11:09:29 dict: Info: pgsql(localhost): Connected to database dovecot
, then dies with:
2013-01-24 11:09:59 dict: Error: dict sql iterate failed: Not connected to database 2013-01-24 11:09:59 IMAP(dvtest6) [22740]: Error: acl: dict iteration failed, can't update dict 2013-01-24 11:10:02 IMAP(dvtest6) [22740]: Info: Connection closed in=159 out=572 2013-01-24 11:11:00 dict: Panic: file driver-pgsql.c: line 84 (driver_pgsql_set_state): assertion failed: (state == SQL_DB_STATE_BUSY || db->cur_result == NULL) 2013-01-24 11:11:00 dict: Error: Raw backtrace: /usr/local/dovecot-2.1.13/lib/dovecot/libdovecot.so.0(+0x4881a) [0x7f465693181a] -> /usr/local/dovecot-2.1.13/lib/dovecot/libdovecot.so.0(+0x48866) [0x7f4656931866] -> /usr/local/dovecot-2.1.13/lib/dovecot/libdovecot.so.0(i_error+0) [0x7f4656904f7f] -> dovecot2.1/dict() [0x40aa36] -> dovecot2.1/dict() [0x40aa91] -> dovecot2.1/dict() [0x40bed3] -> dovecot2.1/dict() [0x409504] -> dovecot2.1/dict(sql_db_cache_deinit+0x20) [0x408a60] -> dovecot2.1/dict(main+0x169) [0x405a59] -> /lib/libc.so.6(__libc_start_main+0xfd) [0x7f465637cc8d] -> dovecot2.1/dict() [0x404bb9] 2013-01-24 11:11:00 dict: Fatal: master: service(dict): child 22744 killed with signal 6 (core not dumped)
There are two different Panic messages:
Panic: file driver-pgsql.c: line 587: unreached Panic: file driver-pgsql.c: line 84 (driver_pgsql_set_state): assertion failed: (state == SQL_DB_STATE_BUSY || db->cur_result == NULL)
I have ulimit -c unlimited set, at start up Dovecot says:
2013-01-23 16:33:20 master: Info: Dovecot v2.1.13 (6eabf0c738d7) starting up
but I do not get no core dumps.
The last SQL statement executed by Posgres is (log level debug5):
2013-01-24 11:09:59 CET DEBUG: StartTransactionCommand 2013-01-24 11:09:59 CET STATEMENT: SELECT dummy,to_user,from_user FROM user_shares 2013-01-24 11:09:59 CET DEBUG: StartTransaction 2013-01-24 11:09:59 CET STATEMENT: SELECT dummy,to_user,from_user FROM user_shares 2013-01-24 11:09:59 CET DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children: 2013-01-24 11:09:59 CET STATEMENT: SELECT dummy,to_user,from_user FROM user_shares 2013-01-24 11:09:59 CET LOG: statement: SELECT dummy,to_user,from_user FROM user_shares 2013-01-24 11:09:59 CET DEBUG: CommitTransactionCommand 2013-01-24 11:09:59 CET STATEMENT: SELECT dummy,to_user,from_user FROM user_shares 2013-01-24 11:09:59 CET DEBUG: CommitTransaction 2013-01-24 11:09:59 CET STATEMENT: SELECT dummy,to_user,from_user FROM user_shares 2013-01-24 11:09:59 CET DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children: 2013-01-24 11:09:59 CET STATEMENT: SELECT dummy,to_user,from_user FROM user_shares 2013-01-24 11:09:59 CET LOG: duration: 0.205 ms
Dovecot conf: SQL /usr/local/dovecot-2.1.13/etc/dovecot/dovecot-dict-sql.conf.ext connect = host=localhost dbname=dovecot user=dovecot pass=XYZ # CREATE TABLE user_shares ( # from_user varchar(100) not null, # to_user varchar(100) not null, # dummy char(1) DEFAULT '1', -- always '1' currently # primary key (from_user, to_user) # ); # COMMENT ON TABLE user_shares IS 'User from_user shares folders to user to_user.'; # # CREATE INDEX to_user # ON user_shares (to_user); -- because we always search for to_user # # CREATE TABLE anyone_shares ( # from_user varchar(100) not null, # dummy char(1) DEFAULT '1', -- always '1' currently # primary key (from_user) # ); # COMMENT ON TABLE anyone_shares IS 'User from_user shares folders to anyone.';
map { pattern = shared/shared-boxes/user/$to/$from table = user_shares value_field = dummy
fields { from_user = $from to_user = $to } }
map { pattern = shared/shared-boxes/anyone/$from table = anyone_shares value_field = dummy
fields { from_user = $from } }
# 2.1.13 (6eabf0c738d7): /usr/local/dovecot-2.1.13/etc/dovecot/dovecot.conf # OS: Linux 2.6.32-5-amd64 x86_64 Debian 6.0.6 auth_cache_size = 10 M auth_debug = yes auth_mechanisms = plain login auth_verbose = yes base_dir = /var/run/dovecot2.1/ deliver_log_format = msgid=%m: %$ %p/%w "%f" "%s" dict { acl = pgsql:/usr/local/dovecot-2.1.13/etc/dovecot/dovecot-dict-sql.conf.ext quota = pgsql:/usr/local/dovecot-2.1.13/etc/dovecot/dovecot-dict-sql.conf.ext } instance_name = dovecot2.1 lda_mailbox_autocreate = yes lmtp_save_to_detail_mailbox = yes log_path = /var/log/dovecot/dovecot2.1.log log_timestamp = "%F %H:%M:%S " mail_debug = yes mail_gid = vmail mail_log_prefix = "%Us(%u) [%p]: " mail_plugins = " quota notify mail_log zlib acl" mail_uid = vmail 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 ihave imapflags namespace { list = children location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u prefix = users.%%u. separator = . type = shared } namespace inbox { inbox = yes location = 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 = } passdb { args = /usr/local/dovecot-2.1.13/etc/dovecot/dovecot-ldap.conf.ext driver = ldap } plugin { acl = vfile acl_shared_dict = proxy::acl antispam_allow_append_to_spam = true antispam_backend = spool2dir antispam_spam = SPAM+ReportAsSPAM antispam_spool2dir_notspam = /tmp/spamspool/%%020lu-%%05lu-%u-H antispam_spool2dir_spam = /tmp/spamspool/%%020lu-%%05lu-%u-S antispam_trash = trash;TRASH;Trash;spam;SPAM;Spam;junk;JUNK;Junk;Deleted Items;Deleted Messages;Gel&APY-schte Elemente;Gel&APY-schte Objekte;Junk E-mail;Junk-E-Mail;INBOX.Trash;INBOX.TRASH;INBOX.trash mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename mail_log_fields = uid box msgid size vsize from subject quota = dict:User quota::proxy::quota quota_rule = *:storage=300MB quota_rule2 = Trash:storage=+30M recipient_delimiter = + sieve = ~/.dovecot.sieve sieve_dir = ~/sieve sieve_extensions = +imapflags sieve_max_actions = 0 sieve_quota_max_storage = 3M } protocols = imap pop3 lmtp sieve quota_full_tempfail = yes service auth { unix_listener auth-userdb { mode = 0766 user = vmail } } service dict { unix_listener dict { group = vmail mode = 0660 user = vmail } } service doveadm { unix_listener doveadm-server { mode = 0666 } } service managesieve-login { inet_listener sieve { port = 4190 } inet_listener sieve_deprecated { port = 2000 } } ssl_ca =
Steffen Kaiser -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux)
iQEVAwUBUQEQdF3r2wJMiz2NAQL62AgAsXfP01TYvGjsu9Tcny8vCHMEOhBw0QVO rvx7YDdYgyVLb/JwHQseq5XGPzRHh6PFn5HrrUFpnG87E52ZKTH1rkwYiuyM8fso HAsUM0mlz9fGGPucMa9HoTbw5turbqbjVags8x6Om4W4sgp+RITd4UZq/Qcu/ShF jfI5KDEK9bnPh9WwVKV6Yfd/1auZH+SCacb69Bb/cyVDiwbxOUTAEZikgWYgFOG2 /B1KzUPrjtumAS9myswIJxEG/4DmEt0In5fgQLM7cDdbGQl400JzR2rEa4bd3C1b 3DImA3J/YUfLpuqGS60rhx1rpSfad61Us2dh5kGgbswtbwKj2FtnTg== =Jpqg -----END PGP SIGNATURE-----