Dead Lock: delete with optimize
-------------------------------
Key: NHSR-37
URL: http://216.121.112.228/browse/NHSR-37
Project: NHibernate.Search
Issue Type: Bug
Components: Core
Affects Versions: 2.1.0
Reporter: RAB
Assignee: Paul Hatcher
Priority: Critical
With this option, the index is optimized for each transaction.
x.SetProperty("hibernate.search.default.optimizer.transaction_limit.max", "0");
Delete workflow:
• Delete-Work is performed.
• Delete-Work opens an index reader and lock the provider.
• Delete-Work is finished.
• CleanUp is performed.
• All index readers are closed.
• CleanUp starts the optimizer.
• Optimizer opens an index writer and lock the provider.
• Back on the CleanUp method.
• All index writer are closed.
• For each locked provider Monitor.Exit (provider) is called.
• Finish.
Monitor.Enter(provider) was executed twice but Monitor.Exit(provider) only once.
Delete the next time we have a dead lock.
Line 204 - 224 LockProvider in Backend\Workspace
Now:
private void LockProvider(IDirectoryProvider provider)
{
// Make sure to use a semaphore
object syncLock = searchFactoryImplementor.GetLockableDirectoryProviders()[provider];
Monitor.Enter(syncLock);
try
{
if (!lockedProviders.Contains(provider))
{
lockedProviders.Add(provider);
dpStatistics.Add(provider, new DPStatistics());
}
}
catch (Exception)
{
// NB This is correct here, we release the lock *only* if we have an error
Monitor.Exit(syncLock);
throw;
}
}
Solving:
private void LockProvider(IDirectoryProvider provider)
{
//Provider only lock once
if (!lockedProviders.Contains(provider))
{
// Make sure to use a semaphore
object syncLock = searchFactoryImplementor.GetLockableDirectoryProviders()[provider];
Monitor.Enter(syncLock);
try
{
lockedProviders.Add(provider);
dpStatistics.Add(provider, new DPStatistics());
}
catch (Exception)
{
// NB This is correct here, we release the lock *only* if we have an error
Monitor.Exit(syncLock);
throw;
}
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
|