]> SALOME platform Git repositories - modules/kernel.git/blob - src/Batch/Batch_BatchManager_Local.hxx
Salome HOME
PR: merge from branch BR_auto_V310 tag mergefrom_OCC_development_for_3_2_0a2_10mar06
[modules/kernel.git] / src / Batch / Batch_BatchManager_Local.hxx
1 /*
2  * BatchManager_Local.hxx : 
3  *
4  * Auteur : Ivan DUTKA-MALEN - EDF R&D
5  * Mail   : mailto:ivan.dutka-malen@der.edf.fr
6  * Date   : Thu Nov  6 10:17:22 2003
7  * Projet : Salome 2
8  *
9  */
10
11 #ifndef _BATCHMANAGER_LOCAL_H_
12 #define _BATCHMANAGER_LOCAL_H_
13
14
15 #include <vector>
16 #include <map>
17 #include <queue>
18 #include <deque>
19 #include <pthread.h>
20 #include "Batch_Job.hxx"
21 #include "Batch_JobId.hxx"
22 #include "Batch_JobInfo.hxx"
23 #include "Batch_JobInfo_Local.hxx"
24 #include "Batch_Job_Local.hxx"
25 #include "Batch_InvalidArgumentException.hxx"
26 #include "Batch_ConnexionFailureException.hxx"
27 #include "Batch_APIInternalFailureException.hxx"
28 #include "Batch_NotYetImplementedException.hxx"
29 #include "Batch_BatchManager.hxx"
30
31 namespace Batch {
32
33   class FactBatchManager;
34
35   class BatchManager_Local : public BatchManager
36   {
37   private:
38     friend class ThreadAdapter;
39     class ThreadAdapter{
40     public:
41       ThreadAdapter(BatchManager_Local & bm, const Job_Local & job);
42       static void * run(void * arg);
43       BatchManager_Local & getBatchManager() const { return _bm; };
44
45     protected:
46       BatchManager_Local & _bm;
47       const Job_Local _job;
48
49     private:
50       void pere(pid_t child);
51       void fils();
52
53     };
54
55     typedef int Id;
56
57     enum Commande {
58       NOP = 0,
59       HOLD,
60       RELEASE,
61       TERM,
62       KILL,
63       ALTER,
64     };
65
66     enum Status {
67       UNKNOWN = 0,
68       RUNNING,
69       STOPPED,
70       DONE,
71       DEAD,
72     };
73
74     struct Child {
75       pthread_t thread_id;
76       queue<Commande, deque<Commande> > command_queue;
77       pid_t pid;
78       int exit_code;
79       Status status;
80       Parametre param;
81       Environnement env;
82     };
83
84
85
86   public:
87     // Constructeur et destructeur
88     BatchManager_Local(const FactBatchManager * parent, const char * host="localhost") throw(InvalidArgumentException,ConnexionFailureException); // connexion a la machine host
89     virtual ~BatchManager_Local();
90
91     // Recupere le nom du serveur par defaut
92     // static string BatchManager_Local::getDefaultServer();
93
94     // Methodes pour le controle des jobs
95     virtual const JobId submitJob(const Job & job); // soumet un job au gestionnaire
96     virtual void deleteJob(const JobId & jobid); // retire un job du gestionnaire
97     virtual void holdJob(const JobId & jobid); // suspend un job en file d'attente
98     virtual void releaseJob(const JobId & jobid); // relache un job suspendu
99     virtual void alterJob(const JobId & jobid, const Parametre & param, const Environnement & env); // modifie un job en file d'attente
100     virtual void alterJob(const JobId & jobid, const Parametre & param); // modifie un job en file d'attente
101     virtual void alterJob(const JobId & jobid, const Environnement & env); // modifie un job en file d'attente
102     virtual JobInfo queryJob(const JobId & jobid); // renvoie l'etat du job
103     virtual bool isRunning(const JobId & jobid); // teste si un job est present en machine
104
105     virtual void setParametre(const JobId & jobid, const Parametre & param) { return alterJob(jobid, param); } // modifie un job en file d'attente
106     virtual void setEnvironnement(const JobId & jobid, const Environnement & env) { return alterJob(jobid, env); } // modifie un job en file d'attente
107
108
109   protected:
110     int _connect; // Local connect id
111     pthread_mutex_t _threads_mutex;
112     map<Id, Child > _threads;
113
114     // Methode abstraite qui renvoie la commande de copie du fichier source en destination
115     virtual string copy_command(const string & host_source, const string & source, const string & host_destination, const string & destination) const = 0;
116
117     // Methode abstraite qui renvoie la commande a executer
118     virtual string exec_command(Parametre & param) const = 0;
119
120     // Methode abstraite qui renvoie la commande d'effacement du fichier
121     virtual string remove_command(const string & host_destination, const string & destination) const = 0;
122
123   private:
124     virtual pthread_t submit(const Job_Local & job);
125     virtual void cancel(pthread_t thread_id);
126     static  void kill_child_on_exit(void * p_pid);
127     static  void delete_on_exit(void * arg);
128     Id nextId(); // Retourne un identifiant unique pour un thread (clef de la map)
129     Id getIdByThread_id(pthread_t thread_id);
130     Id registerThread_id(pthread_t thread_id);
131     pthread_mutex_t _thread_id_id_association_mutex;
132     pthread_cond_t  _thread_id_id_association_cond;
133     map<pthread_t, Id> _thread_id_id_association;
134
135 #ifdef SWIG
136   public:
137     // Recupere le l'identifiant d'un job deja soumis au BatchManager
138     //virtual const JobId getJobIdByReference(const string & ref) { return BatchManager::getJobIdByReference(ref); }
139     virtual const JobId getJobIdByReference(const char * ref) { return BatchManager::getJobIdByReference(ref); }
140 #endif
141
142   };
143
144 }
145
146 #endif