Problem
Nach dem Ausführen der Offline-Revisionsbereinigung (auch Offline-Tar-Verdichtung genannt) auf AEM 6.3, kann die folgende Ausnahme in der error.log gefunden werden:
05.10.2017 16:45:20.437 *ERROR* [FelixStartLevel] org.apache.jackrabbit.oak-segment-tar [org.apache.jackrabbit.oak.segment.SegmentNodeStoreService(208)] The activate method has thrown an exception (java.lang.IllegalStateException: This builder does not exist: null)java.lang.IllegalStateException: This builder does not exist: null
Die Instanz startet zu diesem Zeitpunkt nicht und die Durchführung einer Repository-Überprüfung („oak-run check“-Tool) kann diese Beschädigung nicht erkennen. Eine Reparatur ist nicht möglich, da die Daten durch die fehlerhafte Offline-Revisionsbereinigung gelöscht wurden.
Wenn Sie während der Offline-Revisionsbereinigung „Protokollierung aktiviert“ hatten, achten Sie auf folgende Meldung:
10:43:19.886 WARN [TarMK disk space check [/crx-quickstart/repository/segmentstore]] FileStore.java:701 Available disk space (14.6 GB) is too low, current repository size is approx. 59.4 GB
Wenn diese Nachricht später von der Nachricht gefolgt wird:
10:43:19.889 INFO [main] LoggingGCMonitor.java:45 TarMK GC #0: compaction succeeded in 2.034 min (122066 ms), after 0 cycles.
Dies bedeutet, dass der Fehler aufgetreten ist, das Repository beschädigt wurde und aus einer Sicherung wiederhergestellt werden muss.
Wenn die Nachricht stattdessen lautet:
11:01:27.312 WARN [main] LoggingGCMonitor.java:50 TarMK GC #0: compaction cancelled: Not enough disk space.
Dies bedeutet, dass der Fehler nicht aufgetreten ist und es liegt keine Beschädigung des Repository vor. (Die Offline-Revisionsbereinigung wurde nicht erfolgreich abgeschlossen, da nicht genügend Speicherplatz vorhanden war).
Umgebung
AEM 6.3 mit Oak 1.6 (und entsprechende Oak-Run-Version).
Betroffene Versionen
Oak 1.6.0, Oak 1.6.1, Oak 1.6.2, Oak 1.6.3, Oak 1.6.4, Oak 1.6.5, Oak 1.6.6, Oak 1.6.7.
Nicht betroffen.
Oak 1.0.x, Oak 1.2.x, Oak 1.4.x, Oak 1.7.x, Oak 1.8.x und höher. Online-Revisionsbereinigung ist nicht betroffen
Ursache
Die Offline-Revisionsbereinigung überwacht den verfügbaren Speicherplatz während der Ausführung. Sie bricht sich selber ab, wenn nicht genügend Speicherplatz zur Verfügung steht. Eine Fehlerbedingung wird von diesem Prozess nicht korrekt verarbeitet, was zu einer nicht behebbaren und möglicherweise schwerwiegenden Beschädigung des Repository führt.
Dies wird in OAK-7050 getrackt:
Die Offline-Revisionsbereinigung kann das Repository in einigen Fällen beschädigen: Wenn die Offline-Revisionsbereinigung vom CancelCompactionSupplier abgebrochen wird, wird der entsprechende Rückgabewert nicht korrekt an die Aufrufkette weitergegeben, was dazu führt, dass ein unvollständiger verdichteter Kopfstatus als verdichteter Kopfstatus festgelegt wird (anstatt verworfen zu werden).
Der Abbruch wird automatisch ausgelöst, wenn der verfügbare Speicherplatz weniger als 25 % der tatsächlichen Größe des Repositorys beträgt.
Lösung
Stellen Sie als Schadensminderung sicher, dass jederzeit genügend Speicherplatz verfügbar ist, wenn eine Offline-Revisionsbereinigung mit einer Version von Oak ausgeführt wird, die von diesem Problem betroffen ist.
Bevor die Verdichtung gestartet wird, muss genügend freier Speicherplatz vorhanden sein, um die aktuelle Repository-Größe doppelt zu speichern. Beim Ausführen der Verdichtung darf der verbleibende Speicherplatz zu keiner Zeit und auf keinen Fall unter 25 % der aktuellen Größe des Repositorys fallen.
Sie können diese Richtlinien in der offiziellen Dokumentation finden:
Was sind die Mindestanforderungen für den Festplattenspeicher und den Heap-Speicher beim Ausführen der Online-Revisionsbereinigung?
Der Speicherplatz wird während der Online-Revision ständig überwacht. Sollte der verfügbare Speicherplatz unter einen kritischen Wert fallen, wird der Vorgang abgebrochen. Der kritische Wert beträgt 25 % des aktuellen Speicherplatzbedarfs des Repository und ist nicht konfigurierbar.
Es wird empfohlen, die Größe der Festplatte mindestens zwei- oder dreimal größer als die Repository-Größe festzulegen, einschließlich des geschätzten Wachstums.
OAK-7050 ist behoben in der Oak-Run-Version 1.6.8, die am 8. Januar 2018 veröffentlicht werden soll: NPR-20768. Diese Version von Oak-Run sollte auf AEM 6.3 zum Ausführen der Offline-Revisionsbereinigung verwendet werden.
Wenn Sie vor der Veröffentlichung von Oak 1.6.8 die Offline-Revisionsbereinigung ausführen müssen und nicht garantieren können, dass der verfügbare Speicherplatz doppelt so groß ist wie die Größe des Repositorys, können Sie hier einen frühen Build herunterladen.
Es ist nicht notwendig, etwas auf der AEM-Seite zu aktualisieren, nur das externe Oak-Run-Tool ist betroffen.
Wir empfehlen dringend, immer die Version von Oak-Run zu verwenden, die der Version von Oak in der jeweiligen AEM-Instanz entspricht.
Um mit diesem Problem umzugehen, empfehlen wir:
- Aktualisieren Sie alle Instanzen auf Oak 1.6.8, sobald die entsprechende HF freigegeben wurde und verwenden Sie von nun an die passende Version von Oak-Run.
- Bis das Upgrade auf Oak 1.6.8 abgeschlossen ist, benutzen Sie Oak-Run 1.6.8 (oder Oak-Run-1.6.7-R1817912.jar vom obigen Link, bis 1.6.8 freigegeben ist) für die Offline-Verdichtung und verwenden Sie die passende Version von Oak-Run für alle anderen Befehle.