Sun Cluster: Guía del desarrollador de los servicios de datos del sistema operativo Solaris

Inicio del servicio

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().

El comando para ejecutar el daemon xfs es el 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 comandos 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 comandos 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().

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);