X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FTools%2Fpadder%2Fmeshjob%2Fimpl%2FMeshJobManager_i.cxx;h=71e4d502193535c184dc9cec84a67cb73287872c;hp=c968033504043b3f1d59239be4edf79e265b1da7;hb=0fc0831670e27a5611b941c52dc152fd63964515;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce diff --git a/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx b/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx index c96803350..71e4d5021 100644 --- a/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx +++ b/src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2011-2013 EDF R&D +// Copyright (C) 2011-2020 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 @@ -124,11 +124,12 @@ MeshJobManager_i::~MeshJobManager_i() { // ==================================================================== // #include // to get the file streams -#ifdef WNT +#ifdef WIN32 #include // to get _splitpath #include // to get _mkdir #else #include // to get basename +#include // to get basename - as per posix #include // to get mkdir #include // to get mkdir options #endif @@ -140,7 +141,12 @@ static std::string DATAFILE("data.txt"); 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); @@ -161,8 +167,9 @@ static std::string REMOTE_WORKDIR("/tmp/spadder.remote.workdir."+USER); * * */ -const char * MeshJobManager_i::_writeDataFile(std::vector listConcreteMesh, - std::vector listSteelBarMesh) { +const char * MeshJobManager_i::_writeDataFile(std::vector listConcreteMesh, + std::vector listSteelBarMesh, + const MESHJOB::MeshJobParameterList & meshJobParameterList) { #ifdef WIN32 _mkdir(LOCAL_INPUTDIR.c_str()); #else @@ -206,15 +213,23 @@ const char * MeshJobManager_i::_writeDataFile(std::vectorc_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. @@ -237,7 +252,7 @@ const char* MeshJobManager_i::_writeScriptFile(const char * dataFileName, const _splitpath( dataFileName, NULL, NULL, fname, NULL ); const char* bname = &fname[0]; #else - const char* bname = basename(dataFileName); + const char* bname = basename(const_cast(dataFileName)); #endif @@ -275,17 +290,18 @@ bool MeshJobManager_i::configure(const char *configId, 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 listConcreteMesh; - std::vector listSteelBarMesh; - for(CORBA::ULong i=0; i listConcreteMesh; + std::vector listSteelBarMesh; + for(CORBA::ULong i=0; i_writeDataFile(listConcreteMesh, listSteelBarMesh); + const char * dataFilename = this->_writeDataFile(listConcreteMesh, listSteelBarMesh, meshJobParameterList); LOG("dataFilename = " << dataFilename); const char * scriptFilename = this->_writeScriptFile(dataFilename, configId); LOG("scriptFilename = " << scriptFilename); @@ -355,7 +371,7 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m // 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 @@ -402,7 +418,7 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m } } - // 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); @@ -410,10 +426,10 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m 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: // >>> @@ -435,7 +451,7 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m 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; @@ -446,7 +462,7 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m // 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; @@ -456,14 +472,14 @@ CORBA::Long MeshJobManager_i::initialize(const MESHJOB::MeshJobParameterList & m // 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). // @@ -573,8 +589,8 @@ MESHJOB::MeshJobResults * MeshJobManager_i::finalize(CORBA::Long jobId) { if ( fexists( (local_resultdir+"/"+outputFileName).c_str() ) != true ) { _lastErrorMessage = std::string("The result file ")+ - std::string((local_resultdir+"/"+outputFileName).c_str())+ - std::string(" has not been created."); + std::string((local_resultdir+"/"+outputFileName).c_str())+ + std::string(" has not been created."); result->status = false; } else { @@ -651,7 +667,7 @@ std::vector * MeshJobManager_i::_getResourceNames() { LOG("### resource list:"); std::vector* resourceNames = new std::vector(); 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["< * MeshJobManager_i::_getResourceNames() { // 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; @@ -685,6 +701,7 @@ char* MeshJobManager_i::getLastErrorMessage() { // extern "C" { + MESHJOBMANAGERENGINE_EXPORT PortableServer::ObjectId * MeshJobManagerEngine_factory( CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, PortableServer::ObjectId * contId,