]
Sanne Grinovero commented on ISPN-5270:
---------------------------------------
You're definitely not supposed to store the indexes in the same Cache which is being
indexed, so I wouldn't mark it as critical.
The easy solution is to validate aggressively (throwing exceptions) to prevent users to
have indexing enabled on the caches which are being used to store an index.
If there's a nicer solution, that would be better but sounds complex.
Deadlock in InfinispanDirectoryProvider startup
-----------------------------------------------
Key: ISPN-5270
URL:
https://issues.jboss.org/browse/ISPN-5270
Project: Infinispan
Issue Type: Bug
Components: Embedded Querying
Affects Versions: 7.2.0.Alpha1, 7.1.1.Final
Reporter: Dan Berindei
Priority: Critical
Attachments: surefire.stacks, surefire2.stacks
The InfinispanDirectoryProvider tries to start the metadata, data, and locking caches
when it starts up, with {{DefaultCacheManager.startCaches()}}.
However, when one of these caches (e.g. the metadata cache) starts, the
{{LifecycleManager.cacheStarting()}}, which can then try to start the
InfinispanDirectoryProvider again:
{noformat}
"CacheStartThread,null,LuceneIndexesMetadata" prio=10 tid=0x00007f5f74484000
nid=0xe42 in Object.wait() [0x00007f5efff48000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000c2180000> (a
org.infinispan.manager.DefaultCacheManager$1)
at java.lang.Thread.join(Thread.java:1281)
- locked <0x00000000c2180000> (a org.infinispan.manager.DefaultCacheManager$1)
at java.lang.Thread.join(Thread.java:1355)
at org.infinispan.manager.DefaultCacheManager.startCaches(DefaultCacheManager.java:465)
at
org.hibernate.search.infinispan.spi.InfinispanDirectoryProvider.start(InfinispanDirectoryProvider.java:84)
at
org.hibernate.search.indexes.spi.DirectoryBasedIndexManager.initialize(DirectoryBasedIndexManager.java:88)
at
org.hibernate.search.indexes.impl.IndexManagerHolder.createIndexManager(IndexManagerHolder.java:256)
at
org.hibernate.search.indexes.impl.IndexManagerHolder.createIndexManager(IndexManagerHolder.java:513)
- locked <0x00000000ce6001d0> (a
org.hibernate.search.indexes.impl.IndexManagerHolder)
at
org.hibernate.search.indexes.impl.IndexManagerHolder.createIndexManagers(IndexManagerHolder.java:482)
at
org.hibernate.search.indexes.impl.IndexManagerHolder.buildEntityIndexBinding(IndexManagerHolder.java:91)
- locked <0x00000000ce6001d0> (a
org.hibernate.search.indexes.impl.IndexManagerHolder)
at
org.hibernate.search.spi.SearchIntegratorBuilder.initDocumentBuilders(SearchIntegratorBuilder.java:366)
at
org.hibernate.search.spi.SearchIntegratorBuilder.buildNewSearchFactory(SearchIntegratorBuilder.java:204)
at
org.hibernate.search.spi.SearchIntegratorBuilder.buildSearchIntegrator(SearchIntegratorBuilder.java:122)
at
org.hibernate.search.spi.SearchFactoryBuilder.buildSearchFactory(SearchFactoryBuilder.java:35)
at
org.infinispan.query.impl.LifecycleManager.getSearchFactory(LifecycleManager.java:260)
at org.infinispan.query.impl.LifecycleManager.cacheStarting(LifecycleManager.java:102)
at
org.infinispan.factories.ComponentRegistry.notifyCacheStarting(ComponentRegistry.java:230)
at org.infinispan.factories.ComponentRegistry.start(ComponentRegistry.java:216)
at org.infinispan.cache.impl.CacheImpl.start(CacheImpl.java:814)
at
org.infinispan.manager.DefaultCacheManager.wireAndStartCache(DefaultCacheManager.java:591)
at org.infinispan.manager.DefaultCacheManager.createCache(DefaultCacheManager.java:546)
at org.infinispan.manager.DefaultCacheManager.access$100(DefaultCacheManager.java:115)
at org.infinispan.manager.DefaultCacheManager$1.run(DefaultCacheManager.java:452)
{noformat}
This can hang the test, the attached thread dumps show {{EmbeddedCompatTest}} and
{{IndexCacheStopTest}}.