2016-09-23 2 views
1

Apache Lucene FileNotFoundException beim Start wegen schlechten Prozess stoppen

Beantwortet

Kunde die Anwendung zu starten, nachdem tun Wartung nicht in der Lage war; entweder eine Bereitstellung eines neuen WAR oder eine einfache Aktualisierung von Eigenschaften. Beim Start während der Bean-Initialisierung, würde erhalten sie folgendes:

Caused by: java.io.FileNotFoundException: /app/app-directory/servers/app-workdir/lucene-index/_3gp1.si (No such file or directory) 
at java.io.RandomAccessFile.open(Native Method) [rt.jar:1.7.0_80] 
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241) [rt.jar:1.7.0_80] 
at org.apache.lucene.store.MMapDirectory.openInput(MMapDirectory.java:193) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at org.apache.lucene.codecs.lucene46.Lucene46SegmentInfoReader.read(Lucene46SegmentInfoReader.java:49) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:340) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:404) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:843) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:694) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at org.apache.lucene.index.SegmentInfos.read(SegmentInfos.java:400) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:746) [lucene-core-4.7.2.jar:4.7.2 1586229 - rmuir - 2014-04-10 09:00:35] 
at proprietary class 
at proprietary class 
... 50 more 

Antwort

0

Entschlossen Ursache war die Art und Weise der Client ihre Anwendung Stop Shell-Skript entwickelt, die ein SIGKILL/„kill -9“ wurde die Ausstellung, die die Anwendung beendet während Lucene gerade dabei war, den Index zu aktualisieren.

Stattdessen verwenden wir SIGTERM/"kill -15", um die Anwendung zu signalisieren, wie wir es intern machen und wie wir dem Client empfehlen, den Stopp durchzuführen. Dies sollte Lucene erlauben, alle laufenden Prozesse zu beenden und den Index nicht zu beschädigen.

Die Sache, die uns zu dem führte, war die Tatsache, die stoppenden Meldungen nicht in der server.log gab es

09:10:41,354 INFO [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015877: Stopped deployment sqljdbc4.jar (runtime-name: sqljdbc4.jar) in 18998ms 
09:10:41,525 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) JBAS015877: Stopped deployment ojdbc6.jar (runtime-name: ojdbc6.jar) in 19169ms