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

Validate メソッド

リソースタイプ実装の Validate コールバックメソッドの目的は、リソースに対する新しいプロパティー設定により指定されるリソースの新しい設定値が、そのリソースタイプにとって有効であるかどうかを検査することにあります。

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

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

Validate メソッドはノード群の各ノードまたは各ゾーンに対して呼び出されます。ノード群またはゾーンは、リソースタイププロパティー Init_nodes の値で定義されます。Init_nodesRG_PRIMARIES に設定されている場合、Validate は、そのリソースを含むリソースグループを収容できる (その主ノードになりうる) 各ノードまたはゾーンに対して呼び出されます。Init_nodes RT_INSTALLED_NODES に設定されている場合、Validate は、リソースタイプソフトウェアがインストールされている各ノードまたはゾーン (通常は、クラスタのすべてのノードまたはゾーン) に対して呼び出されます。

Init_nodes のデフォルト値は RG_PRIMARIES です (rt_reg(4) のマニュアルページを参照)。Validate メソッドが呼び出される時点では、RGM はまだリソースを作成していません (作成コールバックの場合)。あるいは、更新するプロパティーの更新値をまだ適用していません (更新コールバックの場合)。


注 –

HAStoragePlus リソースタイプによって管理されるローカルファイルシステムを使用している場合は、scds_hasp_check() 関数を使ってそのリソースタイプの状態を検査します。当該リソース用に定義されている Resource_dependencies または Resource_dependencies_weak のシステム属性を使用することによって、当該リソースが依存しているすべての SUNW.HAStoragePlus リソース状態 (オンラインであるか、オンラインでないか) についての情報が得られます。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);   /* Initialization Error */
   }
   rc = svc_validate(handle);
   scds_close(&handle);
   return (rc);
}

さらに検証関数は、リソースの検証が失敗した理由を記録する必要もあります。ただし、詳細は省略することによって、次に示すように、より単純な例である svc_validate() 関数を実装できます (第 8 章「サンプル DSDL リソースタイプの実装」には検証関数の実際的な取り扱いが記載されています)。

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() 関数を実装することだけに集中できます。