問題点

AEM 6.3 でオフラインのリビジョンクリーンアップ(オフライン Tar 圧縮)を実行した後、error.log で次の例外が見つかる可能性があります。

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

この時点でインスタンスが開始されておらず、リポジトリチェック(「oak-run チェック」ツール)を実行してもこの破損を検出できません。失敗したオフラインのリビジョンクリーンアップによってデータが削除されているので、修復はできません。

オフラインのリビジョンクリーンアップ中に「ログを有効」にしていた場合、次のメッセージに注意します。

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

このメッセージの後に次のメッセージが続く場合:

10:43:19.889 INFO [main] LoggingGCMonitor.java:45 TarMK GC #0: compaction succeeded in 2.034 min (122066 ms), after 0 cycles.

これはこのエラーが発生したことを示します。リポジトリが破損しており、バックアップから復元する必要があります。

次のメッセージが見つかる場合:

11:01:27.312 WARN  [main] LoggingGCMonitor.java:50          TarMK GC #0: compaction cancelled: Not enough disk space.

これはこのエラーが発生しておらず、リポジトリが破損していないことを示します。ディスク領域が不足していたので、オフラインのリビジョンクリーンアップは正常に完了しませんでした。

環境

Oak 1.6(および対応する oak-run バージョン)を使用した AEM 6.3。

影響があるバージョン

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

影響がないバージョン

Oak 1.0.x、Oak 1.2.x、Oak 1.4.x、Oak 1.7.x、Oak 1.8.x およびそれ以上のバージョン。オンラインのリビジョンクリーンアップに影響はありません。

原因

オフラインのリビジョンクリーンアップでは、その実行中に使用可能なディスク領域が監視されます。  使用可能なディスク領域が十分にない場合、実行がキャンセルされます。  エラー状態がこのプロセスによって正常に処理されず、深刻な可能性がある復旧不可能なリポジトリの破損が発生します。

これは OAK-7050 で追跡されています。

オフラインのリビジョンクリーンアップを実行すると、リポジトリが破損する場合があります。オフラインのリビジョンクリーンアップが CancelCompactionSupplier によってキャンセルされると、対応する戻り値が呼び出しチェーンに正常に渡されません。その結果、圧縮された不完全なヘッド状態が、(破棄されるのではなく)圧縮されたヘッド状態として設定されます。

使用可能なディスク領域がリポジトリの実サイズの 25%未満である場合、キャンセルが自動的にトリガーされます。

解決策

この問題の影響を受ける Oak バージョンを使用してオフラインのリビジョンクリーンアップを実行する場合、対応策として常に使用可能なディスク領域を十分に確保します。

圧縮を開始する前に、現在の 2 倍のリポジトリサイズを格納できる十分な空き領域を用意する必要があります。  圧縮を実行する場合はいつでも、残りのディスク領域が現在のリポジトリサイズの 25%を下回らないようにする必要があります。

公式ドキュメントでは、以下のガイドラインを確認できます。


オンラインでのリビジョンクリーンアップを実行するときのディスク領域とヒープメモリの最小要件を教えてください。

オンラインでのリビジョンクリーンアップ中、ディスク領域は継続的に監視されます。使用可能なディスク領域が臨界値を下回ると、プロセスがキャンセルされます。臨界値はリポジトリの現在のディスクフットプリントの 25%で、設定はできません。

ディスクのサイズは、予想される増加分を含めてリポジトリサイズの 2 倍または 3 倍以上にすることをお勧めします。


OAK-7050 は、2018 年 1 月 8 日のリリースを目標としている oak-run バージョン 1.6.8 で修正されます(NPR-20768)。  AEM 6.3 では、このバージョンの oak-run をオフラインのリビジョンクリーンアップの実行に使用します。

Oak 1.6.8 のリリース前にオフラインのリビジョンクリーンアップを実行する必要があり、なおかつリポジトリサイズの 2 倍を上回る使用可能なディスク領域を確保できない場合、こちらから早期ビルド版をダウンロードできます。

AEM 側で何かを更新する必要ありません。影響があるのは外部の oak-run ツールだけです。

注意:

各 AEM インスタンスでは Oak のバージョンに一致するバージョンの oak-run を常に使用することを強くお勧めします。

この問題への対応方法として以下をお勧めします。

  1. 対応する HF がリリースされたらすべてのインスタンスを Oak 1.6.8 にアップグレードし、それから一致するバージョンの oak-run を使用し続けます。
  2. Oak 1.6.8 へのアップグレードが完了するまで、オフライン圧縮には oak-run 1.6.8 を使用し(または、1.6.8 がリリースされるまでは上記のリンクの oak-run-1.6.7-R1817912.jar を使用し)、他のすべてのコマンドには一致するバージョンの oak-run を使用します。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー