Salome HOME
Updated copyright comment
[modules/jobmanager.git] / src / engine / BL_SALOMEServices.cxx
index 911e5649669bb7d23d50d5371f619e4ebdccac3e..9dd29a75024f111e9da6a1a20ce36c82f91d8250 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2009-2013  CEA/DEN, EDF R&D
+// Copyright (C) 2009-2024  CEA, EDF
 //
 // 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
@@ -61,7 +61,7 @@ bool
 BL::SALOMEServices::initNS()
 {
   bool return_value = true;
-  _salome_naming_service = new SALOME_NamingService(_orb);
+  _salome_naming_service = new BL_SALOME_NamingService_Wrapper(_orb);
   _lcc = new SALOME_LifeCycleCORBA(_salome_naming_service);
   CORBA::Object_var obj = _salome_naming_service->Resolve("/SalomeLauncher");
   _salome_launcher = Engines::SalomeLauncher::_narrow(obj);
@@ -263,6 +263,10 @@ BL::SALOMEServices::create_job(BL::Job * job)
   {
     job_parameters->job_type = CORBA::string_dup("python_salome");
   }
+  else if (job->getType() == BL::Job::COMMAND_SALOME)
+  {
+    job_parameters->job_type = CORBA::string_dup("command_salome");
+  }
 
   // Specific parameters
   if (job->getType() == BL::Job::YACS_SCHEMA)
@@ -277,6 +281,14 @@ BL::SALOMEServices::create_job(BL::Job * job)
       new_parameter->value = CORBA::string_dup(oss.str().c_str());
       job_parameters->specific_parameters[job_parameters->specific_parameters.length() - 1] = new_parameter;
     }
+    if (!job->getYacsDriverOptions().empty())
+    {
+      job_parameters->specific_parameters.length(job_parameters->specific_parameters.length() + 1);
+      Engines::Parameter_var new_parameter = new Engines::Parameter;
+      new_parameter->name = CORBA::string_dup("YACSDriverOptions");
+      new_parameter->value = CORBA::string_dup(job->getYacsDriverOptions().c_str());
+      job_parameters->specific_parameters[job_parameters->specific_parameters.length() - 1] = new_parameter;
+    }
   }
   if (job->getLoadLevelerJobType() != "")
   {
@@ -291,6 +303,7 @@ BL::SALOMEServices::create_job(BL::Job * job)
   job_parameters->job_name = CORBA::string_dup(job->getName().c_str());
   job_parameters->job_file = CORBA::string_dup(job->getJobFile().c_str());
   job_parameters->env_file = CORBA::string_dup(job->getEnvFile().c_str());
+  job_parameters->pre_command = CORBA::string_dup(job->getPreCommand().c_str());
   BL::Job::FilesParam files = job->getFilesParameters();
   std::list<std::string>::iterator it;
   int i = 0;
@@ -319,18 +332,31 @@ BL::SALOMEServices::create_job(BL::Job * job)
   job_parameters->maximum_duration = CORBA::string_dup(cpp_batch_params.maximum_duration.c_str());
   job_parameters->resource_required.name = CORBA::string_dup(job->getResource().c_str());
   job_parameters->resource_required.nb_proc = cpp_batch_params.nb_proc;
+  job_parameters->resource_required.nb_node = cpp_batch_params.nb_node;
   job_parameters->queue = CORBA::string_dup(job->getBatchQueue().c_str());
+  job_parameters->partition = CORBA::string_dup(job->getBatchPartition().c_str());
   job_parameters->exclusive = cpp_batch_params.exclusive;
+  job_parameters->wckey = CORBA::string_dup(job->getWCKey().c_str());
+  job_parameters->extra_params = CORBA::string_dup(job->getExtraParams().c_str());
 
   // Memory
-  CORBA::Long memory;
-  std::string ram = cpp_batch_params.expected_memory.substr(0,cpp_batch_params.expected_memory.size()-2);
-  std::istringstream iss(ram);
-  iss >> memory;
-  std::string unity = cpp_batch_params.expected_memory.substr(cpp_batch_params.expected_memory.size()-2, 2);
-  if((unity.find("gb") != std::string::npos))
-    memory = memory * 1024;
-  job_parameters->resource_required.mem_mb = memory;
+  switch (cpp_batch_params.mem_req_type)
+  {
+  case BL::Job::MEM_PER_NODE:
+    job_parameters->resource_required.mem_mb = cpp_batch_params.mem_limit;
+    job_parameters->mem_per_cpu = 0;
+    break;
+  case BL::Job::MEM_PER_CPU:
+    job_parameters->resource_required.mem_mb = 0;
+    job_parameters->mem_per_cpu = cpp_batch_params.mem_limit;
+    break;
+  default:
+    throw Exception("Unknown memory requirement, unable to create job");
+  }
+
+  // Unused parameters
+  job_parameters->resource_required.nb_proc_per_node = -1;
+  job_parameters->resource_required.cpu_clock = -1;
 
   // Parameters for COORM
   job_parameters->launcher_file = CORBA::string_dup(cpp_batch_params.launcher_file.c_str());
@@ -610,7 +636,11 @@ BL::SALOMEServices::get_new_job(int job_number)
     job_return->setType(job_parameters->job_type.in());
     job_return->setJobFile(job_parameters->job_file.in());
     job_return->setEnvFile(job_parameters->env_file.in());
+    job_return->setPreCommand(job_parameters->pre_command.in());
     job_return->setBatchQueue(job_parameters->queue.in());
+    job_return->setBatchPartition(job_parameters->partition.in());
+    job_return->setWCKey(job_parameters->wckey.in());
+    job_return->setExtraParams(job_parameters->extra_params.in());
 
     BL::Job::FilesParam param;
     param.result_directory = job_parameters->result_directory.in();
@@ -624,12 +654,21 @@ BL::SALOMEServices::get_new_job(int job_number)
     batch_param.batch_directory = job_parameters->work_directory.in();
     batch_param.maximum_duration = job_parameters->maximum_duration.in();
     batch_param.nb_proc = job_parameters->resource_required.nb_proc;
+    batch_param.nb_node = job_parameters->resource_required.nb_node;
     batch_param.exclusive = job_parameters->exclusive;
-    std::ostringstream mem_stream;
-    mem_stream << job_parameters->resource_required.mem_mb << "mb";
-    batch_param.expected_memory = mem_stream.str();
 
-       // Parameters for COORM
+    if (job_parameters->mem_per_cpu != 0)
+    {
+      batch_param.mem_limit = job_parameters->mem_per_cpu;
+      batch_param.mem_req_type = BL::Job::MEM_PER_CPU;
+    }
+    else
+    {
+      batch_param.mem_limit = job_parameters->resource_required.mem_mb;
+      batch_param.mem_req_type = BL::Job::MEM_PER_NODE;
+    }
+
+    // Parameters for COORM
     batch_param.launcher_file = job_parameters->launcher_file.in();
     batch_param.launcher_args = job_parameters->launcher_args.in();
 
@@ -648,6 +687,11 @@ BL::SALOMEServices::get_new_job(int job_number)
         iss >> value;
         job_return->setDumpYACSState(value);
       }
+      if (std::string(job_parameters->specific_parameters[i].name.in()) == "YACSDriverOptions")
+      {
+        std::string user_value = job_parameters->specific_parameters[i].value.in();
+        job_return->setYacsDriverOptions(user_value);
+      }
       if (std::string(job_parameters->specific_parameters[i].name.in()) == "LoalLevelerJobType")
       {
         std::string user_value = job_parameters->specific_parameters[i].value.in();