我需要java lucene启动代码来检查是否有一个锁定的write.lock
文件在JVM崩溃后留下,如果是,则需要解锁它。
在 JVM 崩溃后,lucene 没有机会正确释放 write.lock 文件。我需要的是java lucene代码来检查启动时的这种情况并顺利处理它,而不会抛出一个大胖LockObtainFailedException
。
正在使用 Lucene 版本 5。
这应该通过删除锁定文件在 Lucene 之外解决。
问题是新的 Lucene 实例无法安全地删除锁定文件,因为它无法判断锁定文件是否存在,因为现有实例仍在运行。
您需要的是一个外部应用程序,该应用程序可以测试以查看实例是否仍然存在。 您可以使用一些简单的脚本来构建它:
- 在"PID 文件"中捕获 Lucene 实例的 PID。
- 重新启动 Lucene 时,请检查现有的 PID 文件。 如果 PID 文件存在:
- 检查具有该 PID 的进程是否仍在运行; 例如使用
kill -0 <pid>
- 如果是,请检查它是否是Lucene过程;例如,通过对
ps ... <pid>
的输出进行模式匹配。
- 检查具有该 PID 的进程是否仍在运行; 例如使用
- 如果以上都不是,脚本可以删除锁定文件。
如果您的应用程序注册为服务(在 Linux 上),则各种"init"和服务管理服务(System V init、upstart、systemd)允许您以受控方式停止和启动服务。 您甚至可以将服务配置为在服务崩溃时重新启动。
第三种选择是使用现有的 HA(或类似)框架在 Lucene 崩溃时自动重新启动。 现有的框架可能会具有您自己从头开始开发的优势。