Les objets de la classe Parametre se comportent comme des maps STL, dont ils ont les fonctionnalites, decrivant les parametres d'execution du job.
Contrairement aux variables d'environnement qui sont decrites par les objets de la classe Environnement, les parametres d'execution servent a preciser les contraintes qui pesent sur le job, comme par exemple la duree maximale d'execution autorisee, la quantite maximale de memoire utilisable ou la queue de soumission, ou bien a renseigner le job avec des informations specifiques a l'utilisateur, comme son username, son adresse email, le code d'imputation du job, etc.
En raison du caractere tres specifique et precis des informations qui doivent etre fournies au gestionnaire de batch, une nomenclature est proposee par la classe Parametre qu'il est vivement conseille de suivre. De plus tout a ete fait pour rendre cette ecriture naturelle et facile, donc il ne devrait pas y avoir de probleme pour l'utiliser.
Ainsi, a titre d'exemple, pour preciser le temps maximal autorise pour un job, il faut creer une clef de nom maxcputime dans un objet de classe Parametre qui sera ensuite passe au job. Et pour preciser le code d'imputation du job, il faut creer une clef de nom account.
Mais cet exemple simple montre que la valeur associee a la clef maxcputime est semantiquement une duree, et que la valeur associee a la clef account est semantiquement un nom. On a donc un probleme de type puisque dans la definition d'une map STL le type de la valeur doit etre le meme, et ce meme si les valeurs doivent par la suite avoir des types semantiques differents. C'est pourquoi on a definit une classe Versatile qui encapsule des types differents. See Classe Versatile.
Quoiqu'il en soit toute la mecanique est cachee et seul importe pour l'utilisateur de savoir que les valeurs associees aux clefs sont typees et que ces types sont definis dans l'enumeration DiscriminatorType. See Classe Versatile.
class Parametre : public map< string, Versatile > { public: // Constructeur standard Parametre(); // Constructeur par recopie Parametre(const Parametre & PM); // Operateur de recherche dans la map Versatile & operator [] (const string &); const Versatile & operator [] (const string &) const; // Operateur d'affectation Parametre & operator =(const Parametre & PM); // Declarations statique des clefs de la map static const string ACCOUNT; static const string CHECKPOINT; static const string CKPTINTERVAL; static const string CREATIONTIME; static const string EGROUP; static const string ELIGIBLETIME; static const string EUSER; static const string EXECUTABLE; static const string EXECUTIONHOST; static const string HOLD; static const string ID; static const string INFILE; static const string MAIL; static const string MAXCPUTIME; static const string MAXDISKSIZE; static const string MAXRAMSIZE; static const string MAXWALLTIME; static const string MODIFICATIONTIME; static const string NAME; static const string OUTFILE; static const string PID; static const string QUEUE; static const string QUEUEDTIME; static const string SERVER; static const string STARTDATE; static const string STATE; static const string TEXT; static const string TMPDIR; static const string USEDCPUTIME; static const string USEDDISKSIZE; static const string USEDRAMSIZE; static const string USEDWALLTIME; static const string USER; protected: // map interne servant a controler le type // de la valeur associee a chaque clef map< string, TypeParam > TypeMap; private: };
... Parametre param; param[EXECUTABLE] = "/home/user/mon_application/executable"; param[NAME] = "MonJob"; param[ACCOUNT] = "MonProjet"; // code d'imputation/facturation param[MAXCPUTIME] = 360L; // 6min param[MAXWALLTIME] = 480L; // 8min param[INFILE] = Couple("/tmp/infich1", rempath + "/infich1"); param[OUTFILE] = Couple("/tmp/outfich1", rempath + "/outfich1"); param[OUTFILE] += Couple("stderr", path + "/STDERR"); param[OUTFILE] += Couple("stdout", path + "/STDOUT"); param[MAIL] = "user@domaine.fr"; param[USER] = "user"; ...
Le constructeur par defaut initialise l'objet Parametre et cree la table des types internes. Par contre l'objet ne contient aucune valeur.
Le constructeur par recopie cree un objet Parametre a l'image de celui qui lui est passe en argument. La table des types internes est dupliquee ainsi que tous les objets correspondant a chacune des clefs.
Cet operateur permet de recuperer la valeur designee par la clef passee en argument. Cette valeur est de classe Versatile qui encapsule tous les types de base utilisables dans la bibliotheque en tant que parametre. See Classe Versatile.
A l'image de l'operateur precedent, cet operateur permet de recuperer la valeur designee par la clef passee en argument mais uniquement pour des objets constants.
L'operateur d'affectation remplace l'ensemble du contenu de l'objet Parametre par le contenu de l'objet passe en argument. Les valeurs sont dupliquees par rapport a l'objet pm.
Selon les gestionnaires de batch utilises, certaines clefs sont actives ou inactives. Une definition superflue ne pose pas de probleme et se trouve ignoree au moment de la soumission. Par contre l'absence d'un clef peut empecher la soumission d'aboutir et lever une exception.
Le code de facturation sur lequel le job doit s'imputer.
Une valeur non nulle indique au gestionnaire de batch que le job est checkpointable, c'est-a-dire interruptible pour une reprise ulterieure.
En liaison avec la clef CHECKPOINT, la clef CKPTINTERVAL indique l'intervalle en secondes entre deux interruptions du code (checkpoint).
La date a laquelle le job a ete cree (soumis) dans le gestionnaire de batch.
Le groupe effectif au sens Unix du terme dans lequel le job s'execute.
La date a laquelle le job a pu disposer des ressources necessaires a son execution.
L'utilisateur effectif au sens Unix du terme pour lequel le job s'execute.
Le chemin d'acces absolu a l'executable sur la machine qui soumet le job.
Le nom de la machine qui execute le job.
Une valeur non nulle indique au gestionnaire de batch que le job doit etre place dans l'etat suspendu. Une valeur nulle libere le job.
L'identifiant unique du job pour le gestionnaire de batch.
La clef infile liste les fichiers qui seront envoyes au job avant son execution. Chaque fichier peut avoir un nom different sur la machine cliente — qui soumet le job — et sur le serveur. C'est pourquoi chaque fichier a envoyer est represente par un couple dont le nom local est le chemin absolu du fichier sur la machine cliente et le nom remote est le chemin absolu du fichier sur le serveur. See Classe Couple.
Si le nom remote vaut ‘stdin’, alors le contenu du fichier designe par le nom local est envoye sur l'entree standard du job au moment de son execution.
L'adresse email de l'utilisateur ou lui seront envoyes les eventuels messages d'information et d'alerte du gestionnaire de batch.
Le temps de calcul (CPU time) en secondes que ne devra pas depasser le job.
L'espace disque en octets que ne devra pas depasser le job.
La quantite de memoire vive en octets que ne devra pas depasser le job.
Le temps reel (elapsed time) en secondes que ne devra pas depasser le job.
La date a laquelle le job a ete modifie pour la derniere fois dans le gestionnaire de batch. Cette date correspond le plus souvent a la derniere operation realisee par le gestionnaire dans la gestion du job : routage au sein des files, suspension ou reprise, etc.
Le nom du job tel qu'il apparait a l'utilisateur dans son dialogue avec le gestionnaire de batch. Ce nom n'a pas besoin d'etre unique et ne remplace pas l'identifiant (ID). Il n'est la que pour informer l'utilisateur de la nature de son job.
La clef outfile liste les fichiers qui sont produits par le job et qui seront recuperes sur la machine locale de l'utilisateur apres son execution. Chaque fichier peut avoir un nom different sur la machine cliente — qui soumet le job — et sur le serveur. C'est pourquoi chaque fichier a recuperer est represente par un couple dont le nom local est le chemin absolu du fichier sur la machine cliente et le nom remote est le chemin absolu du fichier sur le serveur. See Classe Couple.
Si le nom local vaut ‘stdout’, alors le contenu du fichier designe par le nom local contient la sortie standard du job au moment de son execution.
Si le nom local vaut ‘stderr’, alors le contenu du fichier designe par le nom local contient la sortie d'erreur du job au moment de son execution.
La valeur du PID (process identifier) du job sur la machine sur lqsuelle il s'execute.
Le nom de la queue, aussi appelee classe ou file suivant les terminologies, qui accueille le job.
La date depuis laquelle le job a ete place en queue dans le gestionnaire de batch.
Le nom complet du serveur qui recoit les soumissions de job.
La date a partir de laquelle l'utilisateur desire que le job soit execute. L'execution ne demarrera qu'au dela de cette date et a condition que toutes les conditions de ressources soient remplies.
L'etat actuel du job.
ATTENTION : Ces valeurs ne sont pas encore normalisees.
Un texte d'information que le gestionnaire peut emettre a destination de l'utilisateur lorsque l'ensemble des parametres n'est pas suffisant pour traduire l'etat reel du job. Par exemple, ce message peut informer l'utilisateur de la raison qui maintient un job dans un etat suspendu ou qui l'empeche de s'executer.
Un chemin d'acces absolu a un repertoire qui sera cree au demarrage du job et qui isolera le job des autres travaux en cours d'execution sur la meme machine.
Le temps de calcul (CPU time) en secondes reellement consomme par le job.
L'espace disque en octets reellement consomme par le job.
L'espace disque en octets reellement consommee par le job.
Le temps reel (elapsed time) en secondes reellement consomme par le job.
Le nom de l'utilisateur (username) sous lequel le job devra tourner sur la machine d'execution. Ce parametre est utile lorsque l'utilisateur possede des comptes differents sur les machines sur lequel il soumet et calcule.