[horde] IMP IMAP DB Cache backend lifetime
Joao S Veiga
jsveiga at rf.com.br
Thu Aug 31 11:53:38 UTC 2017
----- Message from Joao S Veiga <jsveiga at rf.com.br> ---------
>> ----- Message from Federico Giannici <giannici at neomedia.it> ---------
>>>
>>> I think that a possible simple solution could be to add a
>>> "created" field the horde_imap_client_message table automatically
>>> set to the current timestamp at the INSERT. Then we could use this
>>> field to purge the messages that were cached since a lot (maybe a
>>> month?). In this way no messages would remain in cache forever,
>>> but eventually the reload of the message would happen only after a
>>> lot of time (and in a "time distributed" way).
>>>
>>> What do you think?
>>>
>>
>> Hi Federico,
>>
>> (Did you fix the Db.php script first (the missing ")")? That would
>> prevent the lifetime limit to work.)
>>
>> The horde_imap_client_message (and the horde_imap_client_metadata)
>> are related to the horde_imap_client_data by the messageid field,
>> and horde_imap_client_data already (should) have timestamps, so
>> when clearing the tables by timestamp, the old _message/_metadata
>> entries should go away too. The script uses the
>> horde_imap_client_data 'modified' timestamp to do that, but...
>
> Oops, sorry; I see what you mean; the update timestamp for
> horde_imap_client_data will be renewed, but there will still be very
> old entries in horde_imap_client_message that will stay there unless
> the actual mailbox gets "old" enough to expire.
>
I'll experiment with this in my system:
ALTER TABLE `horde`.`horde_imap_client_metadata`
ADD COLUMN `created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP AFTER
`messageid`;
ALTER TABLE `horde`.`horde_imap_client_message`
ADD COLUMN `created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP AFTER
`messageid`;
(you might want to set all 'created' values to the current timestamp
or purge the cache completely, or previous entries will have NULL
timestamps)
And I added this to the cleaning perl script:
$db->prepare("delete from horde_imap_client_message where created <
from_unixtime(?);");
$q->execute($old);
$q = $db->prepare("delete from horde_imap_client_metadata where
created < from_unixtime(?);");
$q->execute($old);
These require no changes in the horde scripts - but might be a problem
if upgrade scripts alter the table.
best regards,
Joao
More information about the horde
mailing list