]> SALOME platform Git repositories - modules/kernel.git/blob - idl/SALOME_ContainerManager.idl
Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/kernel.git] / idl / SALOME_ContainerManager.idl
1 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 #ifndef _SALOME_CONTAINERMANAGER_IDL_
24 #define _SALOME_CONTAINERMANAGER_IDL_
25
26 #include "SALOME_Exception.idl"
27 #include "SALOME_Component.idl"
28
29 /*! \file SALOME_ContainerManager.idl \brief interfaces for %SALOME launcher and container manager
30 */
31
32 module Engines
33 {
34
35 //!  Type to transmit list of resources.
36 typedef sequence<string> ResourceList;
37 //! components list
38 typedef sequence<string> CompoList;
39 //! files list
40 typedef sequence<string> FilesList;
41 //! modules list
42 typedef sequence<string> ModulesList;
43
44 //! A generic parameter
45 struct Parameter
46 {
47   string name;
48   string value;
49 };
50 //! Generic parameter list
51 typedef sequence<Engines::Parameter> ParameterList;
52
53 //! Type to describe required properties of a resource
54 struct ResourceParameters
55 {
56   //! resource name - manual selection
57   string name;
58   //! host name
59   string hostname;
60   //! if given required operating system 
61   string OS;
62   //! if given list of components that could be loaded on a container
63   //! Optional if no resource are found with this constraint
64   CompoList componentList;
65
66   // Permits to order resources
67   //! required number of proc
68   long nb_proc;
69   //! required memory size
70   long mem_mb;
71   //! required frequency
72   long cpu_clock;
73   //! required number of node
74   long nb_node;
75   //! required number of proc per node
76   long nb_proc_per_node;
77
78   // Permits to configure SALOME resource management
79   //! resource management policy : first, cycl, altcycl or best (can be extended)
80   string policy;
81   //! restricted list of resources to search in
82   ResourceList resList;
83 };
84
85 //! Type to describe required properties of a container
86 struct ContainerParameters
87 {
88   //! container name if given else automatic
89   string container_name;
90
91   //! creation mode for GiveContainer if given else automatic 
92   /*!start creates a new container
93    * get  try to find an existing container
94    * getorstart   use an existing container if it exists or creates a new one
95    */
96   string mode;
97
98   //! container working directory if given else automatic
99   string workingdir;
100
101   // Parallel part
102   //! Number of proc of a parallel container
103   long nb_proc;
104   //! if true start a MPI container
105   boolean isMPI;
106   //! PaCO specific informations
107   string parallelLib;
108
109   //! Parameters to choose a resource
110   ResourceParameters resource_params;
111 };
112
113 //!  Type to describe a resource
114 struct ResourceDefinition
115 {
116   //! name 
117   string name;
118   //! hostname 
119   string hostname;
120   //! protocol to connect to the resource
121   //! protocol used to start a remote container (ssh or rsh)
122   string protocol;
123   //! login name to use to start a remote container
124   string username;
125   //! salome application to use to start a remote container
126   string applipath;
127   //! list of available components 
128   CompoList componentList;
129   //! Type of resource: interactive or batch
130   string mode;
131
132   //! operating system 
133   string OS;
134   //! memory size per node
135   long mem_mb;
136   //! frequency
137   long cpu_clock;
138   //! number of node
139   long nb_node;
140   //! number of proc per node
141   long nb_proc_per_node;
142   //! batch system
143   string batch;
144   //! MPI implementation
145   string mpiImpl;
146   //! if the resource is a cluster:
147   //! internal protocol to use to start a remote container (ssh or rsh) on the cluster
148   string iprotocol;
149
150   //! Specify if the resource is a cluster head;
151   boolean is_cluster_head;
152
153   //! Predefined working directory on the resource
154   string working_directory;
155 };
156
157 //! exception thrown if a computer is not found in the catalog
158 exception NotFound {};
159
160 struct JobParameters
161 {
162   string job_name;
163   //! Job Type - Could be equal to "command" or "yacs_file" or "python_salome"
164   string job_type;
165
166   // Common values
167   string job_file;
168   string env_file; 
169   FilesList in_files;
170   FilesList out_files;
171   string work_directory;
172   string local_directory;
173   string result_directory;
174
175   /*! Time for the batch (has to be like this : hh:mm) - Could be empty, in
176        this case, default value of the selected resource will be used.
177   */
178   string maximum_duration; 
179
180   // Memory is expressed in megabytes -> mem_mb
181   // Number of Processors -> nb_proc
182   ResourceParameters resource_required;
183
184   /*!
185     Name of the batch queue choosed - optional
186   */
187   string queue;
188
189   /*!
190     Specific parameters for each type of job - optional
191   */
192   Engines::ParameterList specific_parameters;
193 };
194
195 struct JobDescription
196 {
197   long job_id;
198   Engines::JobParameters job_parameters;
199 };
200 typedef sequence<Engines::JobDescription> JobsList;
201
202 interface SalomeLauncherObserver
203 {
204   void notify(in string event_name, in string event_data);
205 };
206
207 /*! \brief Interface of the %salomelauncher
208     This interface is used for interaction with the unique instance
209     of SalomeLauncher
210 */
211 interface SalomeLauncher
212 {
213   // Main methods
214   long   createJob    (in Engines::JobParameters job_parameters) raises (SALOME::SALOME_Exception);
215   void   launchJob    (in long job_id)                           raises (SALOME::SALOME_Exception);
216   string getJobState  (in long job_id)                           raises (SALOME::SALOME_Exception);
217   void   getJobResults(in long job_id, in string directory)      raises (SALOME::SALOME_Exception);
218   boolean getJobDumpState(in long job_id, in string directory)   raises (SALOME::SALOME_Exception);
219   void   stopJob      (in long job_id)                           raises (SALOME::SALOME_Exception);
220   void   removeJob    (in long job_id)                           raises (SALOME::SALOME_Exception);
221
222   // Useful methods
223   long    createJobWithFile(in string xmlJobFile, in string clusterName) raises (SALOME::SALOME_Exception);
224   boolean testBatch        (in ResourceParameters params)                raises (SALOME::SALOME_Exception);
225
226   // SALOME kernel service methods
227   void Shutdown();
228   long getPID();
229
230   // Observer and introspection methods
231   void addObserver(in Engines::SalomeLauncherObserver observer);
232   void removeObserver(in Engines::SalomeLauncherObserver observer);
233   Engines::JobsList getJobsList();
234   Engines::JobParameters getJobParameters(in long job_id) raises (SALOME::SALOME_Exception);
235
236   // Save and load methods
237   void loadJobs(in string jobs_file) raises (SALOME::SALOME_Exception);
238   void saveJobs(in string jobs_file) raises (SALOME::SALOME_Exception);
239
240 };
241   
242 /*! \brief Interface of the %containerManager
243     This interface is used for interaction with the unique instance
244     of ContainerManager
245 */
246 interface ContainerManager
247 {
248   //! GiveContainer - use mode parameter of ContainerParameters to configure
249   //! how this method works
250   //! Currently: get, start, getorstart, findorstart, find
251   Container GiveContainer(in ContainerParameters params) raises (SALOME::SALOME_Exception);
252
253   //!  Shutdown all containers that have been launched by the container manager
254   void ShutdownContainers();
255 } ;
256   
257 /*! \brief Interface of the %resourcesManager
258     This interface is used for interaction with the unique instance
259     of ResourcesManager
260 */
261 interface ResourcesManager
262 {
263   //!  Find first available resource in a resources list
264   string FindFirst(in ResourceList possibleResources);
265
266   //!  Find best available computer according to policy in a computers list
267   string Find(in string policy, in ResourceList possibleResources);
268
269   //!  Get a list of resources that are best suited to launch a container given constraints 
270   /*! 
271        The constraints are resource constraints (params) and components constraints (componentList)
272   */
273   ResourceList GetFittingResources(in ResourceParameters params) raises (SALOME::SALOME_Exception);
274
275   //!  Get definition of a resource
276   ResourceDefinition GetResourceDefinition(in string name);
277
278   //! Add a new resource to the resource_manager
279   /*!
280       write -> true, resource manager will add it into a xml_file
281       xml_file -> could be empty, in this case if write is true, resource manager will write
282       the resource in its first ResourceCatalog file
283     */
284   void AddResource(in ResourceDefinition new_resource, in boolean write, in string xml_file) 
285     raises (SALOME::SALOME_Exception);
286
287   //! Remove a new resource to the resource_manager
288   /*!
289       write -> true, resource manager will write a new xml_file
290       xml_file -> could be empty, in this case if write is true, resource manager will write
291       the resource in its first ResourceCatalog file
292     */
293   void RemoveResource(in string resource_name, in boolean write, in string xml_file) 
294     raises (SALOME::SALOME_Exception);
295 };
296
297
298 // For compatibility - will be erased on SALOME 6
299 typedef sequence<string> MachineList;
300 //!  Type to describe required properties of a container.
301 struct MachineParameters
302 {
303   //! container name if given else automatic
304   string container_name;
305   //! host name if given else automatic
306   string hostname;
307   //! if given list of components that could be loaded on the container
308   CompoList componentList;
309   //! if given restricted list of machines to search in
310   MachineList computerList;
311   //! required operating system 
312   string OS;
313   //! required memory size
314   long mem_mb;
315   //! required frequency
316   long cpu_clock;
317   //! required number of proc per node
318   long nb_proc_per_node;
319   //! required number of node
320   long nb_node;
321   //! if true start a MPI container
322   boolean isMPI;
323   //! container working directory 
324   string workingdir;
325   //! creation mode for GiveContainer. 
326   /*!start creates a new container
327    * get  try to find an existing container
328    * getorstart   use an existing container if it exists or creates a new one
329    */
330   string mode;
331   //! resource management policy : first, cycl, altcycl or best (can be extended)
332   string policy;
333
334   //! PaCO specific informations
335   string parallelLib;
336   long nb_component_nodes;
337 };
338 };
339   
340 #endif