El método xfnts_start invoca el método svc_start(), definido en xfnts.c para iniciar el daemon xfs. Esta sección describe svc_start().
La orden para ejecutar el daemon xfs es la siguiente:
xfs -config directorio_config/fontserver.cfg -port número_puerto |
La propiedad de extensión Confdir_list identifica el directorio_config y la propiedad de sistema Port_list identifica el número_puerto. Cuando el administrador del clúster configura el servicio de datos, proporciona valores específicos para estas propiedades.
El método xfnts_start declara estas propiedades como matrices de secuencias y obtiene los valores que fija el administrador con las funciones scds_get_ext_confdir_list() y scds_get_port_list() (descritas en scds_property_functions(3HA)), como sigue:
scha_str_array_t *confdirs; scds_port_list_t *portlist; scha_err_t err; /* obtener el directorio de configuración de la propiedad confdir_list */ confdirs = scds_get_ext_confdir_list(scds_handle); (void) sprintf(xfnts_conf, "%s/fontserver.cfg", confdirs->str_array[0]); /* obtener el puerto que va a usar XFS de la propiedad Port_list */ err = scds_get_port_list(scds_handle, &portlist); if (err != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "No se puede acceder a la propiedad Port_list."); return (1); }
Observe que la variable confdirs apunta al primer elemento (0) de la matriz.
El método xfnts_start utiliza sprintf para formar la línea de órdenes para xfs como se muestra a continuación.
/* Construir la orden para que inicie el daemon xfs. */ (void) sprintf(cmd, "/usr/openwin/bin/xfs -config %s -port %d 2>/dev/null", xfnts_conf, portlist->ports[0].port);
Observe que la salida se redirige a dev/null para suprimir los mensajes que genera el daemon.
El método xfnts_start pasa la línea de órdenes xfs a scds_pmf_start() para iniciar el servicio de datos controlado por PMF, como se indica a continuación.
scds_syslog(LOG_INFO, "Emitir una solicitud de inicio."); 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, "Orden de inicio completada satisfactoriamente."); } else { scds_syslog(LOG_ERR, "No se ha podido iniciar HA-XFS "); }
Observe los siguientes aspectos de la llamada a scds_pmf_start().
El parámetro SCDS_PMF_TYPE_SVC identifica el programa que se va a iniciar como aplicación de servicio de datos; este método también puede iniciar un supervisor de fallos u otro tipo de aplicación.
El parámetro SCDS_PMF_SINGLE_INSTANCE lo identifica como un recurso de una sola instancia.
El parámetro cmd es la línea de órdenes generada previamente.
El parámetro final, -1, especifica el nivel de supervisión de secundarios. El -1 especifica que PMF supervisa todos los secundarios y el proceso original.
Antes de volver, svc_pmf_start() libera la memoria asignada para la estructura portlist como se muestra a continuación.
scds_free_port_list(portlist); return (err); |