From: barate Date: Tue, 19 Jul 2011 12:55:00 +0000 (+0000) Subject: Merge from V1_3_BR X-Git-Tag: V1_4_0rc1~1 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=e57570465fd02fd7ea993770d9696ecb16042020;p=tools%2Flibbatch.git Merge from V1_3_BR --- diff --git a/CMakeLists.txt b/CMakeLists.txt index ab678ea..84797ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,7 +56,7 @@ SET(CPACK_GENERATOR TGZ) SET(CPACK_SOURCE_GENERATOR TGZ ZIP) SET(CPACK_PACKAGE_VERSION_MAJOR 1) SET(CPACK_PACKAGE_VERSION_MINOR 3) -SET(CPACK_PACKAGE_VERSION_PATCH 0) +SET(CPACK_PACKAGE_VERSION_PATCH 1) SET(CPACK_SOURCE_IGNORE_FILES /\\\\.;/CVS/;~) SET(CPACK_SOURCE_PACKAGE_FILE_NAME ${PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) diff --git a/CMakeModules/FindPThread.cmake b/CMakeModules/FindPThread.cmake index 4315044..690fdfc 100644 --- a/CMakeModules/FindPThread.cmake +++ b/CMakeModules/FindPThread.cmake @@ -24,8 +24,25 @@ IF (NOT PThread_FIND_QUIETLY) MESSAGE(STATUS "Looking for PThread...") ENDIF (NOT PThread_FIND_QUIETLY) -FIND_PATH(PTHREAD_INCLUDE_DIR pthread.h) -FIND_LIBRARY(PTHREAD_LIBRARY NAMES pthread pthreadVC2) +IF(WIN32) + SET(PTHREADS_ROOT_USER $ENV{PTHREADS_ROOT}) + SET(PTHREADS_FIND_PATHS_OPTION NO_DEFAULT_PATH) + SET(PTHREADS_INCLUDE_TO_FIND pthread.h) + SET(PTHREADS_INCLUDE_PATHS ${PTHREADS_ROOT_USER}/include) + FIND_PATH(PTHREAD_INCLUDE_DIR ${PTHREADS_INCLUDE_TO_FIND} + PATHS ${PTHREADS_INCLUDE_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) + SET(PTHREADS_LIB_PATHS ${PTHREADS_ROOT_USER}/lib) + IF(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(PTHREAD_LIBRARY pthreadVSE2 pthreadVC2 + PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) + ELSE(CMAKE_BUILD_TYPE STREQUAL Release) + FIND_LIBRARY(PTHREAD_LIBRARY pthreadVSE2d pthreadVC2d + PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION}) + ENDIF(CMAKE_BUILD_TYPE STREQUAL Release) +ELSE(WIN32) + FIND_PATH(PTHREAD_INCLUDE_DIR pthread.h) + FIND_LIBRARY(PTHREAD_LIBRARY NAMES pthread) +ENDIF(WIN32) IF (PTHREAD_INCLUDE_DIR AND PTHREAD_LIBRARY) SET(PThread_FOUND True) diff --git a/src/LSF/Batch_JobInfo_eLSF.cxx b/src/LSF/Batch_JobInfo_eLSF.cxx index e210564..349c575 100644 --- a/src/LSF/Batch_JobInfo_eLSF.cxx +++ b/src/LSF/Batch_JobInfo_eLSF.cxx @@ -56,40 +56,46 @@ namespace Batch { _param[ID] = oss.str(); // read status of job in log file - char line[128]; - ifstream fp(logFile.c_str(),ios::in); - fp.getline(line,80,'\n'); - - string sjobid, username, status; - fp >> sjobid; - fp >> username; - fp >> status; - - if (status == "PEND") { // Pending - _param[STATE] = QUEUED; - } else if (status == "PSUSP") { // Suspended while pending - _param[STATE] = PAUSED; - } else if (status == "RUN") { // Running - _param[STATE] = RUNNING; - } else if (status == "USUSP") { // Suspended while running - _param[STATE] = PAUSED; - } else if (status == "SSUSP") { // Suspended by LSF - _param[STATE] = PAUSED; - } else if (status == "DONE") { // Finished successfully + string line; + ifstream fp(logFile.c_str()); + getline(fp, line); + + // On some batch managers, the job is deleted soon after it is finished, + // so we have to consider that an unknown job (empty file) is a finished + // one, even if it is not always true. + if (fp.eof()) { _param[STATE] = FINISHED; - } else if (status == "EXIT") { // Finished in error - _param[STATE] = FAILED; - } else if (status == "UNKWN") { // Lost contact - _param[STATE] = FAILED; - } else if (status == "ZOMBI") { // Zombie - _param[STATE] = FAILED; } else { - cerr << "Unknown job state code: " << status << endl; + string sjobid, username, status; + fp >> sjobid; + fp >> username; + fp >> status; + + if (status == "PEND") { // Pending + _param[STATE] = QUEUED; + } else if (status == "PSUSP") { // Suspended while pending + _param[STATE] = PAUSED; + } else if (status == "RUN") { // Running + _param[STATE] = RUNNING; + } else if (status == "USUSP") { // Suspended while running + _param[STATE] = PAUSED; + } else if (status == "SSUSP") { // Suspended by LSF + _param[STATE] = PAUSED; + } else if (status == "DONE") { // Finished successfully + _param[STATE] = FINISHED; + } else if (status == "EXIT") { // Finished in error + _param[STATE] = FAILED; + } else if (status == "UNKWN") { // Lost contact + _param[STATE] = FAILED; + } else if (status == "ZOMBI") { // Zombie + _param[STATE] = FAILED; + } else { + cerr << "Unknown job state code: " << status << endl; + } + + if( status.find("RUN") != string::npos) + _running = true; } - - if( status.find("RUN") != string::npos) - _running = true; - } // Teste si un job est present en machine diff --git a/src/Slurm/Batch_BatchManager_eSlurm.cxx b/src/Slurm/Batch_BatchManager_eSlurm.cxx index e20775b..c6bcbc8 100644 --- a/src/Slurm/Batch_BatchManager_eSlurm.cxx +++ b/src/Slurm/Batch_BatchManager_eSlurm.cxx @@ -242,9 +242,10 @@ namespace Batch { command += " > "; command += logFile; cerr << command.c_str() << endl; - int status = system(command.c_str()); - if (status != 0) - throw EmulationException("Can't query job " + jobid.getReference()); + system(command.c_str()); + // We don't test the return code here because with jobs finished since a long time Slurm + // returns an error and a message like "slurm_load_jobs error: Invalid job id specified". + // So we consider that the job is finished when we get an error. JobInfo_eSlurm jobinfo = JobInfo_eSlurm(jobid.getReference(), logFile); return jobinfo;