[hibernate-commits] Hibernate SVN: r19186 - search/trunk/hibernate-search/src/main/java/org/hibernate/search/store.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Apr 8 05:09:23 EDT 2010


Author: sannegrinovero
Date: 2010-04-08 05:09:22 -0400 (Thu, 08 Apr 2010)
New Revision: 19186

Modified:
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
Log:
HSEARCH-492 FSMasterDirectoryProvider and FSSlaveDirectoryProvider don't shutdown the Executor

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	2010-04-08 07:08:28 UTC (rev 19185)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	2010-04-08 09:09:22 UTC (rev 19186)
@@ -29,7 +29,7 @@
 import java.util.Properties;
 import java.util.Timer;
 import java.util.TimerTask;
-import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.Lock;
@@ -77,6 +77,7 @@
 	private File indexDir;
 	private String directoryProviderName;
 	private Properties properties;
+	private TriggerTask task;
 
 	public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
 		this.properties = properties;
@@ -124,7 +125,7 @@
 		catch (IOException e) {
 			throw new SearchException( "Unable to initialize index: " + directoryProviderName, e );
 		}
-		TimerTask task = new FSMasterDirectoryProvider.TriggerTask( indexDir, sourceDir, this );
+		task = new FSMasterDirectoryProvider.TriggerTask( indexDir, sourceDir, this );
 		long period = DirectoryProviderHelper.getRefreshPeriod( properties, directoryProviderName );
 		timer.scheduleAtFixedRate( task, period, period );
 		this.current = currentLocal; //write to volatile to publish all state
@@ -166,6 +167,7 @@
 		@SuppressWarnings("unused")
 		int readCurrentState = current; //Another unneeded value, to ensure visibility of state protected by memory barrier
 		timer.cancel();
+		task.stop();
 		try {
 			directory.close();
 		}
@@ -176,7 +178,7 @@
 
 	private class TriggerTask extends TimerTask {
 
-		private final Executor executor;
+		private final ExecutorService executor;
 		private final FSMasterDirectoryProvider.CopyDirectory copyTask;
 
 		public TriggerTask(File source, File destination, DirectoryProvider<FSDirectory> directoryProvider) {
@@ -192,6 +194,10 @@
 				log.info( "Skipping directory synchronization, previous work still in progress: {}", indexName );
 			}
 		}
+		
+		public void stop() {
+			executor.shutdownNow();
+		}
 	}
 
 	private class CopyDirectory implements Runnable {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	2010-04-08 07:08:28 UTC (rev 19185)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	2010-04-08 09:09:22 UTC (rev 19186)
@@ -29,7 +29,7 @@
 import java.util.Properties;
 import java.util.Timer;
 import java.util.TimerTask;
-import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -72,6 +72,7 @@
 	private File indexDir;
 	private String directoryProviderName;
 	private Properties properties;
+	private TriggerTask task;
 
 	public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
 		this.properties = properties;
@@ -144,7 +145,7 @@
 		catch ( IOException e ) {
 			throw new SearchException( "Unable to initialize index: " + directoryProviderName, e );
 		}
-		TimerTask task = new TriggerTask( sourceIndexDir, indexDir );
+		task = new TriggerTask( sourceIndexDir, indexDir );
 		long period = DirectoryProviderHelper.getRefreshPeriod( properties, directoryProviderName );
 		timer.scheduleAtFixedRate( task, period, period );
 		this.current = currentToBe;
@@ -195,7 +196,7 @@
 
 	class TriggerTask extends TimerTask {
 
-		private final Executor executor;
+		private final ExecutorService executor;
 		private final CopyDirectory copyTask;
 
 		public TriggerTask(File sourceIndexDir, File destination) {
@@ -215,6 +216,10 @@
 				}
 			}
 		}
+		
+		public void stop() {
+			executor.shutdownNow();
+		}
 	}
 
 	class CopyDirectory implements Runnable {
@@ -301,6 +306,7 @@
 		@SuppressWarnings("unused")
 		int readCurrentState = current; //unneded value, but ensure visibility of state protected by memory barrier
 		timer.cancel();
+		task.stop();
 		try {
 			directory1.close();
 		}



More information about the hibernate-commits mailing list