リソースタイプ実装の Validate メソッドは、 1) リソースタイプの新しいリソースが作成されているときや、2) リソースまたはリソースグループのプロパティが更新されているときにそれぞれ RGM から呼び出されます。 この 2 つの操作は、リソースの Validate メソッドに渡されるコマンド行オプション -c (作成) と -u (更新) によって区別されます。
Validate メソッドは、リソースタイププロパティ INIT_NODES の値で定義されるノード群の各ノードに対して呼び出されます。 たとえば、INIT_NODES に RG_PRIMARIES が設定されている場合、Validate は、そのリソースのリソースグループを収容できる (その主ノードになりうる) 各ノードに対して呼び出されます。 INIT_NODES が RT_INSTALLED_NODES に設定されている場合、 Validate は、リソースタイプソフトウェアがインストールされている各ノード (通常は、クラスタのすべてのノード) に対して呼び出されます。 INIT_NODES のデフォルト値は RG_PRIMARIES です (rt_reg(4) のマニュアルページを参照)。 Validate メソッドが呼び出される時点では、RGM はまだリソースを作成していません (作成コールバックの場合)。あるいは、更新するプロパティの更新値をまだ適用していません (更新コールバックの場合)。 リソースタイプ実装の Validate コールバックメソッドの目的は、リソースの新しい設定値 (リソースに対して指定された新しいプロパティ設定値) がそのリソースタイプにとって有効であるかどうかを検査することにあります。
HAStoragePlus によって管理されるローカルファイルシステムを使用している場合は、scds_hasp_check を使って HAStoragePlus リソースの状態を検査します。この情報は、そのリソースが依存するすべての SUNW.HAStoragePlus(5) リソースの状態 (オンラインかどうか) から、そのリソースに定義されたシステムプロパティ Resource_dependencies または Resource_dependencies_weak を使って取得されます。 scds_hasp_check 呼び出しから返される状態コードの完全なリストについては、scds_hasp_check(3HA) のマニュアルページを参照してください。
DSDL 関数 scds_initialize() は、リソースの作成や更新をそれぞれ次のように処理します。
リソースの作成では、コマンド行から渡された新しいリソースプロパティを解析します。 これによって、リソースタイプの開発者は、リソースプロパティの新しい値を、そのリソースががすでにシステムに作成されているかのように使用できます。
リソースやリソースグループの更新では、管理者によって更新されようとしているプロパティの新しい値をコマンド行から読み込み、残りのプロパティ (値が更新されないもの) をリソース管理 API を使って Sun Cluster から読み込みます。 ただし、リソースタイプの開発者は、DSDL を使用する限り、このような初期作業を行う必要はありません。 さらに、開発者は、リソースのすべてのプロパティが使用可能であるものとして、リソースの検証を行うことができます。
次の図に示す svc_validate() は、リソースプロパティの検証を行う関数です。この関数は、scds_get_name() 関数群を使って、検証しようとするプロパティを検査します。 リソースの設定が有効ならこの関数から戻りコード 0 が返されるとすると、リソースタイプの Validate メソッドは、次のコード部分のようになります。
int main(int argc, char *argv[]) { scds_handle_t handle; int rc; if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* 初期エラー */ } rc = svc_validate(handle); scds_close(&handle); return (rc); } |
さらに、検証関数は、リソースの設定が有効でない場合は、その理由を記録する必要があります。 svc_validate() 関数の例 (詳細は省略) は、次のようになります (実際的な検証ルーチンについては、次の章を参照)。
int svc_validate(scds_handle_t handle) { scha_str_array_t *confdirs; struct stat statbuf; confdirs = scds_get_confdir_list(handle); if (stat(confdirs->str_array[0], &statbuf) == -1) { return (1); /* 無効なリソースプロパティ設定 */ } return (0); /* 有効な設定 */ } |
このように、リソースタイプの開発者は、svc_validate() 関数を使用することだけに集中できます。 リソースタイプ実装の典型的な例としては、app.conf というアプリケーション構成ファイルを Confdir_list プロパティの下に置く処理があります。 この処理は、Confdir_list プロパティから取り出した適切なパス名に対して stat() システム呼び出しを実行することによって実装できます。