Sun Cluster データサービス開発ガイド (Solaris OS 版)

Validate メソッド

リソースタイプ実装の Validate メソッドは、次のどちらかの条件のときに RGM によって呼び出されます。

この 2 つの操作は、リソースの Validate メソッドに渡されるコマンド行オプション -c (作成) と -u (更新) によって区別されます。

Validate メソッドは、リソースタイププロパティ INIT_NODES の値で定義されるノード群の各ノードに対して呼び出されます。たとえば、INIT_NODESRG_PRIMARIES が設定されている場合、Validate は、そのリソースのリソースグループを収容できる (その主ノードになりうる) 各ノードに対して呼び出されます。INIT_NODESRT_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() は、リソースの作成や更新をそれぞれ次のように処理します。

次の図に示す 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() システム呼び出しを実行することによって実装できます。