PriorityTask
APIを制御できます。
この章の内容は次のとおりです。
PriorityTask
インタフェースを使用すると、スレッド・プールを使用してタスク実行のスケジュールを指定する順序を制御したり、タスク実行時間を指定された限度まで保持できます。親トピック: データ・グリッド操作の実行
親トピック: スレッド実行の管理
CacheStore
内のライトスルーがブロックされ、構成済のタイムアウト値を超えた場合、Coherenceタスク・マネージャはスレッドの実行を中断しようとし、例外がスローされます。同様に、構成したタイムアウトを問合せや集計が超えた場合も、中断されて例外がスローされます。この機能を使用するアプリケーションでは、これらの例外を正常に処理してシステムの整合性を確保する必要があります。この構成はサービスごとに実行されるため、この機能を考慮せずに設計されている既存のキャッシュやサービスでこれらの設定を変更する場合は、細心の注意を払う必要があります。この項には次のトピックが含まれます:
<request-timeout>
、<task-timeout>
、<task-hung-threshold>
の各要素を使用して、サービスのワーカー・スレッドの実行タイムアウトを構成します。このタイムアウト設定はキャッシュ構成ファイルでサービス用に構成され、コマンド行パラメータを使用して設定することも可能です。サービス・ガーディアンの使用も参照してください。
表31-1では、実行タイムアウトの要素について説明します。
表31-1 実行タイムアウトの要素
要素名 | 説明 |
---|---|
< |
タイムアウト可能なリクエスト(たとえば、
値に単位が含まれていない場合は、ミリ秒が単位として適用されます。有効な値は、正の整数またはゼロです(ゼロの場合は、デフォルト・タイムアウトがないことを示します)。デフォルト値は、クラスタ化クライアント・リクエストの場合は無限タイムアウト( |
< |
タイムアウト可能なタスク(たとえば、 |
< |
タスクが実行できる時間をミリ秒単位で指定します。この時間を超過すると、ハングしたと見なされます。ノート: ポストされたタスクがまだ開始されていない場合は、ハングと見なされません。この属性は、スレッド・プールが使用されている( |
次の分散キャッシュの例では、サービスの動的なスレッド・プール、タスク・タイムアウト(5000
ミリ秒)およびタスク・ハングしきい値(10000
ミリ秒)を明示的に構成します。
<caching-schemes> <distributed-scheme> <scheme-name>example-distributed</scheme-name> <service-name>DistributedCache</service-name> <thread-count-min>7</thread-count-min> <thread-count-max>20</thread-count-max> <task-hung-threshold>10000</task-hung-threshold> <task-timeout>5000</task-timeout> </distributed-scheme> </caching-schemes>
クライアント・リクエスト・タイムアウトを15
ミリ秒に設定します。
<distributed-scheme> <scheme-name>example-distributed</scheme-name> <service-name>DistributedCache</service-name> <request-timeout>15000ms</request-timeout> </distributed-scheme>
ノート:
request-timeout
は、常にthread-hung-threshold
やtask-timeout
より長くする必要があります。
親トピック: 優先度タスク・タイムアウトの設定
ノードのサービス・タイプのデフォルト(分散キャッシュ、起動、プロキシなど)を設定するには、コマンド行オプションを使用します。表31-2では、各オプションについて説明します。
表31-2 実行タイムアウトを設定するためのコマンドライン・オプション
オプション | 説明 |
---|---|
|
レプリケート・キャッシュ・サービス用のデフォルトのクライアント・リクエスト・タイムアウト |
|
オプティミスティック・キャッシュ・サービス用のデフォルトのクライアント・リクエスト・タイムアウト |
|
分散キャッシュ・サービス用のデフォルトのクライアント・リクエスト・タイムアウト |
|
分散キャッシュ・サービス用のデフォルトのサーバー実行タイムアウト |
|
分散キャッシュ・サービスでスレッドがハングと報告されるまでのデフォルト時間 |
|
起動サービス用のデフォルトのクライアント・リクエスト・タイムアウト |
|
起動サービスでスレッドがハングと報告されるまでのデフォルト時間 |
|
起動サービス用のデフォルトのサーバー実行タイムアウト |
|
プロキシ・サービス用のデフォルトのクライアント・リクエスト・タイムアウト |
|
プロキシ・サービス用のデフォルトのサーバー実行タイムアウト |
|
プロキシ・サービスでスレッドがハングと報告されるまでのデフォルト時間 |
親トピック: 優先度タスク・タイムアウトの設定
PriorityTask
インタフェースを使用すると、スレッド・プールを使用してタスク実行のスケジュールを指定する順序を制御したり、タスク実行時間を指定された限度まで保持できます。また、PriorityTask
のインスタンスは、通常、Invocable
インタフェースまたはRunnable
インタフェースも実装します。優先度タスクの実行と関連があるのは、タスクのバック・ログが存在する場合のみです。APIでは、タスクの実行をスケジュールする次のような方法が定義されています。:
SCHEDULE_STANDARD
—タスクの実行は、自然な(リクエストの受信時間に基づいた)順序でスケジュールされます。
SCHEDULE_FIRST
—タスクは、スケジュール優先度が同等以下のタスクの前にスケジュールされ、いずれかのワーカー・スレッドが使用可能になるとすぐに実行されます。
SCHEDULE_IMMEDIATE
—タスクは、アイドル状態のワーカー・スレッドによってただちに実行されます。すべてアクティブな場合は、このタスクを実行するための新しいスレッドが作成されます。
この項には次のトピックが含まれます:
Coherenceには、優先度タスク・オブジェクトの作成に役立つ次のクラスがあります。
PriorityProcessor
は、カスタム・エントリ・プロセッサを作成する際に拡張できます。
PriorityFilter
は、カスタム優先度フィルタを作成する際に拡張できます。
PriorityAggregator
は、カスタム集計を作成する際に拡張できます。
PriorityTask
は、優先度起動クラスを作成する際に拡張できます。
これらのクラスの拡張後、開発者はいくつかのメソッドを実装する必要があります。getRequestTimeoutMillis
、getExecutionTimeoutMillis
およびgetSchedulingPriority
の戻り値は、クラスごとにアプリケーションの構成パラメータに保存する必要があります。表31-3に、これらのメソッドを示します。
表31-3 タスク・タイムアウトをサポートするメソッド
メソッド | 説明 |
---|---|
|
コール元スレッドがリクエスト実行の結果を待機することが可能な最大時間を取得します。リクエスト時間は、リクエストが実行のために対応するサーバー・ノードに送信された時点からの経過時間として、クライアント側で測定します。これには、リクエストを実行ノードに配信するまでの時間、タスクを受信しサービス・キューに配置してから実行が開始されるまでの間隔、タスク実行時間、結果をクライアントに戻すための時間が含まれます。 |
|
対応するサービスによって停止されるまでの、このタスクの実行が許可されている最大時間を取得します。 |
|
このタスクのスケジュールの優先度を取得します。有効な値は、 |
|
このメソッドがコールされるのは、このタスクを中断しようとする処理がすべて失敗した場合、または実行の機会がまったくないまま実行がキャンセルされた場合です。このメソッドは通常、サービス・スレッドでコールされ、実装によって遅延が発生すると対応するサービスも遅延するため、細心の注意を払って実装する必要があります。 |
親トピック: 優先度タスク実行オブジェクトの作成
タスク・タイムアウトが発生すると、ノードでRequestTimeoutException
が発生します。たとえば:
com.tangosol.net.RequestTimeoutException: Request timed out after 4015 millis at com.tangosol.coherence.component.util.daemon.queueProcessor.Service.checkRequestTimeout(Service.CDB:8) at com.tangosol.coherence.component.util.daemon.queueProcessor.Service.poll(Service.CDB:52) at com.tangosol.coherence.component.util.daemon.queueProcessor.Service.poll(Service.CDB:18) at com.tangosol.coherence.component.util.daemon.queueProcessor.service.InvocationService.query(InvocationService.CDB:17) at com.tangosol.coherence.component.util.safeService.SafeInvocationService.query(SafeInvocationService.CDB:1)
親トピック: 優先度タスク実行オブジェクトの作成