Re: Expiring Kolab objects cache in Roundcube

Jeroen van Meeuwen <[email protected]>
Newsgroups gmane.comp.kde.devel.kolab,gmane.comp.kde.kolab.devel
Message-ID <[email protected]>
On Saturday, June 09, 2012 02:39:04 PM Thomas Brüderli wrote:
> Hello
> 

Hi Thomas,

> The new storage layer for Kolab 3.0 in Roundcube slowly grows up and it
> also provides caching of Kolab objects in the local (My)SQL database. The
> cache is persistent and synchronized with the IMAP mailbox on every access.
> This means that all objects of each resource every accessed through the web
> client have a copy in the local cache. You can easily imagine the growth of
> that cache. So we need some strategy how to expire and remove cache objects
> in a way that keeps good balance between access speed and storage volume.
> Here are a few thoughts how that might be achieved:
> 
> 1) Clear user's cache when a user terminates a session
> 2) Cronjob which removes cache objects older than T - <cache-lifetime>
> 3) Same as 2) but triggered randomly on web client requests (no cronjob)
> 
> Of course every one of these approaches has it's pros and cons. Even the
> removal of objects being in cache for a long time isn't always desired.
> Imagine contacts in an address book which is accessed daily. But that's
> probably a trade-off we have to live with because on the other hand, the
> web client will not be notified when a user is removed from the IMAP
> backend and will therefore never access the cached objects again. So
> removing objects added to the case some time ago is mandatory even if
> they'll be re-added a short time after.
> 
> Also 1) isn't perfect for several reasons: this would require a complete
> re-sync on every login which can easily take longer than just a few
> seconds. And, even more important, caches are shared amongst users. If user
> A has shared a folder with user B, its objects are only cached once and
> both users access the same records. Thus clearing the cache when user A
> logs out would cause user B's session to re-sync the entire folder.
> 
> I'd therefore propose either 2) or 3). Depending on how easy/complicated it
> would be to install a cron job within the Kolab setup 2) would definitely
> be better because it's entirely independent from web server requests. For
> 3) I had in mind to just call a decoupled shell command in order to not
> block the http request which triggered the cache cleanup process.
> 
> Any comments are welcome!
> 

Concerning user mutations (change of primary unique ID / result attribute used 
as identifier in Roundcube, currently the first 'mail' attribute value, or 
user deletion), I'm already in the progress of building a Roundcube plugin to 
the Kolab daemon, that can hook itself up to the database and make those 
changes.

It'd be easiest if we were able to develop a command-line script that can 
synchronize cache* table entries with what exists in the users table at that 
moment, so that the daemon can restrict itself to a limited number of columns 
to update in the users table, and a simple delete on the users table.

I think this might both help in pre-seeding caches for a user's (large) 
folders, as well as expiring cache* table entries.

I think also a user's last login timestamp could be taken into account, if 
expiry was to be sought past a cache lifetime.

Kind regards,

Jeroen van Meeuwen

-- 
Systems Architect, Kolab Systems AG

e: vanmeeuwen at kolabsys.com
m: +44 74 2516 3817
w: http://www.kolabsys.com

pgp: 9342 BF08

_______________________________________________
Kolab-devel mailing list
[email protected]
https://www.intevation.de/mailman/listinfo/kolab-devel
signature.asc (application/pgp-signature, 198 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (GNU/Linux)

iEYEABECAAYFAk/V4H4ACgkQKN6f2pNCvwjuvACgvRoP9PXPqbrCH4lhodE4Ijjd
RW0An22oYbCxewCCIU7UszXOpW82Er+5
=yP96
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.