Automated Hibernate Search index generation is slower than manual generation in EAP 6

Solution Unverified - Updated -

Issue

  • Index generation is signficantly slower (2 minutes) for automated index generation compared to hibernate.search.indexing_strategy=manual (2 seconds)
  • Using directory_provider=filesystem-master (to support clustering between two nodes)

"http-/192.168.1.2:8080-5", for thread dumps 5 - 10 (17:30:45 => 17:31:40) is executing the following:

"http-/192.168.1.2:8080-5" #202 daemon prio=5 os_prio=0 tid=0x000000001ea4a000 nid=0xe78 waiting on condition [0x0000000035bfb000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor.parkCurrentThread(SyncWorkProcessor.java:172)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor.submit(SyncWorkProcessor.java:104)
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessor.applyWork(LuceneBackendQueueProcessor.java:101)
    at org.hibernate.search.indexes.impl.DirectoryBasedIndexManager.performOperations(DirectoryBasedIndexManager.java:126)
    at org.hibernate.search.backend.impl.WorkQueuePerIndexSplitter.commitOperations(WorkQueuePerIndexSplitter.java:63)
    at org.hibernate.search.backend.impl.BatchedQueueingProcessor.performWorks(BatchedQueueingProcessor.java:99)
    at org.hibernate.search.backend.impl.PostTransactionWorkQueueSynchronization.afterCompletion(PostTransactionWorkQueueSynchronization.java:105)
    at org.hibernate.search.backend.impl.EventSourceTransactionContext$DelegateToSynchronizationOnAfterTx.doAfterTransactionCompletion(EventSourceTransactionContext.java:209)
    at org.hibernate.engine.spi.ActionQueue$AfterTransactionCompletionProcessQueue.afterTransactionCompletion(ActionQueue.java:792)
    ...
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:103)
    at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
    at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1189)
    ...
    at com.myco.Employee.saveEmployee(Employee.java:999)
        ...

And for this same thread dump set/time period, the following stack remains unchanged (think this is what is blocking completion of the above)

"Hibernate Search sync consumer thread for index <index_name_here>" #143 daemon prio=5 os_prio=0 tid=0x0000000026e1d000 nid=0xb40 runnable [0x000000002f92e000]
   java.lang.Thread.State: RUNNABLE
    at java.io.RandomAccessFile.open0(Native Method)
    at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:243)
    at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput$Descriptor.<init>(SimpleFSDirectory.java:71)
    at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.<init>(SimpleFSDirectory.java:98)
    at org.apache.lucene.store.SimpleFSDirectory.openInput(SimpleFSDirectory.java:58)
    at org.apache.lucene.index.SegmentReader.openNorms(SegmentReader.java:639)
    at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:121)
    at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:696)
    - locked <0x000000078cdf03e0> (a org.apache.lucene.index.IndexWriter$ReaderPool)
    at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:671)
    - locked <0x000000078cdf03e0> (a org.apache.lucene.index.IndexWriter$ReaderPool)
    at org.apache.lucene.index.BufferedDeletesStream.applyDeletes(BufferedDeletesStream.java:244)
    - locked <0x000000078cdfbe80> (a org.apache.lucene.index.BufferedDeletesStream)
    at org.apache.lucene.index.IndexWriter.doFlush(IndexWriter.java:3615)
    - locked <0x000000078cdeb2a8> (a org.apache.lucene.index.IndexWriter)
    at org.apache.lucene.index.IndexWriter.prepareCommit(IndexWriter.java:3376)
    - locked <0x000000078cdeb2a8> (a org.apache.lucene.index.IndexWriter)
    at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3485)
    - locked <0x000000078cdf0428> (a java.lang.Object)
    at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3467)
    at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3451)
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.commitIndexWriter(IndexWriterHolder.java:158)
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.commitIndexWriter(IndexWriterHolder.java:171)
    at org.hibernate.search.backend.impl.lucene.PerChangeSetCommitPolicy.onChangeSetApplied(PerChangeSetCommitPolicy.java:46)
    at org.hibernate.search.backend.impl.lucene.AbstractWorkspaceImpl.afterTransactionApplied(AbstractWorkspaceImpl.java:107)
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.applyUpdates(LuceneBackendQueueTask.java:124)
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.run(LuceneBackendQueueTask.java:67)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.applyChangesets(SyncWorkProcessor.java:162)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.run(SyncWorkProcessor.java:152)
    at java.lang.Thread.run(Thread.java:745)

Environment

  • Red Hat JBoss Enterprise Application Platform (EAP) 6.4
  • Hibernate Search

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.