Salome HOME
[EDF29576] : Synchronous Shutdown of containers
[modules/kernel.git] / idl / SALOME_ContainerManager.idl
index b15f357f728f8313eaa60c9c716b6b45ce20a8b4..d06c3c06bfea8d8c9db0109aa27f464627c47ded 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 #include "SALOME_Exception.idl"
 #include "SALOME_Component.idl"
+#include "SALOME_ResourcesManager.idl"
 
-/*! \file SALOME_ContainerManager.idl \brief interfaces for %SALOME launcher and container manager
+/*! \file SALOME_ContainerManager.idl \brief interfaces for %SALOME Container Manager service
 */
 
 module Engines
 {
 
-//!  Type to transmit list of resources.
-typedef sequence<string> ResourceList;
-//! components list
-typedef sequence<string> CompoList;
-//! files list
-typedef sequence<string> FilesList;
-//! modules list
-typedef sequence<string> ModulesList;
-
-//! A generic parameter
-struct Parameter
-{
-  string name;
-  string value;
-};
-//! Generic parameter list
-typedef sequence<Engines::Parameter> ParameterList;
-
-//! Type to describe required properties of a resource
-struct ResourceParameters
-{
-  //! resource name - manual selection
-  string name;
-  //! host name
-  string hostname;
-  //! if given required operating system 
-  string OS;
-  //! if given list of components that could be loaded on a container
-  //! Optional if no resource are found with this constraint
-  CompoList componentList;
-
-  // Permits to order resources
-  //! required number of proc
-  long nb_proc;
-  //! required memory size
-  long mem_mb;
-  //! required frequency
-  long cpu_clock;
-  //! required number of node
-  long nb_node;
-  //! required number of proc per node
-  long nb_proc_per_node;
-
-  // Permits to configure SALOME resource management
-  //! resource management policy : first, cycl, altcycl or best (can be extended)
-  string policy;
-  //! restricted list of resources to search in
-  ResourceList resList;
-};
-
 //! Type to describe required properties of a container
 struct ContainerParameters
 {
@@ -89,9 +40,15 @@ struct ContainerParameters
   string container_name;
 
   //! creation mode for GiveContainer if given else automatic 
-  /*!start creates a new container
-   * get  try to find an existing container
-   * getorstart   use an existing container if it exists or creates a new one
+  /*! List of possible values:
+   * "find" : search the first container whose name is container_name on
+   *          resources listed in resource_params.resList.
+   *          Return nil if none found.
+   * "findorstart" : same as "find", but start a new container if none found.
+   * "start" : create a new container. If there is already a container with the
+   *           same name on the chosen resource, it will be shut down.
+   * "get" : search an existing container on the best fitting resource.
+   * "getorstart" : same as "get", but start a new container if none found.
    */
   string mode;
 
@@ -103,142 +60,21 @@ struct ContainerParameters
   long nb_proc;
   //! if true start a MPI container
   boolean isMPI;
-  //! PaCO specific informations
+  //! PaCO specific information
   string parallelLib;
 
   //! Parameters to choose a resource
   ResourceParameters resource_params;
 };
 
-//!  Type to describe a resource
-struct ResourceDefinition
-{
-  //! name 
-  string name;
-  //! hostname 
-  string hostname;
-  //! protocol to connect to the resource
-  //! protocol used to start a remote container (ssh or rsh)
-  string protocol;
-  //! login name to use to start a remote container
-  string username;
-  //! salome application to use to start a remote container
-  string applipath;
-  //! list of available components 
-  CompoList componentList;
-  //! Type of resource: interactive or batch
-  string mode;
-
-  //! operating system 
-  string OS;
-  //! memory size per node
-  long mem_mb;
-  //! frequency
-  long cpu_clock;
-  //! number of node
-  long nb_node;
-  //! number of proc per node
-  long nb_proc_per_node;
-  //! batch system
-  string batch;
-  //! MPI implementation
-  string mpiImpl;
-  //! if the resource is a cluster:
-  //! internal protocol to use to start a remote container (ssh or rsh) on the cluster
-  string iprotocol;
-
-  //! Specify if the resource is a cluster head;
-  boolean is_cluster_head;
-
-  //! Predefined working directory on the resource
-  string working_directory;
-};
-
-//! exception thrown if a computer is not found in the catalog
-exception NotFound {};
-
-struct JobParameters
-{
-  string job_name;
-  //! Job Type - Could be equal to "command" or "yacs_file" or "python_salome"
-  string job_type;
-
-  // Common values
-  string job_file;
-  string env_file; 
-  FilesList in_files;
-  FilesList out_files;
-  string work_directory;
-  string local_directory;
-  string result_directory;
-
-  /*! Time for the batch (has to be like this : hh:mm) - Could be empty, in
-       this case, default value of the selected resource will be used.
-  */
-  string maximum_duration; 
-
-  // Memory is expressed in megabytes -> mem_mb
-  // Number of Processors -> nb_proc
-  ResourceParameters resource_required;
-
-  /*!
-    Name of the batch queue choosed - optional
-  */
-  string queue;
-
-  /*!
-    Specific parameters for each type of job - optional
-  */
-  Engines::ParameterList specific_parameters;
-};
-
-struct JobDescription
-{
-  long job_id;
-  Engines::JobParameters job_parameters;
-};
-typedef sequence<Engines::JobDescription> JobsList;
-
-interface SalomeLauncherObserver
+struct KeyValPairString
 {
-  void notify(in string event_name, in string event_data);
+  string key;
+  string val;
 };
 
-/*! \brief Interface of the %salomelauncher
-    This interface is used for interaction with the unique instance
-    of SalomeLauncher
-*/
-interface SalomeLauncher
-{
-  // Main methods
-  long   createJob    (in Engines::JobParameters job_parameters) raises (SALOME::SALOME_Exception);
-  void   launchJob    (in long job_id)                           raises (SALOME::SALOME_Exception);
-  string getJobState  (in long job_id)                           raises (SALOME::SALOME_Exception);
-  void   getJobResults(in long job_id, in string directory)      raises (SALOME::SALOME_Exception);
-  boolean getJobDumpState(in long job_id, in string directory)   raises (SALOME::SALOME_Exception);
-  void   stopJob      (in long job_id)                           raises (SALOME::SALOME_Exception);
-  void   removeJob    (in long job_id)                           raises (SALOME::SALOME_Exception);
-
-  // Useful methods
-  long    createJobWithFile(in string xmlJobFile, in string clusterName) raises (SALOME::SALOME_Exception);
-  boolean testBatch        (in ResourceParameters params)                raises (SALOME::SALOME_Exception);
-
-  // SALOME kernel service methods
-  void Shutdown();
-  long getPID();
-
-  // Observer and introspection methods
-  void addObserver(in Engines::SalomeLauncherObserver observer);
-  void removeObserver(in Engines::SalomeLauncherObserver observer);
-  Engines::JobsList getJobsList();
-  Engines::JobParameters getJobParameters(in long job_id) raises (SALOME::SALOME_Exception);
+typedef sequence<KeyValPairString> KeyValDict;
 
-  // Save and load methods
-  void loadJobs(in string jobs_file) raises (SALOME::SALOME_Exception);
-  void saveJobs(in string jobs_file) raises (SALOME::SALOME_Exception);
-
-};
-  
 /*! \brief Interface of the %containerManager
     This interface is used for interaction with the unique instance
     of ContainerManager
@@ -250,91 +86,31 @@ interface ContainerManager
   //! Currently: get, start, getorstart, findorstart, find
   Container GiveContainer(in ContainerParameters params) raises (SALOME::SALOME_Exception);
 
-  //!  Shutdown all containers that have been launched by the container manager
+  //!  Shutdown all containers that have been launched by the container manager. This termination is soft. It means that orb.shutdown is invoked meaning that completion of all CORBA
   void ShutdownContainers();
-} ;
   
-/*! \brief Interface of the %resourcesManager
-    This interface is used for interaction with the unique instance
-    of ResourcesManager
-*/
-interface ResourcesManager
-{
-  //!  Find first available resource in a resources list
-  string FindFirst(in ResourceList possibleResources);
+  //!  Stronger version than ShutdownContainers. This method does not wait for completion of last CORBA invokation on containers. It terminates them
+  void ShutdownContainersNow();
 
-  //!  Find best available computer according to policy in a computers list
-  string Find(in string policy, in ResourceList possibleResources);
+  long GetTimeOutToLaunchServerInSecond();
 
-  //!  Get a list of resources that are best suited to launch a container given constraints 
-  /*! 
-       The constraints are resource constraints (params) and components constraints (componentList)
-  */
-  ResourceList GetFittingResources(in ResourceParameters params) raises (SALOME::SALOME_Exception);
+  void SetTimeOutToLaunchServerInSecond(in long timeInSecond);
 
-  //!  Get definition of a resource
-  ResourceDefinition GetResourceDefinition(in string name);
+  long GetDeltaTimeBetweenNSLookupAtLaunchTimeInMilliSecond();
 
-  //! Add a new resource to the resource_manager
-  /*!
-      write -> true, resource manager will add it into a xml_file
-      xml_file -> could be empty, in this case if write is true, resource manager will write
-      the resource in its first ResourceCatalog file
-    */
-  void AddResource(in ResourceDefinition new_resource, in boolean write, in string xml_file) 
-    raises (SALOME::SALOME_Exception);
+  void SetDeltaTimeBetweenNSLookupAtLaunchTimeInMilliSecond(in long timeInMS);
+  
+  long GetDeltaTimeBetweenCPUMemMeasureInMilliSecond();
 
-  //! Remove a new resource to the resource_manager
-  /*!
-      write -> true, resource manager will write a new xml_file
-      xml_file -> could be empty, in this case if write is true, resource manager will write
-      the resource in its first ResourceCatalog file
-    */
-  void RemoveResource(in string resource_name, in boolean write, in string xml_file) 
-    raises (SALOME::SALOME_Exception);
-};
+  void SetDeltaTimeBetweenCPUMemMeasureInMilliSecond(in long timeInMS);
 
+  void SetOverrideEnvForContainers(in KeyValDict env);
 
-// For compatibility - will be erased on SALOME 6
-typedef sequence<string> MachineList;
-//!  Type to describe required properties of a container.
-struct MachineParameters
-{
-  //! container name if given else automatic
-  string container_name;
-  //! host name if given else automatic
-  string hostname;
-  //! if given list of components that could be loaded on the container
-  CompoList componentList;
-  //! if given restricted list of machines to search in
-  MachineList computerList;
-  //! required operating system 
-  string OS;
-  //! required memory size
-  long mem_mb;
-  //! required frequency
-  long cpu_clock;
-  //! required number of proc per node
-  long nb_proc_per_node;
-  //! required number of node
-  long nb_node;
-  //! if true start a MPI container
-  boolean isMPI;
-  //! container working directory 
-  string workingdir;
-  //! creation mode for GiveContainer. 
-  /*!start creates a new container
-   * get  try to find an existing container
-   * getorstart   use an existing container if it exists or creates a new one
-   */
-  string mode;
-  //! resource management policy : first, cycl, altcycl or best (can be extended)
-  string policy;
+  KeyValDict GetOverrideEnvForContainers();
+
+  void SetCodeOnContainerStartUp(in string code);
+} ;
 
-  //! PaCO specific informations
-  string parallelLib;
-  long nb_component_nodes;
-};
 };
   
 #endif