调试Jackrabbit Lucene重新索引中止/失败

时间:2012-05-25 09:23:48

标签: lucene jackrabbit crx

我正在尝试在Jackrabbit 2.0实例(实际上是Day CRX 2.1实例)上重建Lucene搜索索引,以便我可以为相关性评分应用新的属性提升权重。但是它可以在同一点重复中止索引,计数3173000

  

* INFO * MultiIndex:索引... / content / xxxxxx / jcr:content(3173000)(MultiIndex.java,第1209行)
  * INFO * RepositoryImpl:关闭存储库...(RepositoryImpl.java,第1139行)

(公司名称已编辑)离开CRX Web实例

  

java.lang.IllegalStateException:存储库不可用。

日志中没有任何迹象表明它正在关闭。在任何更高级别的跟踪上,这两者之间没有更多的线。提到的路径存在并且不起眼。 Jackrabbit每100个节点记录一次路径,因此它可能是导致失败的下一个节点中的任何一个。

知道可能出错的地方,或者我如何调试它?

(不幸的是,这是我的一个深度问题之一 - 我不能告诉你更多,因为我不知道在哪里看。)

1 个答案:

答案 0 :(得分:0)

感谢评论中的每个人的建议。问题是我们有一些内容包含错误的HTML:特别是<li>,关闭与否,在<select><option>内:

<html><body><form>
  <select>
    <option value="1"><li></option>
  </select>
</form></body></html>

使用StackOverflowError杀死javax.swing.text.html.parser.Parser,这是一个Throwable,因此不会被Jackrabbit MultiIndex中的错误处理捕获。

reported the Parser crash to Oracle我会向Jackrabbit核心提出一个补丁,它会在索引代码周围添加额外的尝试/捕获,以至少记录确切的节点并出现问题,并在可能的情况下从错误中恢复并进行索引。在StackOverflowError的情况下,我认为这是可以恢复的:当我们回到异常处理代码时,堆栈已被展开到合理的深度。

在实践中,我不会被允许在这里生产修改过的Jackrabbit,但至少我已经识别并修复了不良内容,因此同样的问题不会让我们感到厌烦。