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

xfonts_probe のメインループ

xfonts_probe メソッドは無限ループを実行します。ループを実行する前に、xfonts_probe は次の処理を行います。

xfnts_probe メソッドは次のようなループを実装します。


例 7-17

		for (ip = 0; ip < netaddr->num_netaddrs; ip++) {
			/*
			 * 状態を監視するホスト名とポートを取得する。
			 */
			hostname = netaddr->netaddrs[ip].hostname;
			port = netaddr->netaddrs[ip].port_proto.port;
			/*
			 * HA-XFS がサポートするポートは 1 つだけなので、
			 * ポート値はポートの配列の最初の
			 * エントリから取得する。
			 */
			ht1 = gethrtime(); /* Latch probe start time */
			scds_syslog(LOG_INFO, "Probing the service on "
			    "port: %d.", port);
			probe_result =
			svc_probe(scds_handle, hostname, port, timeout);
			/*
			 * サービス検証履歴を更新し、
			 * 必要に応じて、アクションを行う。
			 * 検証終了時間を取得する。
			 */
			ht2 = gethrtime();
			/* ミリ秒に変換する。 */
			dt = (ulong_t)((ht2 - ht1) / 1e6);
			/*
			 * 障害の履歴を計算し、必要に応じて
			 * アクションを行う。
			 */
			(void) scds_fm_action(scds_handle,
			    probe_result, (long)dt);
		}	/* ネットリソースごと */
	} 	/* 検証を永続的に繰り返す。 */

svc_probe 関数は検証ロジックを実装します。svc_probe からの戻り値は scds_fm_action に渡されます。そして scds_fm_action は、アプリケーションを再起動するか、リソースグループをフェイルオーバーするか、あるいは何もしないかを決定します。