[Dovecot] Quota plugin, Maildir, dict backend loop problem
David Jonas
djonas at vitalwerks.com
Wed Jul 25 00:09:23 EEST 2007
Hello,
I've been working with the quota plugin(s) the past few days and have
been having some real trouble. Only a few entries are appearing in the
database, a couple more when I restarted dovecot. None of the current
entries were being updated either.
I think I've tracked it down to somewhere in the dict backend. I put in
a few i_info() statements and recompiled. A few queries get through,
then it seems to try the same query about three times and then no new
more queries at all (the i_info is right after the allocation of the
query string). I couldn't find any errors in the log.
An strace of the dict pid shows the following loop. Dovecot -n to follow
as well.
A quick tcpdump showed a loop something like this:
< SELECT current FROM quota WHERE ...
> 513965019
< BEGIN
< INSERT INTO quota (current, ...
< COMMIT
> ?? (error_r appears to be (null))
.. repeat ..
In all my tests it appears that the quota value being set during the
loop is 0, but that would be the most common case anyway. An insert
query would look like this:
INSERT INTO quota (current, path, username) VALUES (0, 'quota/storage',
'user at example.com') ON DUPLICATE KEY UPDATE current = current + 0;
Help on what to do/try next would greatly be appreciated.
Thanks,
David
$ strace -p 19816
epoll_wait(5, {{EPOLLIN, {u32=153555248, u64=153555248}}, {EPOLLIN,
{u32=153601240, u64=153601240}}, {EPOLLIN|EPOLLHUP, {u32=153567344,
u64=153567344}}}, 29, 2147483647) = 3
gettimeofday({1185308526, 494477}, {420, 0}) = 0
read(20, "Lpriv/quota/storage\n", 4044) = 20
fcntl64(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0
read(9, 0x9271eb8, 8192) = -1 EAGAIN (Resource
temporarily unavailable)
fcntl64(9, F_SETFL, O_RDWR) = 0
setsockopt(9, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
write(9, "l\0\0\0\3SELECT current FROM quota W"..., 112) = 112
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "\1\0\0\1", 4) = 4
read(9, "\1", 1) = 1
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "6\0\0\2", 4) = 4
read(9, "\3def\10vpopmail\5quota\5quota\7curren"..., 54) = 54
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "\1\0\0\3", 4) = 4
read(9, "\376", 1) = 1
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "\n\0\0\4", 4) = 4
read(9, "\t582670292", 10) = 10
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "\5\0\0\5", 4) = 4
read(9, "\376\0\0\2\0", 5) = 5
write(20, "O582670292\n", 11) = 11
read(10, "B1\nA1\tpriv/quota/storage\t-24324\n"..., 4043) = 35
fcntl64(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0
read(9, 0x9271eb8, 8192) = -1 EAGAIN (Resource
temporarily unavailable)
fcntl64(9, F_SETFL, O_RDWR) = 0
setsockopt(9, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
write(9, "\6\0\0\0\3BEGIN", 10) = 10
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "\7\0\0\1", 4) = 4
read(9, "\0\0\0\3\0\0\0", 7) = 7
fcntl64(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0
read(9, 0x9271eb8, 8192) = -1 EAGAIN (Resource
temporarily unavailable)
fcntl64(9, F_SETFL, O_RDWR) = 0
setsockopt(9, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
write(9, "\247\0\0\0\3INSERT INTO quota (current,"..., 171) = 171
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "\7\0\0\1", 4) = 4
read(9, "\0\2\0\3\0\0\0", 7) = 7
fcntl64(9, F_SETFL, O_RDWR|O_NONBLOCK) = 0
read(9, 0x9271eb8, 8192) = -1 EAGAIN (Resource
temporarily unavailable)
fcntl64(9, F_SETFL, O_RDWR) = 0
setsockopt(9, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
write(9, "\7\0\0\0\3COMMIT", 11) = 11
setsockopt(9, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
read(9, "\7\0\0\1", 4) = 4
read(9, "\0\0\0\2\0\0\0", 7) = 7
write(10, "O\n", 2) = 2
read(14, "", 3998) = 0
epoll_ctl(5, EPOLL_CTL_DEL, 14, {0, {u32=153567344, u64=153567344}}) = 0
close(14) = 0
epoll_wait(5, {{EPOLLIN|EPOLLHUP, {u32=153601240, u64=153601240}}}, 29,
2147483647) = 1
gettimeofday({1185308526, 500644}, {420, 0}) = 0
read(10, "", 4008) = 0
epoll_ctl(5, EPOLL_CTL_DEL, 10, {0, {u32=153601240, u64=153601240}}) = 0
close(10) = 0
epoll_wait(5, <unfinished ...>
Process 19816 detached
$ /usr/local/dovecot/sbin/dovecot -n
# 1.0.2: /etc/dovecot.conf
protocols: imap pop3
ssl_disable: yes
disable_plaintext_auth: no
login_dir: /usr/local/dovecot/var/run/dovecot/login
login_executable(default): /usr/local/dovecot/libexec/dovecot/imap-login
login_executable(imap): /usr/local/dovecot/libexec/dovecot/imap-login
login_executable(pop3): /usr/local/dovecot/libexec/dovecot/pop3-login
login_greeting: postoffice.no-ip.com
login_log_format_elements: user=<%u@%d> method=%m rip=%r lip=%l %c
login_process_per_connection: no
verbose_proctitle: yes
first_valid_uid: 89
maildir_stat_dirs: yes
maildir_copy_with_hardlinks: yes
mail_executable(default): /usr/local/dovecot/libexec/dovecot/imap
mail_executable(imap): /usr/local/dovecot/libexec/dovecot/imap
mail_executable(pop3): /usr/local/dovecot/libexec/dovecot/pop3
mail_plugins(default): quota imap_quota
mail_plugins(imap): quota imap_quota
mail_plugins(pop3): quota
mail_plugin_dir(default): /usr/local/dovecot/lib/dovecot/imap
mail_plugin_dir(imap): /usr/local/dovecot/lib/dovecot/imap
mail_plugin_dir(pop3): /usr/local/dovecot/lib/dovecot/pop3
mail_log_prefix: %Us(%u)[%p]:
pop3_uidl_format(default):
pop3_uidl_format(imap):
pop3_uidl_format(pop3): %f
pop3_client_workarounds(default):
pop3_client_workarounds(imap):
pop3_client_workarounds(pop3): outlook-no-nuls oe-ns-eoh
auth default:
cache_size: 100
cache_ttl: 600
user: nobody
username_translation: %@
username_format: %Lu
verbose: yes
passdb:
driver: sql
args: /etc/dovecot-sql.conf
userdb:
driver: prefetch
plugin:
quota: dict:storage=102400000 proxy::quotadict
dict:
quotadict: mysql:/etc/dovecot-dict-quota.conf
$ cat /etc/dovecot-dict-quota.conf
connect = host=192.168.15.25 dbname=vpopmail user=xxx password=xxx
table = quota
select_field = current
where_field = path
username_field = username
$ cat /etc/redhat-release
Red Hat Enterprise Linux ES release 4 (Nahant Update 5)
$ rpm -qa | grep -i mysql
MySQL-devel-standard-4.1.22-0.rhel4
MySQL-shared-standard-4.1.22-0.rhel4
MySQL-client-standard-4.1.22-0.rhel4
$ lsof -c dict -n
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
dict 19816 root cwd DIR 8,5 4096 464289
/usr/local/dovecot/var/run/dovecot
dict 19816 root rtd DIR 8,7 4096 2 /
dict 19816 root txt REG 8,5 1868454 464309
/usr/local/dovecot/libexec/dovecot/dict
dict 19816 root mem REG 8,7 47404 160369
/lib/libnss_files-2.3.4.so
dict 19816 root mem REG 8,7 112168 160456 /lib/ld-2.3.4.so
dict 19816 root mem REG 8,7 1529008 163193
/lib/tls/libc-2.3.4.so
dict 19816 root mem REG 8,7 16732 165083
/lib/libdl-2.3.4.so
dict 19816 root mem REG 8,7 213772 165079
/lib/tls/libm-2.3.4.so
dict 19816 root mem REG 8,7 107800 165077
/lib/tls/libpthread-2.3.4.so
dict 19816 root mem REG 8,7 28476 165086
/lib/libcrypt-2.3.4.so
dict 19816 root mem REG 8,7 97120 165087
/lib/libnsl-2.3.4.so
dict 19816 root 0r CHR 1,3 1797 /dev/null
dict 19816 root 1r CHR 1,3 1797 /dev/null
dict 19816 root 2w FIFO 0,7 52832717 pipe
dict 19816 root 3u unix 0xf4e58180 52832640
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 4r CHR 1,9 466 /dev/urandom
dict 19816 root 5r 0000 0,8 0 52832719 eventpoll
dict 19816 root 6r FIFO 0,7 52832720 pipe
dict 19816 root 7w FIFO 0,7 52832720 pipe
dict 19816 root 8u unix 0xf6fac480 52884208
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 9u IPv4 52832745 TCP
192.168.15.55:46058->192.168.15.25:mysql (ESTABLISHED)
dict 19816 root 10u unix 0xdae69240 52881759
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 11u unix 0xf36af680 52884148
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 12u unix 0xf505f6c0 52881064
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 13u unix 0xd5d84280 52884278
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 15u unix 0xd1ab9b00 52883941
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 16u unix 0xf6faca80 52884264
/usr/local/dovecot/var/run/dovecot/dict-server
dict 19816 root 17u unix 0xf63cb1c0 52884235
/usr/local/dovecot/var/run/dovecot/dict-server
More information about the dovecot
mailing list