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();
}
/**
Show replies by date