このタスクについて
任意の ObjectGrid インスタンスには、4 つの可用性状態があります。
図 1. ObjectGrid インスタンスの可用性状態
- ONLINE
- ONLINE 状態は、ObjectGrid のデフォルトの可用性状態です。
ONLINE 状態の ObjectGrid は、標準 eXtreme Scale クライアントからのどの要求でも処理できます。ただし、プリロード・クライアントからの要求は、ObjectGrid が ONLINE である間は拒否されます。
- QUIESCE
- QUIESCE
状態は、遷移的状態です。QUIESCE 状態にある ObjectGrid は、すぐに OFFLINE 状態に移行します。QUIESCE 状態にある ObjectGrid は、未解決のトランザクションを処理できます。ただし新規トランザクションは拒否されます。ObjectGrid が QUIESCE 状態でいられるのは、30 秒までです。
この時間を過ぎると、可用性状態は OFFLINE に移行します。
- OFFLINE
- OFFLINE 状態では、ObjectGrid に送信されたすべてのトランザクションは拒否されます。
- PRELOAD
- PRELOAD 状態は、プリロード・クライアントからデータを ObjectGrid にロードする場合に使用できます。ObjectGrid が PRELOAD 状態である間は、プリロード・クライアントしか、ObjectGrid に対してトランザクションをコミットできません。他のすべてのトランザクションは拒否されます。
ObjectGrid が要求をサポートするのに適切な可用性状態にない場合、その要求は拒否されます。要求が拒否されると、必ず AvailabilityException 例外が
発生します。
- ObjectGrid 構成 XML ファイルを使用して、ObjectGrid の初期状態を設定します。
initialState 属性は、ObjectGrid でその始動時の状態を示すのに使用できます。通常、初期化が完了した ObjectGrid は、ルーティングに使用可能になります。トラフィックが ObjectGrid にルーティングされないように、後で状態を変更できます。ObjectGrid を初期化する必要があるが、すぐには使用可能でない場合、initialState 属性を使用できます。
initialState 属性は、ObjectGrid の構成 XML ファイルで設定されます。デフォルト状態は ONLINE です。
有効な値には、次のものが含まれます。
- ONLINE (デフォルト)
- PRELOAD
- OFFLINE
initialState 属性について詳しくは、ObjectGrid 記述子 XML ファイルを参照してください。
ObjectGrid で initialState 属性が設定されている場合、その状態を明示的にオンラインに戻す必要があります。さもないと、ObjectGrid は使用不可のままになります。ObjectGrid が ONLINE 状態でなければ、AvailabilityException 例外になります。
詳しくは、AvailabilityState API 資料を参照してください。
プリロードのための initialState 属性の使用
ObjectGrid に
データがプリロードされる場合、ObjectGrid が使用可能になる時点と、クライアント・トラフィックをブロックするためにプリロード状態に切り替わる時点との
間に、しばらく時間があくことがあります。この時間を回避するため、
ObjectGrid の初期状態を PRELOAD に設定できます。この場合にも、ObjectGrid は必要な初期化をすべて完了しますが、状態が変更され、プリロードを実行できるようになるまで、トラフィックをブロックします。
PRELOAD 状態も OFFLINE 状態もトラフィックをブロックしますが、プリロードを開始する場合は PRELOAD 状態を使用する必要があります。
フェイルオーバーおよびバランシングの振る舞い
レプリカ・データ・グリッドがプライマリー・データ・グリッドにプロモートされると、レプリカは、initialState 設定を使用しません。
プライマリー・データ・グリッドが再バランシングのために移動された場合、移動が完了する前に、データがプライマリーの新しい場所にコピーされるため、initialState 設定は使用されません。レプリカ生成が構成されていない場合、フェイルオーバーが発生すると、プライマリーは initialState 設定になり、新規プライマリーを配置する必要があります。
- StateManager インターフェースを使用して可用性状態を変更します。
ObjectGrid の可用性状態を設定するには、StateManager を使用します。サーバーで実行中の ObjectGrid の可用性状態を設定するには、対応する ObjectGrid クライアントを StateManager インターフェースに渡します。
以下のコードは、ObjectGrid の可用性状態を変更する方法を示したものです。
ClientClusterContext client = ogManager.connect("localhost:2809", null, null);
ObjectGrid myObjectGrid = ogManager.getObjectGrid(client, "myObjectGrid");
StateManager stateManager = StateManagerFactory.getStateManager();
stateManager.setObjectGridState(AvailabilityState.OFFLINE, myObjectGrid);
StateManager で
setObjectGridState メソッドが呼び出されると、ObjectGrid の各断片が要求状態に遷移します。
メソッドが戻ると、ObjectGrid 内のすべての断片は、適切な状態になります。
サーバー・サイド ObjectGrid の可用性状態を変更するには、ObjectGridEventListener プラグインを使用します。サーバー・サイド ObjectGrid の可用性状態の変更は、その ObjectGrid の区画が 1 つだけの場合にのみ行ってください。ObjectGrid が複数の区画を持っている場合、各プライマリーで shardActivated メソッドが呼び出され、結果として ObjectGrid の状態変更のために必要以上の呼び出しが行われることになります。
public class OGListener implements ObjectGridEventListener,
ObjectGridEventGroup.ShardEvents {
public void shardActivated(ObjectGrid grid) {
StateManager stateManager = StateManagerFactory.getStateManager();
stateManager.setObjectGridState(AvailabilityState.PRELOAD, grid);
}
}
QUIESCE は遷移的状態であるため、ObjectGrid を QUIESCE 状態にするのに StateManager インターフェースを使用することはできません。ObjectGrid は、この状態を経てから OFFLINE 状態に移行します。
- 可用性状態を取得します。
特定の ObjectGrid の可用性状態を取得するには、StateManager の getObjectGridState メソッドを使用します。
StateManager stateManager = StateManagerFactory.getStateManager();
AvailabilityState state = stateManager.getObjectGridState(inventoryGrid);
getObjectGridState メソッドは、ObjectGrid 内のランダム・プライマリーを選択して、その AvailabilityState を返します。
ObjectGrid のすべての断片は同じ可用性状態になっているか、同じ可用性状態に遷移中である必要があるので、このメソッドにより、ObjectGrid の現在の可用性状態に関する妥当な結果がもたらされます。