[infinispan-issues] [JBoss JIRA] (ISPN-4563) Race condition in JCache creation for interceptors
Sebastian Łaskawiec (JIRA)
issues at jboss.org
Tue Sep 16 05:29:03 EDT 2014
[ https://issues.jboss.org/browse/ISPN-4563?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13002719#comment-13002719 ]
Sebastian Łaskawiec commented on ISPN-4563:
-------------------------------------------
The root cause of this bug is in JCacheManager.java:
{code}
public <K, V, C extends Configuration<K, V>> Cache<K, V> createCache(
String cacheName, C configuration) {
...
// re-register attempt with different configuration
if (cache.getConfiguration(Configuration.class).equals(configuration)) {
throw log.cacheAlreadyRegistered(cacheName,
cache.getConfiguration(Configuration.class), configuration);
}
{code}
Above code should be replaced by:
{code}
public <K, V, C extends Configuration<K, V>> Cache<K, V> createCache(
String cacheName, C configuration) {
...
// re-register attempt with different configuration
// Note that configuration should not be equal...
if (!cache.getConfiguration(Configuration.class).equals(configuration)) {
throw log.cacheAlreadyRegistered(cacheName,
cache.getConfiguration(Configuration.class), configuration);
}
{code}
However with this change, JCache testing suite (org.jsr107.tck.CacheManagerTest#getOrCreateCache_Same()) blows out:
{code}
@Test
public void createCache_Same() {
String name = "c1";
CacheManager cacheManager = getCacheManager();
try {
cacheManager.createCache(name, new MutableConfiguration());
Cache cache1 = cacheManager.getCache(name);
cacheManager.createCache(name, new MutableConfiguration());
Cache cache2 = cacheManager.getCache(name);
fail();
} catch (CacheException exception) {
//expected
}
}
{code}
This happens because configurations created by {{new MutableConfiguration()}} are logically equal ({{config1.equals(config2)}}).
There are two solutions here:
* Compare configurations using {{==}} rather then {{equals}} method (I don't think we should follow this direction).
* There is a mistake in JCache testing suite and it should be fixed in the upstream.
> Race condition in JCache creation for interceptors
> --------------------------------------------------
>
> Key: ISPN-4563
> URL: https://issues.jboss.org/browse/ISPN-4563
> Project: Infinispan
> Issue Type: Bug
> Components: CDI Integration
> Affects Versions: 6.0.2.Final
> Reporter: Elias Ross
> Assignee: Sebastian Łaskawiec
> Fix For: 7.0.0.Final
>
>
> Intercepted methods, annotated like @CacheResult, if called from multiple threads, can attempt to create multiple caches.
> Work-around is to create the cache in a @PostContruct block.
--
This message was sent by Atlassian JIRA
(v6.3.1#6329)
More information about the infinispan-issues
mailing list