El método xfnts_start llama al método svc_start(), definido en el archivo xfnts.c, para iniciar el daemon de xfs. Esta sección describe svc_start().
A continuación se muestra el comando que permite iniciar el daemon de xfs:
# xfs -config config-directory/fontserver.cfg -port port-number |
La propiedad de extensión Confdir_list identifica el directorio de configuración, config-directory, mientras que la propiedad del sistema Port_list identifica el número de puerto, port-number. El administrador del clúster proporciona valores específicos para estas propiedades al configurar el servicio de datos.
El método xfnts_start declara estas propiedades en forma de matriz de cadenas. El método xfnts_start obtiene los valores establecidos por el administrador del clúster mediante el uso de las funciones scds_get_ext_confdir_list() y scds_get_port_list(). Estas funciones se describen en la página de comando man scds_property_functions(3HA).
scha_str_array_t *confdirs; scds_port_list_t *portlist; scha_err_t err; /* get the configuration directory from the confdir_list property */ confdirs = scds_get_ext_confdir_list(scds_handle); (void) sprintf(xfnts_conf, "%s/fontserver.cfg", confdirs->str_array[0]); /* obtain the port to be used by XFS from the Port_list property */ err = scds_get_port_list(scds_handle, &portlist); if (err != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "Could not access property Port_list."); return (1); }
Observe que la variable confdirs señala al primer elemento (0) de la matriz.
El método xfnts_start utiliza sprintf() para formar la línea de comandos de xfs.
/* Construct the command to start the xfs daemon. */ (void) sprintf(cmd, "/usr/openwin/bin/xfs -config %s -port %d 2>/dev/null", xfnts_conf, portlist->ports[0].port);
Tenga en cuenta que el resultado se redirige a /dev/null para suprimir los mensajes generados por el daemon.
El método xfnts_start pasa la línea de comandos de xfs a scds_pmf_start() para iniciar el servicio de datos bajo el control de PMF.
scds_syslog(LOG_INFO, "Issuing a start request."); err = scds_pmf_start(scds_handle, SCDS_PMF_TYPE_SVC, SCDS_PMF_SINGLE_INSTANCE, cmd, -1); if (err == SCHA_ERR_NOERR) { scds_syslog(LOG_INFO, "Start command completed successfully."); } else { scds_syslog(LOG_ERR, "Failed to start HA-XFS "); }
Tenga en cuenta los siguientes puntos acerca de la llamada a scds_pmf_start():
El argumento SCDS_PMF_TYPE_SVC identifica el programa que debe iniciarse como aplicación del servicio de datos. Este método también puede iniciar un supervisor de fallos o cualquier otro tipo de aplicación.
El argumento SCDS_PMF_SINGLE_INSTANCE identifica ésta como un recurso de una sola instancia.
El argumento cmd es la línea de comandos generada anteriormente.
El argumento final, -1, especifica el nivel de supervisión secundario. El valor -1 indica que PMF supervisa todos los elementos secundarios, así como el proceso original.
Antes de volver, svc_pmf_start() libera la memoria asignada para la estructura portlist.
scds_free_port_list(portlist); return (err);