[
http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-492?pag...
]
Emmanuel Bernard commented on HSEARCH-492:
------------------------------------------
If we want to be flexible, we could add a property timeout_on_stop = [0|n|never]
But I tend to agree with Sanne, it's either we wait or we don't: a timeout is for
undecided people ;)
Let's have a second read at the copy algo but I'm almost certain it's safe to
kill it. In this case, the no_wait option is the most user friendly.
What would be the use case for explicitly waiting? If they are not strong enough,
let's just always kill.
FSMasterDirectoryProvider and FSSlaveDirectoryProvider don't
shutdown the Executor
----------------------------------------------------------------------------------
Key: HSEARCH-492
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-492
Project: Hibernate Search
Issue Type: Bug
Components: directory provider
Affects Versions: 3.1.1.GA
Environment: Java 1.6.0
Reporter: Sylvain Charton
Priority: Minor
Fix For: 3.2.0.CR1
I'm using Hibernate Search clustering feature in a stand alone Java application (not
a webapp).
My problem is the application never stops: many threads are still living.
Both FSMasterDirectoryProvider and FSSlaveDirectoryProvider use a Single Thread Executor
to perform the CopyTask.
When the FSSlaveDirectoryProvider.stop() is called, the timer is stopped, but not the
Executor in the TimerTask.
Consequence is the process can't stop, because some threads are still living,
endlessly.
This happens after the first CopyDirectory task was executed.
My fix was to copy this class in my code, and replace the Executor in TriggerTask class
by an ExecutorService in FSSlaveDirectoryProvider class.
The ExecutorService is initialized in the start() method:
{code:Java}this.executor = Executors.newSingleThreadExecutor() ;{code}
And properly shut down in the stop() method:
{code:java}
executor.shutdown();
boolean terminated = false ;
try{
terminated = executor.awaitTermination(20, TimeUnit.SECONDS);
} catch (InterruptedException e1) {
terminated = false ;
}
if (!terminated) {
executor.shutdownNow() ;
}
{code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira