Cette classe derive de la classe generique BatchManager, See Classe BatchManager.
Les objets de la classe BatchManager_PBS realisent l'interface de la bibliotheque avec l'API du gestionnaire de batch OpenPBS.
class BatchManager_PBS : public BatchManager { public: // Constructeur et destructeur BatchManager_PBS(FactBatchManager * parent, const char * host) throw(InvalidArgumentException); virtual ~BatchManager_PBS(); // Recupere le nom du serveur par defaut static string getDefaultServer(); // Recupere le l'identifiant d'un job deja soumis au BatchManager virtual const JobId getJobIdByReference(const string & ref); // Methodes pour le controle des jobs : virtuelles pures // soumet un job au gestionnaire virtual const JobId submitJob(const Job & job); // retire un job du gestionnaire virtual void deleteJob(const JobId & jobid); // suspend un job en file d'attente virtual void holdJob(const JobId & jobid); // relache un job suspendu virtual void releaseJob(const JobId & jobid); // modifie un job en file d'attente virtual void alterJob(const JobId & jobid, const Parametre & param, const Environnement & env); virtual void alterJob(const JobId & jobid, const Parametre & param); virtual void alterJob(const JobId & jobid, const Environnement & env); // renvoie l'etat du job virtual JobInfo queryJob(const JobId & jobid); // modifie un job en file d'attente virtual void setParametre(const JobId & jobid, const Parametre & param); virtual void setEnvironnement(const JobId & jobid, const Environnement & env); protected: string _hostname; // serveur ou tourne le BatchManager private: };
... // On recupere l'instance du catalogue de gestionnaires de batch Batch::BatchManagerCatalog cata = Batch::BatchManagerCatalog::getInstance(); // On cree une fabrique de BatchManager de type PBS Batch::BatchManager & myBM = (* cata("PBS"))("serveur.domaine.fr") // Maintenant, on peut utiliser toutes les fonctionnalites du // gestionnaire de batch a travers le variable myBM ...
Excepte un pointeur sur la fabrique qui a produit l'objet, le constructeur accepte zero ou un argument de type string decrivant soit le nom de domaine completement qualifie (FQDN, fully qualified domain name) du serveur de batch, soit son adresse IP dans un format decimal "aaa.bbb.ccc.ddd".
Si aucun parametre n'est passe au constructeur, celui-ci prend le serveur par defaut tel que renvoye par la methode getDefaultServer.
Une resolution du nom ou de l'adresse peut etre realisee en fonction des capacites de la plate-forme pour s'assurer que le serveur est connu et joignable. En cas d'echec, une exception InvalidArgumentException est levee. See Classe InvalidArgumentException.
Ceci fait, une connexion est etablie avec le gestionnaire de batch qui est maintenue jusqu'a destruction de l'objet.
Le destructeur supprime la connexion precedemment etablie par le constructeur lorsque celle-ci a reussi.
Cette methode soumet le job passe en argument au gestionnaire de batch. Etant donne que le job ne peut pas etre envoye tel quel puisqu'il a un format generique au sein de la bibliotheque de classes Batch, cette methode est chargee de le convertir dans un format adapte au gestionnaire de batch sous-jacent.
La methode opere ici une conversion du job de la classe Job en Job_PBS.
Ce n'est que lorsque cette conversion est realisee que le job est soumis au gestionnaire a travers son API. L'identifiant propose par le gestionnaire est alors renvoye a l'appelant. Si la soumission echoue pour une raison ou une autre, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode retire le job dont l'identifiant est passe en argument de la file d'attente du gestionnaire, ou bien l'arrete en cours d'execution. Cette methode est inoperante sur des travaux deja termines, auquel cas une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode suspend le job dont l'identifiant est passe en argument au sein de la file d'attente du gestionnaire. Cette methode est inoperante sur des travaux en cours d'execution ou deja termines, ainsi que sur des travaux deja suspendus. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode relache un job precedemment suspendu en file d'attente dont l'identifiant est passe en argument. Elle est inoperante sur des travaux deja reclaches, en cours d'execution ou termines. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Ces methodes permettent de modifier les parametres d'execution et d'environnement d'un job dont l'identifiant est passe en argument. See Classe Parametre. See Classe Environnement. Il est important de noter que le job doit etre encore place en file d'attente sinon la methode est inoperante. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode permet de recuperer les informations concernant le job dont l'identifiant est passe en argument dans un objet de classe JobInfo. See Classe JobInfo. On y retrouve les parametres d'execution et d'environnement du job tels qu'ils ont ete passes au gestionnaire au moment de la soumission, ainsi que des informations concernant l'execution du job comme par exemple la machine d'execution, le temps consomme, la memoire consommee, etc.
Il n'est pas toujours possible d'interroger un job deja termine. En cas de probleme, une exception APIInternalFailureException est levee. See Classe APIInternalFailureException.
Cette methode permet de recuperer au sein de la classe un identifiant de job a partir d'une chaine de caracteres obtenue par un biais externe. Cet identifiant pourra etre utilise par la suite au sein de la biliotheque de classes pour controler le job comme s'il avait ete cree et soumis depuis la biliotheque-meme.
Cette methode n'est utile que pour l'interfacage avec Python, car Python ne sait pas gerer la surcharge de methode, et de fait leve des exceptions lors d'appels a de telles methodes.
Elle est equivalente a la methode ‘void alterJob(const JobId & jobid, const Parametre & param)’.
Cette methode n'est utile que pour l'interfacage avec Python, car Python ne sait pas gerer la surcharge de methode, et de fait leve des exceptions lors d'appels a de telles methodes.
Elle est equivalente a la methode ‘void alterJob(const JobId & jobid, const Environnement & env)’.