2017-10-20 3 views
0

Java 응용 프로그램을 부두 9.2에서 실행하고 있습니다. 둘 다 동일한 버전의 부두를 사용합니다. 인덱서는 배포 후 응용 프로그램이 처음 시작될 때 실행됩니다. 나는 Netbeans에서 내 Windows 10 dev에 상자에 어떤 문제가 havent. 그것은 내가 SSH 액세스 및 제한된 권한을 가지고있는 리눅스 컴퓨터에 넣을 때 작동하지 않습니다.Windows에서 Lucene 인덱서가 작동하고 Linux에서 오류가 발생합니다.

자바 코드, 클래스 Person이 먼저 실행되며, 조직이 두 번째로 실행됩니다. 모두 같은 최대 절전 모드 세션에서

public static void reindexViaMassIndexer(Class<?> type, SessionFactory factory) { 
    Session session = factory.getCurrentSession(); 
    FullTextSession fullTextSession = Search.getFullTextSession(session); 
    MassIndexerProgressMonitor monitor = new SimpleIndexingProgressMonitor(); 

    try { 
     fullTextSession 
       .createIndexer(type) 
       .typesToIndexInParallel(1) 
       .batchSizeToLoadObjects(BATCH_SIZE) 
       .cacheMode(CacheMode.NORMAL) 
       .threadsToLoadObjects(10) 
       .idFetchSize(BATCH_SIZE) 
       .progressMonitor(monitor) 
       .startAndWait(); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(HibernateLuceneIndexer.class.getName()).log(Level.SEVERE, null, ex); 
    } 

} 

폼은 성공

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-search-orm</artifactId> 
     <version>5.2.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>4.3.9.Final</version> 
    </dependency> 

오류 출력을

17:48:00,188 ERROR LogErrorHandler:67 - HSEARCH000058: Exception occurred org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: [email protected]/tmp/cyberdex_files/org.vtarc.CyberConnections.backend.entity.Organization/write.lock: java.nio.channels.OverlappingFileLockException 
Primary Failure: 
    Entity org.vtarc.CyberConnections.backend.entity.Organization Id null Work Type org.hibernate.search.backend.PurgeAllLuceneWork 

org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: [email protected]/tmp/cyberdex_files/org.vtarc.CyberConnections.backend.entity.Organization/write.lock: java.nio.channels.OverlappingFileLockException 
    at org.apache.lucene.store.Lock.obtain(Lock.java:89) 
    at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:755) 
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.createNewIndexWriter(IndexWriterHolder.java:131) 
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.getIndexWriter(IndexWriterHolder.java:97) 
    at org.hibernate.search.backend.impl.lucene.AbstractWorkspaceImpl.getIndexWriter(AbstractWorkspaceImpl.java:112) 
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.applyUpdates(LuceneBackendQueueTask.java:81) 
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.run(LuceneBackendQueueTask.java:47) 
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.applyChangesets(SyncWorkProcessor.java:145) 
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.run(SyncWorkProcessor.java:135) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.nio.channels.OverlappingFileLockException 
    at sun.nio.ch.SharedFileLockTable.checkList(FileLockTable.java:255) 
    at sun.nio.ch.SharedFileLockTable.add(FileLockTable.java:152) 
    at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1108) 
    at java.nio.channels.FileChannel.tryLock(FileChannel.java:1155) 
    at org.apache.lucene.store.NativeFSLock.obtain(NativeFSLockFactory.java:169) 
    at org.apache.lucene.store.Lock.obtain(Lock.java:96) 
    ... 9 more 

사람 인덱스 파일, 조직은 실패했습니다. 부모 디렉토리는 jetty : jetty (user : group)입니다.

[[email protected] org.vtarc.CyberConnections.backend.entity.Person]$ ls -l 
-rw-r-----. 1 jetty jetty 1844 Oct 20 18:43 _9.fdt 
-rw-r-----. 1 jetty jetty 67 Oct 20 18:43 _9.fdx 
-rw-r-----. 1 jetty jetty 1310 Oct 20 18:43 _9.fnm 
-rw-r-----. 1 jetty jetty 3687 Oct 20 18:43 _9_Lucene41_0.doc 
-rw-r-----. 1 jetty jetty 4310 Oct 20 18:43 _9_Lucene41_0.pos 
-rw-r-----. 1 jetty jetty 20500 Oct 20 18:43 _9_Lucene41_0.tim 
-rw-r-----. 1 jetty jetty 576 Oct 20 18:43 _9_Lucene41_0.tip 
-rw-r-----. 1 jetty jetty 1530 Oct 20 18:43 _9.nvd 
-rw-r-----. 1 jetty jetty 171 Oct 20 18:43 _9.nvm 
-rw-r-----. 1 jetty jetty 386 Oct 20 18:43 _9.si 
-rw-r-----. 1 jetty jetty 102 Oct 20 18:43 segments_a 
-rw-r-----. 1 jetty jetty 36 Oct 20 18:43 segments.gen 
-rw-r-----. 1 jetty jetty  0 Oct 20 14:31 write.lock 
[[email protected] org.vtarc.CyberConnections.backend.entity.Person]$ cd ../org.vtarc.CyberConnections.backend.entity.Organization/ 
[[email protected] org.vtarc.CyberConnections.backend.entity.Organization]$ ls -l 
-rw-r-----. 1 jetty jetty 53 Oct 20 15:40 segments_5 
-rw-r-----. 1 jetty jetty 36 Oct 20 15:40 segments.gen 
-rw-r-----. 1 jetty jetty 0 Oct 20 14:31 write.lock 

다른 항목이 필요합니까?

답변

1

하나의 가능한 설명은 동일한 구성에 대해 여러 개의 SessionFactories/EntityManagerFactory를 생성하므로 Hibernate Search를 여러 번 인스턴스화하고 인덱스 파일에 잠금 충돌을 생성하는 것입니다. 그렇다면 잘하지 마십시오. 또한 Hibernate search: persist causes sometimes OverlappingFileLockException

다른 가능한 설명 : Hibernate Search의이 버전은 정말로 오래되었습니다. 그 이후로 해결 된 버그가 발생할 수 있습니다. 내가 해결할 수있는 몇 가지 버그가 있습니다. 예를 들어 다음과 같습니다. https://stackoverflow.com/a/46284827/6692043

+0

최대 절전 모드 세션을 2 곳에서 시작하지만 처음에는 서블릿이 초기화되고 인덱서 완료 후 닫힙니다. 두 번째 세션은 기본 UI가 나중에 초기화 될 때까지 시작되지 않습니다. 이 부분은 범위 안에 있습니다. – AFowler

+0

옵션 번호 2 또는 경쟁 조건 중 하나 인 것처럼 보입니다. 나는 로깅을 정보에서 디버그로 바꿨고 모든 것이 잘 돌아갔다. 따라서 로그가 많을수록 앱 실행 속도가 조금 느려지므로 모든 일이 성공적으로 이루어질 수 있습니다. 이 이론이 맞는지 다른 시험을 기다리고 있습니다. – AFowler

+0

@AFowler 세션 * 팩토리 * 세션에 대해 이야기하고있었습니다. 병렬로 여러 세션을 사용하면 잘 작동하지만 동일한 인덱스를 사용하는 여러 SessionFactory는 작동하지 않습니다. 이미 * 언급했듯이 이것은 Hibernate Search의 오래된 버전이며 버그가있을 수 있기 때문에 "* 잘 작동해야합니다"라고 말합니다. –

관련 문제