キューに格納されたアプリケーション操作
要求された操作を実行するために更新 [インスタンス全体のロック/ミューテックス] を取得する必要がある CICD API は、更新 [インスタンス全体のロック/ミューテックス] が他の操作によって占有されている場合、却下されずにキューに格納されます。
Tokyo 以降、要求された操作を実行するために更新 [インスタンス全体のロック/ミューテックス] を取得する必要がある CICD API は、更新 [インスタンス全体のロック/ミューテックス] が他の操作によって占有されている場合、却下されずにキューに格納されます。CICD 要求を受信すると、対応する CICD サービスはアプリケーション操作 NowMQ (Now Message Queue) メッセージを作成し、NowMQ API を使用してキューにメッセージを挿入します。キューに格納されたメッセージは、スケジュール設定されたジョブによってポーリングされ、1 つずつ処理されるか、または並列に処理されます (並列処理が有効で操作が必要な基準を満たしている場合)。
アプリケーション操作の NowMQ メッセージ
アプリケーション操作の NowMQ メッセージの共通の件名は「sys.applifecycle.operation」です。アプリケーション操作 NowMQ メッセージのメッセージ本文には、実行トラッカーの sys_id (CICD API 応答で返される進捗 ID とも呼ばれる) を含む JSON オブジェクトが含まれています。操作タイプは、app_install、plugin_activation、batch_install、rollback、import_app、apply_changes のいずれかになります。また、プラグインをアクティブ化するためのプラグイン ID、アプリケーションをインストールするためのアプリ ID またはスコープなどの情報も含まれます。
アプリケーション操作の実行トラッカー
アプリケーション操作 NowMQ メッセージが作成されて挿入されると、対応する CICD 要求の実行トラッカーレコードが作成され、その sys_id が NowMQ メッセージの本文に追加されます。実行トラッカーは最初は [処理待ち] ステータスです。実行トラッカーの [詳細] 列には、操作のタイプに関する情報と CICD 要求の重要な入力パラメーターが含まれています。その [メッセージ] 列には、キューの位置に関する情報が含まれています。キューが一時停止されると、メッセージには「[アプリ操作キューが一時停止されました]」というプリフィックスが付加されます。
キュー実行時のサンプルアプリケーション操作実行トラッカー。
キューが一時停止された場合のサンプルアプリケーション操作実行トラッカー。
アプリケーション操作キューの管理
[すべてのアプリケーション] からの製品の手動インストールはキューに格納されますが、 [すべてのアプリケーション] または [アプリケーションマネージャー] などの UI からのアプリケーションの手動インストールはキューに格納されません。
インスタンスが大量の CICD 要求を受信、キューに格納、および処理していると、更新 [インスタンス全体のロック/ミューテックス] が不足し、UI からの手動インストールが必要になる場合があります。これが発生した場合、アドミニストレーターはアプリケーション操作キューを一時的に停止できます。
アドミニストレーターは、[システム診断] -> [アプリケーション操作キュー] UI ページでアプリケーション操作キューを管理できます。[操作キューのステータス] パネルで、アドミニストレーターはキューを一時停止または再開できます。アドミニストレーターは処理待ちの実行トラッカーをキャンセルすることもできます。これにより、アプリ操作キュー健全性監視ジョブによって、対応するキューに格納されたメッセージが NowMQ から最終的に削除されます。
[アプリケーション操作キュー] UI ページ
サンプル [アプリケーション操作キュー] UI ページ。アドミニストレーターは、[操作キューのステータス] でボタンをクリックして、キューを一時停止または再開できます。
[アプリケーション操作実行トラッカー] リストアイテムをクリックすると、実行トラッカーフォームが開きます。キューに格納されたメッセージがキュー内で処理待ちの場合、実行トラッカーのステータスを [キャンセル] に更新して変更を保存すると、対応するキューに格納された CICD 要求がキャンセルされます。注意:実行トラッカーのステータスが [実行中] の場合、CICD 要求はキャンセルできません。
アプリケーション操作キューとアップグレード期間
デフォルトでは、スケジュールされたアップグレードの 2 時間前に (sys プロパティ「com.glide.update_operation.queue_upgrade_window」でカスタマイズ可能)、アプリケーション操作キューはキューに格納されたメッセージの処理を停止します。
アプリケーション操作キューのステータスが [アップグレードが一時停止しました] に変更されます。このアップグレード期間中、新しい CICD 要求は引き続きキューに格納されます。
アップグレードが完了すると、アプリケーション操作キューはキューに格納されたメッセージの処理を自動的に再開します。
CICD パイプラインへの影響
CICD API の既存の要求/応答契約は変更されません。Tokyo より前のリリースで見られた、更新 [インスタンス全体のロック/ミューテックス] の競合に起因する操作の失敗は、発生しなくなります。要求は、ジョブタイプに応じて 1 つずつ、または並行してキューに格納されて処理されます。
キューへの格納をサポートする CICD API
- api/sn_cicd/app_repo/install
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/install
- api/sn_cicd/app_repo/rollback
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/rollback
- api/sn_cicd/sc/apply_changes
- api/sn_cicd/v1/sc/apply_changes
- api/sn_cicd/v2/sc/apply_changes
- api/sn_cicd/app/batch/install
- api/sn_cicd/sc/import
- api/sn_cicd/plugin/{plugin_id}/activate
- api/sn_cicd/plugin/{plugin_id}/rollback
アプリケーションのインストールとプラグインのアクティブ化を並列化
- api/sn_cicd/app_repo/install
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/install
- api/sn_cicd/plugin/{plugin_id}/activate
すべてのキュー処理は、[インスタンス全体のロック/ミューテックス] を取得し、キューに格納された操作が完了するまでこのミューテックスを保持します。このロックは [更新ミューテックス] と呼ばれ、そのステータスは [sys_mutex] テーブルで表示できます。この間、この同じロックを取得する操作 (アプリのインストール、プラグインのアクティブ化、ソースコントロール操作) は UI を介して実行できません。現在実行中のジョブが完了した後でも、[アプリケーション操作キュー] ページでキューを一時停止してロックを解除できます。
並列化はデフォルトで有効になっています。これはプロパティ com.glide.update_operation.parallel_operation_enabled を使用してオフにすることができます。この場合、すべての操作は以前のリリースと同様にキューから順番に実行されます。
並列化の制限
キュープロセッサーは、キューに格納されたジョブを実行できるかどうかを判断します。ジョブが実行可能な場合、最初に使用可能になった時点でインスタンスノードによって取得されるようにスケジュールされます。可能でない場合は、キューに戻され、プロセッサーは処理のためにキュー内の次のジョブを評価します。
並列実行できるジョブの最大数には制限があり、デフォルトは 2 です。このプロパティは glide.update.app_operation_queue.parallel.max で切り替えることができますが、利用可能なスレッド数に上限があることに注意してください。インストールを実行して並列化を増やすと、アクティブなユーザーのインスタンスが遅くなる可能性があります。
リソースロックの取得
- カスタマイズを含む同じスコープを共有する 2 つの操作。
- スキーマを変更する 2 つの操作。
- 修正スクリプトを含む任意の 2 つの操作。
キューの処理は、キューに格納された操作がこれらの基準を満たしているかどうかを判断し、必要に応じて処理不可能なジョブを保留します。操作が適切なリソースロックの取得を待機しているかどうかを反映して、ジョブの進捗状況 ID が更新されます。実行中の操作は、sys_padlock テーブル内のリソース (スコープ、スキーマ、存在する修正スクリプト) のリストを維持します。これらのロックの挿入と解除は、進行 ID によって確認できます。リソースに対して必要なロックを取得できないためにキューに格納されたジョブが保留されると、他のメッセージを処理できるようになります。クールダウン期間は、プロパティ com.glide.update_operation.job_cancel_timeout_minutes で変更できます。ジョブはまだキューにあり、[アプリケーション操作キュー] ページに表示されます。
com.glide.update_operation.max_failure_count プロパティで変更できます。