lucene indexwriter锁机制

最近有个项目要用solr,solr是基于lucene的,今天在测试indexwriter时遇到了lock的问题:

测试代码:

importjava.io.File;importjava.io.IOException;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.index.IndexWriter;importorg.apache.lucene.index.IndexWriterConfig;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;importorg.apache.lucene.util.Version;publicclassTestLock{privateDirectorydir;publicstaticTestLockttt;publicstaticIndexWriterwriter2;privateAnalyzeranalyzer=newStandardAnalyzer(Version.LUCENE_48);privateIndexWriterConfigiwc=newIndexWriterConfig(Version.LUCENE_48,analyzer);publicvoidinit()throwsException{StringpathFile=”D://luceneindex”;try{dir=FSDirectory.open(newFile(pathFile));}catch(IOExceptione){thrownewRuntimeException(e);}IndexWriterwriter=getWriter();System.out.println(“initok,testIndexWriterlock”);LockTest(writer);//writer.close();}publicIndexWritergetWriter()throwsException{//analyzer.close();returnnewIndexWriter(dir,iwc);}publicvoidLockTest(IndexWriterw1){try{if(w1.isLocked(dir)){System.out.println(“write1locked”);IndexWriterConfigiwc1=newIndexWriterConfig(Version.LUCENE_48,analyzer);writer2=newIndexWriter(dir,iwc1);}else{System.out.println(“write1notlocked”);}}catch(Exceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){ttt=newTestLock();try{ttt.init();}catch(Exceptione){e.printStackTrace();}}}

报错信息:

org.apache.lucene.store.LockObtainFailedException:Lockobtaintimedout:NativeFSLock@D:\luceneindex\write.lock:java.nio.channels.OverlappingFileLockExceptionatorg.apache.lucene.store.Lock.obtain(Lock.java:89)atorg.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:710)atTestLock.LockTest(TestLock.java:38)atTestLock.init(TestLock.java:26)atTestLock.main(TestLock.java:51)Causedby:java.nio.channels.OverlappingFileLockExceptionatsun.nio.ch.SharedFileLockTable.checkList(UnknownSource)atsun.nio.ch.SharedFileLockTable.add(UnknownSource)atsun.nio.ch.FileChannelImpl.tryLock(UnknownSource)atjava.nio.channels.FileChannel.tryLock(UnknownSource)atorg.apache.lucene.store.NativeFSLock.obtain(NativeFSLockFactory.java:148)atorg.apache.lucene.store.Lock.obtain(Lock.java:100)…4more

从错误信息可以看到是IndexWriter获取锁出错导致,从堆栈信息可以看到,是在运行IndexWriter的构造方法时,涉及到锁的操作。

最好的感觉就是你什么都跟我说。

lucene indexwriter锁机制

相关文章:

你感兴趣的文章:

标签云: