[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