What-If APIを使用して、計画済または計画外の仮定上のイベントに対するOracle Clusterwareの反応を予測できます。Oracle Clusterwareでは、システムでのイベントに応じて、対応アクション計画を生成できます。このアクション計画は、一連のリソース状態の移行またはサーバー・プールの再構成(あるいはその両方)で構成されます。What-If APIは、このアクション計画を外部に公開し、イベントの結果を実際の発生前にクライアントが予測できるようにするメカニズムを備えています。
What-Ifレスポンス計画は、次のイベント・カテゴリで使用可能です。
Oracle ClusterwareではWhat-Ifの出力がアクションのリストとして提供され、各アクションがOracle Clusterwareによって実行される特定の手順を示します。各アクションはclscrs_action
構造によってカプセル化され、clscrs_actionlist
構造がアクションの順序全体を表します。また、Oracle Clusterwareでは、それらの構造を作成、調査、反復、および破棄するための関数セット(アクション構造用のclscrs_action_*
とアクション・リスト用のclscrs_actionlist_*
)が用意されています。使用方法は、対応するエンティティ・リストおよびエンティティの関数と同じです。
また、What-If APIでは、予想されるシステム状態を問合せる機能もクライアントに提供されています。clscrs_querylist
構造でstat3
書式を使用して問合せを指定し、clscrs_crsentitylist
構造によって結果が提供されます。使用方法の詳細は、stat3
の項を参照してください。
Oracle Clusterwareによって提供される各What-If応答には、Oracle Clusterwareの現行の状態を示す順序IDが含まれます。順序IDは、Oracle Clusterwareによって管理される新しいイベントごとに増分されます。Oracle Clusterwareでは、順序IDが変更されないかぎり、提供されたアクション計画が対象イベントに対してそのまま実行されることが保証されます。たとえば、whatif start resource FOO
リクエストに対してOracle Clusterwareから提供されるアクション計画は、順序IDが変更されていないかぎり、実際のstart resource FOO
リクエストが送信されたときにOracle Clusterwareによって実行されるアクションと同じです。
例H-4に、What-If APIを使用する方法を示します。
例H-4 What-If APIの使用例
boolean tracectx = TRUE; oratext *resid; clscrs_ctx *ctx; clscrs_env env; clscrs_splist *resid_list; clscrs_action *cur_actn; clscrs_actionlist *alist; clscrs_splist *params; // Init crs clscrs_init_crs(&ctx, (clscrs_msgf)clsuslztrace, &tracectx, (ub4)0); // Init parameters to the call clscrs_entity_id_create(ctx, "MYRES", clscrs_entity_res, &resid); clscrs_splist_create(ctx, &resid_list); clscrs_splist_append(resid_list, resid, NULL); clscrs_actionlist_create(ctx, &alist); // Make call into the what-if API clscrs_whatif_start_resource(resid_list, nodename, flags, NULL, NULL, alist); // Process the resulting list of actions for(clscrs_actionlist_first(alist,&cur_actn);cur_actn;clscrs_actionlist_next(alist,&cur_actn)) { params = clscrs_action_getparams(cur_actn); switch(clscrs_action_gettype(cur_actn)) { case clscrs_actiontype_resstate: // Read params and do something break; case clscrs_actiontype_srvmove: // Read params and do something break; case clscrs_actiontype_newgroup: // Read params and do something break; case clscrs_actiontype_errorcase: // Read params and do something break; } } clscrs_actionlist_destroy(alist); clscrs_splist_destroy(resid_list); clscrs_term_crs(&ctx);
この項では、APIのパラメータを、入力を指定するものと、関数が正常に完了した際に情報を表示するものとに分けて説明します。