Hi folks: We are experiencing a thread starvation issue and are trying to track down the cause. It seems to happen when we use Hibernate L2 caching via Ignite.
The entity and association caches are transactional. It seems there is a deadlock somewhere, and based on the stack trace (below) we think it's related to the cache. The live threads involved when the starvation occurs share the stack trace. We are using Spring's HibernateTransactionManager. Do we need to have a JTA-compliant TX manager for this to work? Is it possible to use ATOMIC caches for Hibernate L2? We get an error saying TRANSACTIONAL caches are required. Dan t sun.misc.Unsafe.park(Native Method) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:967) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1283) at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:113) at org.apache.ignite.internal.processors.cache.GridCacheAdapter$21.op(GridCacheAdapter.java:2024) at org.apache.ignite.internal.processors.cache.GridCacheAdapter$21.op(GridCacheAdapter.java:2022) at org.apache.ignite.internal.processors.cache.GridCacheAdapter.syncOp(GridCacheAdapter.java:3955) at org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2022) at org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:1997) at org.apache.ignite.internal.processors.cache.GridCacheProxyImpl.put(GridCacheProxyImpl.java:470) at org.apache.ignite.cache.hibernate.HibernateReadWriteAccessStrategy.putFromLoad(HibernateReadWriteAccessStrategy.java:100) at org.apache.ignite.cache.hibernate.HibernateAccessStrategyAdapter.putFromLoad(HibernateAccessStrategyAdapter.java:130) at org.apache.ignite.cache.hibernate.HibernateAbstractRegionAccessStrategy.putFromLoad(HibernateAbstractRegionAccessStrategy.java:53) at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:221) at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144) at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.performTwoPhaseLoad(AbstractRowReader.java:244) at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:215) at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:140) at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:138) at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102) at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186) at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4126) at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:503) at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:468) at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:213) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:275) at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151) at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1106) at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:176) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2587) at org.hibernate.internal.SessionImpl.get(SessionImpl.java:991)
