-// Copyright (C) 2011-2013 EDF R&D
+// Copyright (C) 2011-2016 EDF R&D
//
// 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 <direct.h> // to get _mkdir
#else
#include <unistd.h> // to get basename
+#include <libgen.h> // to get basename - as per posix
#include <sys/stat.h> // to get mkdir
#include <sys/types.h> // to get mkdir options
#endif
static std::string SCRIPTFILE("padder.sh");
static std::string SEPARATOR(" ");
+#ifdef WIN32
+static std::string USER(getenv("USERNAME"));
+#else
static std::string USER(getenv("USER"));
+#endif
+
static std::string LOCAL_INPUTDIR("/tmp/spadder.local.inputdir."+USER);
static std::string LOCAL_RESULTDIR("/tmp/spadder.local.resultdir."+USER);
static std::string REMOTE_WORKDIR("/tmp/spadder.remote.workdir."+USER);
* <steelBarMeshFile_N> <steelBarGroupName_N>
* <outputMedFile>
*/
-const char * MeshJobManager_i::_writeDataFile(std::vector<MESHJOB::MeshJobParameter> listConcreteMesh,
- std::vector<MESHJOB::MeshJobParameter> listSteelBarMesh) {
+const char * MeshJobManager_i::_writeDataFile(std::vector<MESHJOB::MeshJobFile> listConcreteMesh,
+ std::vector<MESHJOB::MeshJobFile> listSteelBarMesh,
+ const MESHJOB::MeshJobParameterList & meshJobParameterList) {
#ifdef WIN32
_mkdir(LOCAL_INPUTDIR.c_str());
#else
dataFile << line.c_str() << std::endl;
}
- // Finally, we conclude with the name of the output file
+ // We conclude the list of files with the name of the output file
line = OUTPUTFILE;
dataFile << line.c_str() << std::endl;
+
+ // We put the numerical parameters at the end of the data file
+ for(CORBA::ULong i=0; i<meshJobParameterList.length(); i++) {
+ MESHJOB::MeshJobParameter param = meshJobParameterList[i];
+ line = std::string(param.name) + " " + std::string(param.value);
+ dataFile << line.c_str() << std::endl;
+ }
+
dataFile.close();
return dataFilename->c_str();
}
/*!
- * This function creates a shell script that runs padder whith the
+ * This function creates a shell script that runs padder with the
* specified data file, and returns the path of the created script
* file. The config id is used to retrieve the path to the binary file
* and other required files.
_splitpath( dataFileName, NULL, NULL, fname, NULL );
const char* bname = &fname[0];
#else
- const char* bname = basename(dataFileName);
+ const char* bname = basename(const_cast<char *>(dataFileName));
#endif
long MeshJobManager_i::JOBID_UNDEFINED = -1;
/*! Initialize a smesh computation job and return the job identifier */
-CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & meshJobParameterList,
+CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobFileList & meshJobFileList,
+ const MESHJOB::MeshJobParameterList & meshJobParameterList,
const char * configId)
{
beginService("MeshJobManager_i::initialize");
//
// We first analyse the CORBA sequence to store data in C++ vectors
//
- std::vector<MESHJOB::MeshJobParameter> listConcreteMesh;
- std::vector<MESHJOB::MeshJobParameter> listSteelBarMesh;
- for(CORBA::ULong i=0; i<meshJobParameterList.length(); i++) {
- MESHJOB::MeshJobParameter currentMesh = meshJobParameterList[i];
+ std::vector<MESHJOB::MeshJobFile> listConcreteMesh;
+ std::vector<MESHJOB::MeshJobFile> listSteelBarMesh;
+ for(CORBA::ULong i=0; i<meshJobFileList.length(); i++) {
+ MESHJOB::MeshJobFile currentMesh = meshJobFileList[i];
switch ( currentMesh.file_type ) {
case MESHJOB::MED_CONCRETE:
listConcreteMesh.push_back(currentMesh);
// data is a text file containing the list of file names and group
// names.
//
- const char * dataFilename = this->_writeDataFile(listConcreteMesh, listSteelBarMesh);
+ const char * dataFilename = this->_writeDataFile(listConcreteMesh, listSteelBarMesh, meshJobParameterList);
LOG("dataFilename = " << dataFilename);
const char * scriptFilename = this->_writeScriptFile(dataFilename, configId);
LOG("scriptFilename = " << scriptFilename);
// Specification of the working spaces:
//
// - local_directory: can be used to specify where to find the input
- // files on the local resource. It's optionnal if you specify the
+ // files on the local resource. It's optional if you specify the
// absolute path name of input files.
//
// - result_directory: must be used to specify where to download the
}
}
- // Then, we have to specify the existance of an output filename. The
+ // Then, we have to specify the existence of an output filename. The
// path is supposed to be a path on the remote resource, i.e. where
// the job is executed.
jobParameters->out_files.length(1);
jobParameters->out_files[0] = CORBA::string_dup(outputfile_name.c_str());
// CAUTION: the maximum duration has to be set with a format like "hh:mm"
- jobParameters->maximum_duration = CORBA::string_dup("01:00");
+ //jobParameters->maximum_duration = CORBA::string_dup("01:00");
jobParameters->queue = CORBA::string_dup("");
- // Setting resource and additionnal properties (if needed)
+ // Setting resource and additional properties (if needed)
// The resource parameters can be initiated from scratch, for
// example by specifying the values in hard coding:
// >>>
resourceDefinition = _resourcesManager->GetResourceDefinition(resourceName);
}
catch (const CORBA::SystemException& ex) {
- _lastErrorMessage = std::string("We can not access to the ressource ") + std::string(resourceName);
+ _lastErrorMessage = std::string("We can not access the resource ") + std::string(resourceName);
_lastErrorMessage+= std::string("(check the file CatalogResource.xml)");
LOG(_lastErrorMessage);
return JOBID_UNDEFINED;
// Then, the values can be used to initiate the resource parameters
// of the job:
jobParameters->resource_required.name = CORBA::string_dup(resourceDefinition->name.in());
- // CAUTION: the additionnal two following parameters MUST be
+ // CAUTION: the additional two following parameters MUST be
// specified explicitly, because they are not provided by the
// resource definition:
jobParameters->resource_required.mem_mb = resourceDefinition->mem_mb;
// account not only the data that could be loaded by the batch
// process but also the linked dynamic library.
//
- // A possible problem, for exemple in the case where you use the ssh
+ // A possible problem, for example in the case where you use the ssh
// emulation of a batch system, is to get an error message as below
// when libBatch try to run the ssh command:
//
// ## /usr/bin/ssh: error while loading shared libraries: libcrypto.so.0.9.8: failed
// ## to map segment from shared object: Cannot allocate memory
//
- // In this exemple, the mem_mb was set to 1MB, value that is not
+ // In this example, the mem_mb was set to 1MB, value that is not
// sufficient to load the dynamic libraries linked to the ssh
// executable (libcrypto.so in the error message).
//
LOG("### resource list:");
std::vector<std::string>* resourceNames = new std::vector<std::string>();
if (resourceList) {
- for (int i = 0; i < resourceList->length(); i++) {
+ for ( size_t i = 0; i < resourceList->length(); i++) {
const char* aResourceName = (*resourceList)[i];
resourceNames->push_back(std::string(aResourceName));
LOG("resource["<<i<<"] = "<<aResourceName);
// SALOME application.
// In the code instructions, you just have to choose a resource
// configuration by its name and then define the ResourceParameters
- // that specify additionnal properties for a specific job submission
+ // that specify additional properties for a specific job submission
// (use the attribute resource_required of the JobParameters).
return resourceNames;
//
extern "C"
{
+ MESHJOBMANAGERENGINE_EXPORT
PortableServer::ObjectId * MeshJobManagerEngine_factory( CORBA::ORB_ptr orb,
PortableServer::POA_ptr poa,
PortableServer::ObjectId * contId,