La méthode Démarrage_xfnts appelle la méthode Démarrage_svc(), définie dans xfnts.c pour démarrer le démon xfs. Cette rubrique décrit Démarrage_svc().
La commande permettant de lancer le démon xfs est la suivante :
xfs -config répertoire_config/fontserver.cfg -port numéro_port |
La propriété d'extension Liste_rép_conf identifie le répertoire_config alors que la propriété système Liste_port identifie le numéro_port. Lorsque l'administrateur du cluster configure le service de données, il fournit des valeurs spécifiques pour ces propriétés.
La méthode Démarrage_xfnts déclare ces propriétés comme tableaux de chaînes et obtient les valeurs définies par l'administrateur à l'aide des fonctions scds_get_ext_confdir_list() et scds_get_port_list() (décrites dans scds_property_functions(3HA)), de la manière suivante :
scha_str_array_t *confdirs; scds_port_list_t *portlist; scha_err_t err; /* obtention du répertoire de configuration depuis la propriété liste_rép_conf */ confdirs = scds_get_ext_confdir_list(scds_handle); (void) sprintf(xfnts_conf, "%s/fontserver.cfg", confdirs->str_array[0]); /* obtention du port à utiliser par XFS depuis la propriété Liste_port */ 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); }
Remarquez que la variable Rép_conf pointe vers le premier élément (0) du tableau.
La méthode Démarrage_xfnts utilise sprintf pour former la ligne de commande pour xfs de la manière suivante :
/* Construction de la commande pour démarrer le démon xfs. */ (void) sprintf(cmd, "/usr/openwin/bin/xfs -config %s -port %d 2>/dev/null", xfnts_conf, portlist->ports[0].port);
Remarquez que la sortie est redirigée vers dev/null pour supprimer les messages générés par le démon.
La méthode Démarrage_xfnts transmet la ligne de commande xfs à scds_pmf_start() pour démarrer le service de données sous le contrôle du gestionnaire de processus, de la manière suivante :
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 "); }
Tenez compte des points suivants concernant l'appel vers scds_pmf_start () :
Le paramètre SCDS_PMF_TYPE_SVC identifie le programme pour démarrer comme application du service de données (cette méthode peut également démarrer un détecteur de pannes ou certains autres types d'application).
Le paramètre SCDS_PMF_SINGLE_INSTANCE l'identifie comme une ressource à instance unique.
Le paramètre cmd est la ligne de commande générée précédemment.
Le paramètre final, -1, spécifie le niveau de surveillance enfant. Le -1 spécifie que le gestionnaire de processus surveille tous les processus enfants de même que le processus d'origine.
Avant son retour, svc_pmf_start() libère la mémoire allouée à la structure liste_ports, de la manière suivante :
scds_free_port_list(portlist); return (err); |