AEMでOakState0002とブランチリセットエラーが発生してSling ジョブが失敗する
フォルダー間でアセットを移動するカスタム Sling ジョブが、OakState0002などのJCR コミットエラーとブランチリセットエラーで断続的に失敗します。 ジョブは、長期にわたって有効なセッションと大規模なコミット操作を使用して同時読み込み中にアセットを処理するため、繰り返しコミット失敗が発生します。 この問題を解決するには、セッション処理をリファクタリングし、再試行ロジックを実装します。
説明 description
環境
Adobe Experience Manager as a Cloud Service (AEMaaCS)
問題/症状
-
カスタム Sling ジョブ
com.adidasedamprogram.core.job.MoveAssetsFromUploadToIngestionAreaJobは、フォルダー間でアセットを移動する際に、オーサーインスタンスで実行するのに断続的に失敗します。 -
取り込みピーク時の
move_assets_upload_to_ingestion/queue/1..4にキューの深さが増加した一時的なバックログフォーム。 -
膨大なアセットを処理している間に、特定の期間にジョブアクティビティが急増し、一貫性のない実行につながります。
-
エラーログには、次のようなコミットエラーが表示されます。
code language-none java.lang.IllegalStateException: Branch with failed reset Caused by: CommitFailedException: OakOak0100: Branch reset failed ... OakState0002: Conflicting concurrent change -
これらのエラーは分離されたままであり、プラットフォーム全体での停止を示すものではありませんが、アセット処理における一時的な遅延の原因となります。
根本原因
根本的な原因は、Oak コミットの競合に対するリフレッシュと再試行の処理を行わずに、同時読み込み時に長期間有効なJCR セッションと大規模なコミットを使用したことです。 この結果、OakState0002やブランチリセットエラーなどの一時的なコミットエラーが発生します。
解決策 resolution
この問題を解決するには、次の手順に従います。
- カスタム Sling ジョブの実装をリファクタリングして、各アセットまたはアセットの小さなバッチに対して短期的なセッションを使用することで、長期間有効なJCR セッションを回避し、セッションスコープを最小限に抑え、競合を減らします。
- 大量の一括操作を実行する代わりに、アセットごとに変更をコミットするか、小さなバッチでコミットすることで、各コミットのサイズを小さくします。これは、同時読み込み時にコミットの失敗を防ぐのに役立ちます。
- OakState0002や分岐リセットエラーなどのエラーを検出し、
session.refresh(true)を使用してセッションを更新し、限られた回数だけコミットを再試行することで、コミット操作に対する限定的な再試行ロジックを実装します。 - 再試行ロジックが厳格な制限を適用して、無限ループや過剰な再試行を防ぎ、システムの安定性を維持し、不要なリソースの使用を回避するようにします。
- これらの変更を適用した後、ジョブのキューの深さとエラーログを監視して、コミット競合の頻度が減少し、ジョブ処理が安定することを確認します。
- 基盤となるAEM環境とコンテナの健全性は関係しないため、プラットフォームやインフラストラクチャを変更する必要はありません。