OSGi バンドルアクティベーションの競合により、ステージへのデプロイ中にAEM Cloud Manager パイプラインが停止する
この記事では、ステージへのデプロイのフェーズでAdobe Experience Manager(AEM)Cloud Manager パイプラインが停止し、OSGi バンドルアクティベーションの競合による利用できないインスタンスやクラス不足エラーが発生する問題を解決する方法について説明します。
説明 description
環境
Adobe Experience Manager(AEM)as a Cloud Service(AEMaaCS)(すべてのバージョン)
症状
- Cloud Manager パイプラインの実行は、エラーや進行状況が表示されないまま、長期間(1時間以上)ステージにデプロイするフェーズで停止したままになります。
- 影響を受ける環境は、デプロイメント後に使用できなくなります。
- 影響を受けるインスタンスにアクセスしようとすると、空白のログインページが表示されます。
- ログには、クラス不足エラー、
/libs/granite/core/content/login.htmlの HTTP 500 または 404 応答、ヘルスチェックの失敗が表示されます。 - AEMを再起動しても、問題は解決されません。再起動後もエラーは保持されます。
- この問題は、タイミングまたはレース条件を示すインスタンスのサブセットにのみ影響する可能性があります。
原因
デプロイメントで基盤となる共有ライブラリが更新され、OSGi フレームワークの更新がトリガーされました。 カスタムコンポーネントのアクティベーション方法は、この更新中にブロックリポジトリ(JCR)ログインを実行し、ロックの競合を引き起こし、依存バンドルをハーフスタート状態のままにします。 その結果、パイプラインが停止し、影響を受けるインスタンスが使用できなくなります。
解決策 resolution
問題を解決するには、次の手順に従います。
-
影響を受ける環境を特定:
-
Cloud Manager パイプライン実行ログとAEM インスタンスログを確認して、クラス不足エラーとバンドルアクティベーションのエラーを確認します。
-
デプロイメント後に使用できないインスタンスを確認します。
-
-
影響を受ける環境を復元:
-
利用可能な環境バックアップを使用して、影響を受けるインスタンスを既知の正常な状態に復元します。
-
すべてのインスタンスが運用状態に戻り、ログインページが正しく読み込まれることを検証します。
-
-
カスタム OSGi バンドルアクティベーションロジックを確認します。
-
カスタム OSGi コンポーネント、特に
onActivate()メソッドを持ち、アクティブ化中にリポジトリ (JCR) ログインまたはその他のブロック操作を実行するOSGi コンポーネントを調べます。 -
アクティベーションロジックをリファクタリングして、OSGi バンドルアクティベーション中の呼び出しやリポジトリログインのブロックを回避します。これらは、フレームワークの更新中にデッドロックやストールを引き起こす可能性があるからです。
-
リポジトリのログインや長時間実行する操作がアクティベーション方法で直接実行されるコードパターンを探します。
-
-
下位環境でのデプロイメントのテスト:
- 実稼動環境にデプロイする前に、同じパッケージを下位環境でテストして、問題が再発しないことを確認します。
-
今後の展開を監視する:
- 同様のストールが発生した場合は、ログとパイプライン実行の詳細を収集して、さらに分析します。
検証:
- 影響を受けるすべてのインスタンスが運用可能であり、復元およびコードの変更後にログインページが期待どおりに読み込まれることを確認します。