[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