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
Show replies by date