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

xfonts_probe のメインループ

xfonts_probe メソッドは、ループを実装します。

ループを実装する前に、xfonts_probe は次の処理を行います。

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

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(); /* 検証開始時間を取得する。 */
         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() は、アプリケーションを再起動するか、リソースグループをフェイルオーバーするか、あるいは何もしないかを決定します。