Possible race condition using org.apache.ibatis.cache.Cache#hasKey ?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Possible race condition using org.apache.ibatis.cache.Cache#hasKey ?

Simone Tripodi
Hi all guys,
since I've been integrating 3rd part caching solutions[1] in iBatis3,
I started thinking about the use of method in the Cache interface:

org.apache.ibatis.cache.Cache#hasKey()

Honestly, I'm a little scared about the use for a key check, as it may
expire between checking for the key, and whatever you want to do with
the stored object, and produce a race condition :(
I'd propose to remove this method, and let to the layer built on top
of cache interface checking if the retrieved object is not null.

Indeed, some distribuited and scalable caching servers like
memcached[2] don't provide methods to key checking, because of the
reason above. Moreover, in this scenario, the only way I have to check
if a key is present in the cache, is getting the object, and checking
it is null. But let's suppose I've a cached Object of 10M size,
checking first and then getting if present, causes 20M net traffic :(

Please don't get me wrong, I don't want to criticize the excellent
work you've been doing - I don't use different persistence layer than
iBatis! - but since iBatis is largely used in production environments,
I would encourage the community to be sensible to this kind of
potential issues.

What do you think about it? Have a nice end of the year party and see
you next year! :D
Best regards,
Simone Tripodi

[1] http://ibaguice.googlecode.com/svn/site/1.0-SNAPSHOT/caching.html
[2] http://memcached.org/

--
http://www.google.com/profiles/simone.tripodi

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]