Fernando Coelho
2015-May-18 23:40 UTC
Imap process timeout to quota proxy on logout after async commit
Hi there, I am having some trouble implementing a quota proxy server for a memcached based dict (I am using the version 2.2.15). I created a multi-threaded daemon that is using non-blocking sockets to receive the data and reply to dovecot. Right now everything but the atomic increase message is working great. Here is an example of such a message: B1 A1??? priv/quota/storage??? 86583 A1??? priv/quota/messages??? 1 D1 The program process it and I replies:OA1 Everything keeps working as expects until the user sends the imap a logout command.? The only problem is that for some reason dovecot tries to read data from server without sending anything, and after 30 seconds it exits with an timeout error. The following message is logged: May 18 22:46:00 imap[11654]: user 29908633#perm!terra (29908633#perm!terra) from 127.0.0.1: Error: read(/tmp/quotatest) failed: Timeout after 30 seconds May 18 22:46:00 imap[11654]: user 29908633#perm!terra (29908633#perm!terra) from 127.0.0.1: Info: Disconnected: Logged out in=40 out=827 May 18 22:46:00 imap[11654]: user 29908633#perm!terra (29908633#perm!terra) from 127.0.0.1: Error: dict quota: Quota update failed, it's now desynced The really strange part is that it only fails if and atomic increase was sent and only when the user logs out. I use the same pattern ("OA<transaction id>\n") to reply for other commits (such as when there is an unset followed by a set) and there is no issue. Is there anything that I am missing? Thanks in advance.