[horde] IMP IMAP DB Cache backend lifetime
Joao S Veiga
jsveiga at rf.com.br
Fri Aug 25 19:14:42 UTC 2017
Hello,
I noticed my mysql cpu usage was high, and tracked it down to a
deadlock on an IMP IMAP cache delete:
2017-08-24 16:41:42 ERR: HORDE [imp] SQL QUERY FAILED: Deadlock found
when trying to get lock; try restarting transaction
DELETE FROM horde_imap_client_message WHERE messageid IN (SELECT
messageid FROM horde_imap_client_data d WHERE d.hostspec = 'localhost'
AND d.port = '143' AND d.username = 'james.sousa' AND d.mailbox = '01
ESTRUTURA ARQ') AND (msguid = '6461' OR msguid = '6494' OR msguid =
'6495' OR msguid = '6496' OR msguid = '6497' OR msguid = '6498' OR
msguid = '6499' OR msguid = '6500' OR msguid = '6501' OR msguid =
[...]
I deleted the imap cache tables on mysql manually and all is ok (but
there were 137k entries in the message cache, and I have less than 50
users) but while trying to solve this I noticed two things:
1 - horde-clear-cache does not clear the IMP IMAP DB cache tables
(horde_imap_client_data, horde_imap_client_metadata,
horde_imap_client_message). Is there a script for clearing these
tables, or doing it via sql is the only way?
2 - the Db.php backend
(framework/Imap_Client/lib/Horde/Imap/Client/Cache/Backend/Db.php)
does have a clear($lifetime) function, but I couldn't find where is it
called. Who is supposed to call that?
3 - it seems there's a missing ")" in that function at the DELETE
statement (line 320 at
https://github.com/horde/horde/blob/master/framework/Imap_Client/lib/Horde/Imap/Client/Cache/Backend/Db.php):
$purge = time() - $lifetime;
$sql = 'DELETE FROM %s WHERE messageid IN (SELECT messageid FROM %s
WHERE modified < ?';
foreach (array(self::MD_TABLE, self::MSG_TABLE) as $val) {
I've searched for an sql error in the logs and couldn't find one for
this statement, so maybe it's never called?
Thanks,
Joao S Veiga
More information about the horde
mailing list