[hibernate-issues] [Hibernate-JIRA] Resolved: (HSEARCH-573) PerDPQueueProcessor forces release of lock even if not held - causes corrupt index

Emmanuel Bernard (JIRA) noreply at atlassian.com
Sat Nov 6 07:24:13 EDT 2010


     [ http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-573?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Emmanuel Bernard resolved HSEARCH-573.
--------------------------------------

         Assignee: Emmanuel Bernard  (was: Sanne Grinovero)
       Resolution: Fixed
    Fix Version/s:     (was: 3.3.0)
                   3.3.0.CR1

I've fixed the corruption issue.
The idea of being able to run MassIndexer in parallel is a whole different feature, I will open a dedicated jira for it.

> PerDPQueueProcessor forces release of lock even if not held - causes corrupt index
> ----------------------------------------------------------------------------------
>
>                 Key: HSEARCH-573
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-573
>             Project: Hibernate Search
>          Issue Type: Bug
>          Components: engine, massindexer
>    Affects Versions: 3.2.0.CR1, 3.2.0.Final, 3.2.1, 3.3.0.Alpha1
>         Environment: Hibernate 3.5.0-Final, Oracle 10g
>            Reporter: Christian Köberl
>            Assignee: Emmanuel Bernard
>             Fix For: 3.2.2, 3.3.0.CR1
>
>         Attachments: testHibernateSearchLockFailure.zip
>
>
> Occurs: when an indexed entity is modified while another thread is re-indexing the index for that entity
> Consequences: Hibernate Search calls "workspace.forceLockRelease();" in the catch-block of PerDPQueueProcessor#run - so the lock held by the batch indexer is forcefully released. That means the next entity index operation will write to the index causing the index to be corrupt.
> h2. First Exception - triggers forceLockRelease
> {noformat} 
> ERROR| Unexpected error in Lucene Backend:                                                                                      | at org.hibernate.search.backend.impl.lucene.PerDPQueueProcessor.run(PerDPQueueProcessor.java:118)
> org.hibernate.search.SearchException: Unable to open IndexWriter
> 	at org.hibernate.search.backend.Workspace.getIndexWriter(Workspace.java:159)
> 	at org.hibernate.search.backend.impl.lucene.PerDPQueueProcessor.run(PerDPQueueProcessor.java:103)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:432)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:284)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:678)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:703)
> 	at java.lang.Thread.run(Thread.java:811)
> Caused by: 
> org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: SimpleFSLock at C:\Temp\turntableLuceneIndex\LogEntry\lucene-74da319434c1dd9f133d63245791e1b4-write.lock
> 	at org.apache.lucene.store.Lock.obtain(Lock.java:85)
> 	at org.apache.lucene.index.IndexWriter.init(IndexWriter.java:1538)
> 	at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1067)
> 	at org.hibernate.search.backend.Workspace.getIndexWriter(Workspace.java:152)
> 	... 7 more
> WARN | going to force release of the IndexWriter lock                                                                           | at org.hibernate.search.backend.Workspace.forceLockRelease(Workspace.java:221)
> {noformat} 
> h2. second Exception - index is destroyed
> {noformat} 
> ERROR| Exception occurred org.hibernate.search.SearchException: Unable to add to Lucene index: class com.poi.egh.turntable.vehicle.domain.vehicle.Vehicle#200
> Primary Failure:
> 	Entity com.poi.egh.turntable.vehicle.domain.vehicle.Vehicle  Id 200  Work Type  org.hibernate.search.backend.AddLuceneWork
>  | at org.hibernate.search.exception.impl.LogErrorHandler.logError(LogErrorHandler.java:83)
> org.hibernate.search.SearchException: Unable to add to Lucene index: class com.poi.egh.turntable.vehicle.domain.vehicle.Vehicle#200
> 	at org.hibernate.search.backend.impl.lucene.works.AddWorkDelegate.performWork(AddWorkDelegate.java:81)
> 	at org.hibernate.search.backend.impl.lucene.PerDPQueueProcessor.run(PerDPQueueProcessor.java:106)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:432)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:284)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:678)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:703)
> 	at java.lang.Thread.run(Thread.java:811)
> Caused by: 
> java.io.IOException: Cannot overwrite: C:\temp\turntableLuceneIndex\vehicle\_5.fdt
> 	at org.apache.lucene.store.FSDirectory.initOutput(FSDirectory.java:362)
> 	at org.apache.lucene.store.SimpleFSDirectory.createOutput(SimpleFSDirectory.java:58)
> 	at org.apache.lucene.index.FieldsWriter.<init>(FieldsWriter.java:61)
> 	at org.apache.lucene.index.StoredFieldsWriter.initFieldsWriter(StoredFieldsWriter.java:66)
> 	at org.apache.lucene.index.StoredFieldsWriter.finishDocument(StoredFieldsWriter.java:144)
> 	at org.apache.lucene.index.StoredFieldsWriter$PerDoc.finish(StoredFieldsWriter.java:190)
> 	at org.apache.lucene.index.DocumentsWriter$WaitQueue.writeDocument(DocumentsWriter.java:1466)
> 	at org.apache.lucene.index.DocumentsWriter$WaitQueue.add(DocumentsWriter.java:1485)
> 	at org.apache.lucene.index.DocumentsWriter.finishDocument(DocumentsWriter.java:1089)
> 	at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:775)
> 	at org.apache.lucene.index.DocumentsWriter.addDocument(DocumentsWriter.java:750)
> 	at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:2454)
> 	at org.hibernate.search.backend.impl.lucene.works.AddWorkDelegate.performWork(AddWorkDelegate.java:77)
> 	... 7 more
> {noformat}

-- 
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.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       



More information about the hibernate-issues mailing list