[exo-jcr-commits] exo-jcr SVN: r5970 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl: dataflow/persistent and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Mar 27 07:10:28 EDT 2012


Author: tolusha
Date: 2012-03-27 07:10:27 -0400 (Tue, 27 Mar 2012)
New Revision: 5970

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
Log:
EXOJCR-1825: resume threads at stopping container

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java	2012-03-27 08:05:47 UTC (rev 5969)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java	2012-03-27 11:10:27 UTC (rev 5970)
@@ -1285,6 +1285,8 @@
          index.close();
          getContext().destroy();
          closed.set(true);
+         resumeWaitingThreads();
+         
          log.info("Index closed: " + path);
       }
    }
@@ -3375,7 +3377,7 @@
          closed.set(false);
          doInit();
 
-         latcher.get().countDown();
+         resumeWaitingThreads();
 
          isSuspended.set(false);
       }
@@ -3419,6 +3421,18 @@
    }
 
    /**
+    * Count down latcher which makes for resuming all
+    * waiting threads.
+    */
+   private void resumeWaitingThreads()
+   {
+      if (latcher.get() != null)
+      {
+         latcher.get().countDown();
+      }
+   }
+
+   /**
     * {@inheritDoc}
     */
    public int getPriority()

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java	2012-03-27 08:05:47 UTC (rev 5969)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java	2012-03-27 11:10:27 UTC (rev 5970)
@@ -142,9 +142,14 @@
    /**
     * Indicates if component suspended or not.
     */
-   protected final AtomicBoolean isSuspended = new AtomicBoolean(false);;
+   protected final AtomicBoolean isSuspended = new AtomicBoolean(false);
 
    /**
+    * Indicates if component stopped or not.
+    */
+   protected final AtomicBoolean isStopped = new AtomicBoolean(false);
+
+   /**
     * Allows to make all threads waiting until resume. 
     */
    protected final AtomicReference<CountDownLatch> latcher = new AtomicReference<CountDownLatch>();
@@ -973,6 +978,11 @@
 
    private void doSave(final ItemStateChangesLog changesLog) throws RepositoryException
    {
+      if (isStopped.get())
+      {
+         throw new RepositoryException("Data container is stopped");
+      }
+      
       ChangesLogWrapper logWrapper = new ChangesLogWrapper(changesLog);
 
       if (isTxAware())
@@ -2009,7 +2019,7 @@
       }
    }
 
-   private void resumeLocally() throws ResumeException
+   private void resumeLocally()
    {
       if (isSuspended.get())
       {
@@ -2043,14 +2053,7 @@
                   }
 
                   // node which was responsible for resuming leave the cluster, so resume component
-                  try
-                  {
-                     resumeLocally();
-                  }
-                  catch (ResumeException e)
-                  {
-                     LOG.error("Can not resume component", e);
-                  }
+                  resumeLocally();
                }
                catch (SecurityException e1)
                {
@@ -2366,6 +2369,8 @@
     */
    public void start()
    {
+      isStopped.set(false);
+
       try
       {
          this.cache.addListener(this);
@@ -2467,6 +2472,9 @@
       {
          cache.removeListener(this);
       }
+
+      isStopped.set(true);
+      resumeLocally();
    }
 
    /**



More information about the exo-jcr-commits mailing list