Sun Cluster 3.0 12/01 データサービス開発ガイド

VALIDATE メソッド

リソースタイプ実装の VALIDATE メソッドは、 1) リソースタイプの新しいリソースが作成されているときや、2) リソースまたはリソースグループのプロパティが更新されているときにそれぞれ 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 コールバックメソッドの目的は、リソースの新しい設定値 (リソースに対して指定された新しいプロパティ設定値) がそのリソースタイプにとって有効であるかどうかを検査することにあります。

DSDL 関数 scds_initialize() は、リソースの作成や更新をそれぞれ次のように処理します。

次の図に示す svc_validate() は、リソースプロパティの検証を実装する関数です。この関数は、scds_get_*() 関数群を使って、検証しようとするプロパティを検査します。リソースの設定が有効ならこの関数から戻りコード 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() システム呼び出しを実行することによって実装できます。