[exo-jcr-commits] exo-jcr SVN: r4492 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query: jbosscache and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Jun 9 05:40:02 EDT 2011
Author: nzamosenchuk
Date: 2011-06-09 05:40:02 -0400 (Thu, 09 Jun 2011)
New Revision: 4492
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/IndexerCacheStore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java
Log:
EXOJCR-1345 : dispatching ViewChanged in JBC and ISPN asynchronously
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/IndexerCacheStore.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/IndexerCacheStore.java 2011-06-09 08:25:41 UTC (rev 4491)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ispn/IndexerCacheStore.java 2011-06-09 09:40:02 UTC (rev 4492)
@@ -141,17 +141,26 @@
* @param newActiveState true if the cache just became the coordinator, false if the cache stopped being the
* coordinator.
*/
- protected void activeStatusChanged(boolean newActiveState)
+ protected void activeStatusChanged(final boolean newActiveState)
{
- coordinator = newActiveState;
+ // originally came from EXOJCR-1345.
+ // Deadlock occurs inside JGroups, if calling some operations inside the same thread,
+ // invoking ViewChanged. That's why, need to perform operation in separated async tread.
+ new Thread(new Runnable()
+ {
+ public void run()
+ {
+ coordinator = newActiveState;
- getModeHandler().setMode(coordinator ? IndexerIoMode.READ_WRITE : IndexerIoMode.READ_ONLY);
- log.info("Set indexer io mode to:" + (coordinator ? IndexerIoMode.READ_WRITE : IndexerIoMode.READ_ONLY));
+ getModeHandler().setMode(coordinator ? IndexerIoMode.READ_WRITE : IndexerIoMode.READ_ONLY);
+ log.info("Set indexer io mode to:" + (coordinator ? IndexerIoMode.READ_WRITE : IndexerIoMode.READ_ONLY));
- if (coordinator)
- {
- doPushState();
- }
+ if (coordinator)
+ {
+ doPushState();
+ }
+ }
+ }, "JCR Indexer ActiveStatusChanged-handler").start();
}
/**
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java 2011-06-09 08:25:41 UTC (rev 4491)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/IndexerSingletonStoreCacheLoader.java 2011-06-09 09:40:02 UTC (rev 4492)
@@ -45,12 +45,28 @@
* @see org.jboss.cache.loader.SingletonStoreCacheLoader#activeStatusChanged(boolean)
*/
@Override
- protected void activeStatusChanged(boolean newActiveState) throws PushStateException
+ protected void activeStatusChanged(final boolean newActiveState) throws PushStateException
{
- // at first change indexer mode
- setIndexerMode(newActiveState);
- // and them push states if needed
- super.activeStatusChanged(newActiveState);
+ // originally came from EXOJCR-1345.
+ // Deadlock occurs inside JGroups, if calling some operations inside the same thread,
+ // invoking ViewChanged. That's why, need to perform operation in separated async tread.
+ new Thread(new Runnable()
+ {
+ public void run()
+ {
+ // at first change indexer mode
+ setIndexerMode(newActiveState);
+ // and them push states if needed
+ try
+ {
+ IndexerSingletonStoreCacheLoader.super.activeStatusChanged(newActiveState);
+ }
+ catch (PushStateException e)
+ {
+ log.error("Failed to initiate PushState.", e);
+ }
+ }
+ }, "JCR Indexer ActiveStatusChanged-handler").start();
}
@Override
More information about the exo-jcr-commits
mailing list