[infinispan-dev] Evaluating Infinispan

Manik Surtani manik at jboss.org
Thu Sep 24 10:24:35 EDT 2009


Hi Krzysztof, good to see that you're looking at Infinispan as well,  
now!  :-)

On 17 Sep 2009, at 10:16, Krzysztof Sobolewski wrote:

> I'm currently evaluating Infinispan for our internal project  
> (porting from
> JBoss Cache) and I have some comments/issues - and probably more to  
> come. I
> figure I should post them before Infinispan leaves beta stage :) If  
> they're
> JIRA-worthy, I can also repost them there.

Great - feedback is always appreciated.

> First, something small: TreeCache.getCache() (I obviously first try  
> to use the
> tree compatibility layer) returns Cache<K,V>, which is obviously  
> wrong, as the
> TreeCacheImpl returns Cache (raw type) which is in fact
> AtomicMapCache<NodeKey,Object> (and really, really in fact it's
> AtomicMapCache<NodeKey,AtomicMap<?,?>).

Interestingly, this is the first bit of feedback I've got on the  
TreeCache compat layer.  Most folks I know are using the Map API  
directly.

Yes, agreed.  It should really return Cache<?, ?>, or rather whatever  
was passed in to the TreeCacheImpl constructor.

I've logged this as https://jira.jboss.org/jira/browse/ISPN-195

> As a side note, I don't really like how the getAtomicMap() overrides  
> the V
> type parameter of Cache. The cache is supposed to store and return  
> V's, but
> this methods forcibly puts AtomicHashMap as values. I say this will  
> lead to
> problems. Maybe it's better to make AtomicMapCache<K> (one type  
> parameter)
> extend Cache<K,AtomicMap<?,?>> (maybe even with optional type  
> parameters for
> AtomicMap).

Yes, we did consider this, but that would mean that this is all you  
use the cache for.  E.g., if someone comes up with a more generic  
Cache<String, Object>, he will be restricted from using AtomicMaps  
with this cache.  Perhaps this is a valid restriction, the jury is  
out.  What do folks think?

> As another side note, I can see that you're not big fans of  
> generics :)

I actually hate them.  :-)  I think they are completely broken in the  
way the JDK implements them, and this is why for internal classes and  
APIs, I choose to leave them out completely (InternalCacheEntry, for  
example).  I do see their value in public API though.

> Second issue I wanted to mention, which also exists in JBoss Cache  
> but I never
> got around to reporting a bug, is that the JDBC cache stores use lock
> striping. I've run into *lots* of trouble with lock striping (here  
> and in MVCC
> lock manager) so I always turn it off (or reimplement, if there's no  
> option for
> that). Increasing the concurrency level is not an option because  
> whatever it
> is, it's still not correct (as in: non-zero probability of  
> collision), at
> least for my use cases.
>
> So... Can I ask for an option to not do lock striping... anywhere? :)

You have an option to disable lock striping.  See  
Configuration.setUseLockStriping(), or, using XML, see all.xml [1],  
look at the 'lockPerEntry' named cache.

[1] http://bit.ly/4xoHqA

Cheers
--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org







More information about the infinispan-dev mailing list