Oracle® Solaris Cluster Data Services Developer's Guide

Exit Print View

Updated: July 2014, E39646-01
 
 

xfonts_probe Main Loop

The xfonts_probe method implements a loop.

    Before implementing the loop, xfonts_probe performs the following operations:

  • Retrieves the network address resources for the xfnts resource, as follows:

    /* Get the ip addresses available for this resource */
    if (scds_get_netaddr_list(scds_handle, &netaddr)) {
    scds_syslog(LOG_ERR,
    "No network address resource in resource group.");
    scds_close(&scds_handle);
    return (1);
    }
    
    /* Return an error if there are no network resources */
    if (netaddr == NULL || netaddr->num_netaddrs == 0) {
    scds_syslog(LOG_ERR,
    "No network address resource in resource group.");
    return (1);
    }
  • Calls scds_fm_sleep() and passes the value of Thorough_probe_interval as the timeout value. The probe sleeps for the value of Thorough_probe_interval between probes, as follows:

    timeout = scds_get_ext_probe_timeout(scds_handle);
    
    for (;;) {
    /*
    * sleep for a duration of thorough_probe_interval between
    *  successive probes.
    */
    (void) scds_fm_sleep(scds_handle,
    scds_get_rs_thorough_probe_interval(scds_handle));

The xfnts_probe method implements the following loop:

for (ip = 0; ip < netaddr->num_netaddrs; ip++) {
/*
* Grab the hostname and port on which the
* health has to be monitored.
*/
hostname = netaddr->netaddrs[ip].hostname;
port = netaddr->netaddrs[ip].port_proto.port;
/*
* HA-XFS supports only one port and
* hence obtain the port value from the
* first entry in the array of ports.
*/
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);

/*
* Update service probe history,
* take action if necessary.
* Latch probe end time.
*/
ht2 = gethrtime();

/* Convert to milliseconds */
dt = (ulong_t)((ht2 - ht1) / 1e6);

/*
* Compute failure history and take
* action if needed
*/
(void) scds_fm_action(scds_handle,
probe_result, (long)dt);
}   /* Each net resource */
}    /* Keep probing forever */

The svc_probe() function implements the probe logic. The return value from svc_probe() is passed to scds_fm_action(), which determines whether to restart the application, fail over the resource group, or do nothing.