Salome HOME
CCAR: several changes in Container Manager and Resources Manager
[modules/kernel.git] / idl / SALOME_ContainerManager.idl
1 //  Copyright (C) 2007-2008  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 #ifndef _SALOME_CONTAINERMANAGER_IDL_
23 #define _SALOME_CONTAINERMANAGER_IDL_
24
25 #include "SALOME_Exception.idl"
26 #include "SALOME_Component.idl"
27
28 /*! \file SALOME_ContainerManager.idl \brief interfaces for %SALOME launcher and container manager
29 */
30
31 module Engines
32 {
33
34 //!  Type to transmit list of machines.
35   typedef sequence<string> MachineList;
36 //! components list
37   typedef sequence<string> CompoList;
38 //! files list
39   typedef sequence<string> FilesList;
40 //! modules list
41   typedef sequence<string> ModulesList;
42
43 //!  Type to describe required properties of a container.
44 struct MachineParameters
45 {
46   //! container name if given else automatic
47   string container_name;
48   //! host name if given else automatic
49   string hostname;
50   //! if given list of components that could be loaded on the container
51   CompoList componentList;
52   //! if given restricted list of machines to search in
53   MachineList computerList;
54   //! required operating system 
55   string OS;
56   //! required memory size
57   long mem_mb;
58   //! required frequency
59   long cpu_clock;
60   //! required number of proc per node
61   long nb_proc_per_node;
62   //! required number of node
63   long nb_node;
64   //! if true start a MPI container
65   boolean isMPI;
66   //! container working directory 
67   string workingdir;
68   //! creation mode for GiveContainer. 
69   /*!start creates a new container
70    * get  try to find an existing container
71    * getorstart   use an existing container if it exists or creates a new one
72    */
73   string mode;
74   //! resource management policy : first, cycl, altcycl or best (can be extended)
75   string policy;
76
77   //! PaCO specific informations
78   string parallelLib;
79   long nb_component_nodes;
80 };
81
82 //!  Type to describe properties of a resource.
83 struct MachineDefinition
84 {
85   //! host name 
86   string hostname;
87   //! alias name 
88   string alias;
89   //! protocol to use to start a remote container (ssh or rsh)
90   string protocol;
91   //! login name to use to start a remote container
92   string username;
93   //! salome application to use to start a remote container
94   string applipath;
95   //! list of available components 
96   CompoList componentList;
97   //! operating system 
98   string OS;
99   //! memory size
100   long mem_mb;
101   //! frequency
102   long cpu_clock;
103   //! number of proc per node
104   long nb_proc_per_node;
105   //! number of node
106   long nb_node;
107   //! MPI implementation
108   string mpiImpl;
109   //! batch system
110   string batch;
111   long nb_component_nodes;
112 };
113 //! exception thrown if a computer is not found in the catalog
114   exception NotFound {};
115
116 //!  Structure used for Salome Batch Job parameters
117 struct BatchParameters
118 {
119   //! Where batch command will be launched and log files will be created
120   string batch_directory; 
121   //! Time for the batch (has to be like this : hh:mm)
122   string expected_during_time; 
123   //! Minimum of memory needed (has to be like : 32gb or 512mb)
124   string mem; 
125   //! Number of processors requested
126   long nb_proc; 
127 };
128
129 /*! \brief Interface of the %salomelauncher
130     This interface is used for interaction with the unique instance
131     of SalomeLauncher
132 */
133   interface SalomeLauncher
134   {
135     long submitJob( in string xmlExecuteFile,
136                     in string clusterName ) raises (SALOME::SALOME_Exception);
137     long submitSalomeJob( in string fileToExecute,
138                           in FilesList filesToExport,
139                           in FilesList filesToImport,
140                           in BatchParameters batch_params,
141                           in MachineParameters params ) raises (SALOME::SALOME_Exception);
142     string queryJob( in long jobId, in MachineParameters params ) raises (SALOME::SALOME_Exception);
143     void deleteJob( in long jobId, in MachineParameters params ) raises (SALOME::SALOME_Exception);
144     void getResultsJob( in string directory, in long jobId, in MachineParameters params ) raises (SALOME::SALOME_Exception);
145
146     boolean testBatch(in MachineParameters params) raises (SALOME::SALOME_Exception);
147
148     void Shutdown();
149
150     long getPID();
151
152   } ;
153   
154 /*! \brief Interface of the %containerManager
155     This interface is used for interaction with the unique instance
156     of ContainerManager
157 */
158   interface ContainerManager
159   {
160     //!  Find an existing container satisfying the constraints given by input parameters or start a new one.
161     Container FindOrStartContainer( in MachineParameters params);
162
163     //!  This operation launches a PaCO++ container.
164     /*!  
165       \param Description of the container resquested.
166       \param List of computers ressources.
167
168       \return Container's CORBA reference.
169     */
170     Container FindOrStartParallelContainer( in MachineParameters params);
171
172     //!  Start a new container satisfying the constraints given by input parameters.
173     Container StartContainer( in MachineParameters params);
174
175     //!  Same as StartContainer except that in batch all containers have already been launched
176     /*! 
177          We are in batch if environment variable SALOME_BATCH is 1.
178          In this case, containers have been launched at the beginning of the Salome session and 
179          the container manager picks one in the pool of existing containers.
180     */
181     Container GiveContainer( in MachineParameters params);
182
183     //!  Shutdown all containers that have been launched by the container manager
184     void ShutdownContainers();
185
186   } ;
187   
188 /*! \brief Interface of the %resourcesManager
189     This interface is used for interaction with the unique instance
190     of ResourcesManager
191 */
192   interface ResourcesManager
193   {
194     //!  Find first available computer in a computers list
195     string FindFirst(in MachineList possibleComputers);
196
197     //!  Find best available computer according to policy in a computers list
198     string Find(in string policy, in MachineList possibleComputers);
199
200     //!  Get a list of computers that are best suited to launch a container given constraints 
201     /*! 
202          The constraints are resource constraints (params) and components constraints (componentList)
203     */
204     MachineList GetFittingResources( in MachineParameters params)
205                                     raises (SALOME::SALOME_Exception);
206
207     //!  Get the current machine parameters of a computer
208     MachineDefinition GetMachineParameters( in string hostname );
209
210   } ;
211 };
212   
213 #endif