【问题标题】:Infinispan search indexing error: LockedObtainFailedExceptionInfinispan 搜索索引错误:LockedObtainFailedException
【发布时间】:2013-08-04 02:58:40
【问题描述】:

我是 Infinispan 的新手,目前正在尝试使用搜索功能。我已经尝试密切关注文档。首先我更新我的 cache.xml:

<namedCache 
       name="cache">
       <transaction transactionMode="NON_TRANSACTIONAL"/>
           <indexing enabled="true" indexLocalOnly="true"/>
</namedCache>

我正在尝试编写一个查询,该查询将为我提供 search_value 属性的结果列表。这是我拥有的 Java 代码:

SearchManager searchManager = org.infinispan.query.Search.getSearchManager(cache);
Term t = new Term("attribute_name", search_value);
Query q  = new TermQuery(t);
CacheQuery cacheQuery = searchManager.getQuery(q);
List<Object> found = cacheQuery.list();

但是,当我尝试运行测试时,我收到了这个错误:

org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@.\Key\write.lock
    at org.apache.lucene.store.Lock.obtain(Lock.java:84)
    at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1098)
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.createNewIndexWriter(IndexWriterHolder.java:148)
    at org.hibernate.search.backend.impl.lucene.IndexWriterHolder.getIndexWriter(IndexWriterHolder.java:115)
    at org.hibernate.search.backend.impl.lucene.AbstractWorkspaceImpl.getIndexWriter(AbstractWorkspaceImpl.java:117)
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.applyUpdates(LuceneBackendQueueTask.java:101)
    at org.hibernate.search.backend.impl.lucene.LuceneBackendQueueTask.run(LuceneBackendQueueTask.java:67)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
13/08/02 14:08:25 ERROR lucene.LuceneBackendQueueTask: HSEARCH000072: Couldn't open the IndexWriter because of previous error: operation skipped, index ouf of sync!

是什么导致了写锁错误?我什至尝试仅使用索引配置删除 Java 部分,并且存在相同的错误。我没有正确配置缓存吗?任何帮助是极大的赞赏!谢谢!

【问题讨论】:

  • 奇怪,什么 Infinispan 版本?您在日志中看到任何其他错误吗?您正在精确执行哪些测试?
  • 我目前使用的是 Infinispan 6.0。我当前正在运行的测试将 1000 个条目插入到缓存中,并对键属性执行范围搜索。

标签: java lucene infinispan


【解决方案1】:

基于 Hibernate Search 和 Apache Lucene 的底层搜索引擎使用锁来请求对索引的独占写入访问。 假设您没有第二个应用程序尝试在同一个索引目录上写入,您可能在该目录中有一个因 JVM 终止或硬件崩溃而遗留的锁定文件。

在文件系统上查找与您正在使用的索引(索引)同名的目录并删除标记文件 write.lock(如果您确定没有进程正在写)。

您也可以配置不同的锁定策略,但请确保您不会自己开枪: LockFactory configuration

如果这不是来自先前杀死的 JVM 的遗留锁,那么可能是您正在运行多个 Infinispan 实例。确保它们将索引存储在单独的基本目录中(默认是您启动进程的当前路径)。

Directory configuration

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多