Skip to content
Snippets Groups Projects
Commit 218ddef2 authored by Olivier Langella's avatar Olivier Langella
Browse files

first condor support

parent e69218d3
No related branches found
Tags xtpcpp_0.1.17-2
No related merge requests found
......@@ -50,8 +50,9 @@ TandemCondorProcess::TandemCondorProcess(WorkMonitorInterface * p_monitor, const
*/
QSettings settings;
QString condor_tmp_dir = QString("%1/xtpcpp").arg(settings.value("condor/tmp_dir", "/gorgone/pappso/temp").toString());
QString condor_tmp_dir = QString("%1/xtpcpp").arg(settings.value("condor/tmp_dir", "/tmp").toString());
_p_tmp_dir = new QTemporaryDir(condor_tmp_dir);
_p_tmp_dir->setAutoRemove(true);
_condor_submit_command = settings.value("condor/submit", "/usr/bin/condor_submit").toString();
......@@ -87,7 +88,7 @@ void TandemCondorProcess::prepareXmlDatabaseFile() {
}
void TandemCondorProcess::run() {
qDebug() << "TandeCondorProcess::run begin ";
qDebug() << "TandemCondorProcess::run begin ";
QFileInfo preset_info(_tandem_run_batch._preset_file);
_preset_file = QString("%1/%2").arg(_p_tmp_dir->path()).arg(preset_info.fileName());
QFile::copy(_tandem_run_batch._preset_file, _preset_file);
......@@ -111,9 +112,9 @@ void TandemCondorProcess::run() {
*p_out << "request_memory= 50000" << endl;
*p_out << "request_cpus = 1" << endl;
*p_out << "Executable = " << _tandem_run_batch._tandem_bin_path << endl;
*p_out << "Log = \"" << _p_tmp_dir->path() << "/condor.log\"" << endl;
*p_out << "Output = \"" << _p_tmp_dir->path() << "/tandem.$(Process).out\"" << endl;
*p_out << "Error = \"" << _p_tmp_dir->path() << "/tandem.$(Process).error\"" << endl;
*p_out << "Log = " << _p_tmp_dir->path() << "/condor.log" << endl;
*p_out << "Output = " << _p_tmp_dir->path() << "/tandem.$(Process).out" << endl;
*p_out << "Error = " << _p_tmp_dir->path() << "/tandem.$(Process).error" << endl;
/*
Log = /gorgone/pappso/tmp/temp_condor_job93294001891239208719639434471283743/submit_condor.log
Output = /gorgone/pappso/tmp/temp_condor_job93294001891239208719639434471283743/tandem.$(Process).out
......@@ -136,7 +137,7 @@ void TandemCondorProcess::run() {
for (QString mz_file : _tandem_run_batch._mz_file_list) {
QTemporaryFile * p_xml_input_file = new QTemporaryFile(_p_tmp_dir->path());
QTemporaryFile * p_xml_input_file = new QTemporaryFile(QString("%1/tandem").arg(_p_tmp_dir->path()));
input_file_list.push_back(p_xml_input_file);
p_xml_input_file->setAutoRemove(false);
......@@ -151,7 +152,7 @@ void TandemCondorProcess::run() {
delete p_xml_out;
*p_out << "Arguments = \"" << QFileInfo( p_xml_input_file->fileName()).absolutePath() << "\"" << endl;
*p_out << "Arguments = " << QFileInfo( p_xml_input_file->fileName()).absoluteFilePath() << endl;
*p_out << "Queue" << endl;
} else
{
......@@ -169,9 +170,9 @@ void TandemCondorProcess::run() {
delete p_out;
}
//now run condor job on submit_file
QStringList arguments;
......@@ -179,6 +180,7 @@ void TandemCondorProcess::run() {
QProcess * condor_process = new QProcess();
//hk_process->setWorkingDirectory(QFileInfo(_hardklor_exe).absolutePath());
qDebug() << "TandemCondorProcess::run command " << _condor_submit_command << " " << arguments.join(" ");
condor_process->start(_condor_submit_command, arguments);
......@@ -186,10 +188,36 @@ void TandemCondorProcess::run() {
throw pappso::PappsoException(QObject::tr("HTCondor X!Tandem process failed to start"));
}
while(condor_process->waitForReadyRead(_max_xt_time_ms)) {
_p_monitor->appendText( condor_process->readAll().data());
//data.append(xt_process->readAll());
if (!condor_process->waitForFinished(_max_xt_time_ms)) {
throw pappso::PappsoException(QObject::tr("HTCondor X!Tandem process failed to finish"));
}
QString perr = condor_process->readAllStandardError();
if (perr.length()) {
qDebug() << "TandemCondorProcess::run readAllStandardError " << perr;
throw pappso::PappsoException(QObject::tr("HTCondor X!Tandem process failed :\n%1").arg(perr));
}
else {
qDebug() << "TandemCondorProcess::run readAllStandardError OK " << perr;
}
QString pjob = condor_process->readAllStandardOutput();
if (pjob.length()) {
qDebug() << "TandemCondorProcess::run readAllStandardOutput OK " << pjob;
}
else {
qDebug() << "TandemCondorProcess::run readAllStandardOutput " << pjob;
throw pappso::PappsoException(QObject::tr("HTCondor X!Tandem process failed :\n%1").arg(pjob));
}
//Submitting job(s).\n1 job(s) submitted to cluster 29.\n
parseCondorJobNumber(pjob);
_p_monitor->setProgressMaximumValue(_condor_job_size);
qDebug() << "TandemCondorProcess::run job=" << _condor_cluster_number << " size=" << _condor_job_size;
/*
if (!xt_process->waitForFinished(_max_xt_time_ms)) {
throw pappso::PappsoException(QObject::tr("can't wait for X!Tandem process to finish : timeout at %1").arg(_max_xt_time_ms));
......@@ -199,6 +227,7 @@ void TandemCondorProcess::run() {
QProcess::ExitStatus Status = condor_process->exitStatus();
qDebug() << "TandemCondorProcess::run ExitStatus " << Status << result.data();
if (Status != 0)
{
// != QProcess::NormalExit
......@@ -206,6 +235,177 @@ void TandemCondorProcess::run() {
}
delete condor_process;
qDebug() << "TandeCondorProcess::run end" ;
//condor is running job : we have to survey condor job using "condor_q -xml _condor_cluster_number"
surveyCondorJob();
qDebug() << "TandemCondorProcess::run end" ;
}
void TandemCondorProcess::surveyCondorJob() {
/*
package fr.inra.pappso.xtandempipeline.sax_parse;
import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import fr.inra.pappso.xtandempipeline.MsException.MSMSException;
import fr.inra.pappso.xtandempipeline.thread.XtandemCondorAnalysis;
public class HandlerHTCondorQueue extends SaxBaseHandler {
private static final Logger logger = Logger
.getLogger(HandlerHTCondorQueue.class);
private Object inName;
private Integer currentProcId;
private Integer currentJobStatus;
private String currentRemoteHost;
private String currentLastRemoteHost;
private int junexpanded = 0;
private int jidle = 0;
private int jrunning = 0;
private int jremoved = 0;
private int jcompleted = 0;
private int jheld = 0;
private int jsubmission_error = 0;
private XtandemCondorAnalysis xtandemCondorAnalysis;
private boolean empty = true;
public HandlerHTCondorQueue(XtandemCondorAnalysis xtandemCondorAnalysis)
throws MSMSException {
super();
this.xtandemCondorAnalysis = xtandemCondorAnalysis;
}
@Override
public void startDocument() throws SAXException {
this.empty = true;
}
@Override
public void endDocument() throws SAXException {
int reallyCompletedJobs = 0;
if (this.empty) {
reallyCompletedJobs = xtandemCondorAnalysis.getCondorJobNumber();
} else {
int totalJobs = junexpanded + jidle + jrunning + jremoved
+ jcompleted + jheld + jsubmission_error;
int diffJobs = xtandemCondorAnalysis.getCondorJobNumber()
- totalJobs;
reallyCompletedJobs = jcompleted + diffJobs;
}
xtandemCondorAnalysis.setJobCompleted(junexpanded, jidle, jrunning,
jremoved, reallyCompletedJobs, jheld, jsubmission_error);
String statusMessage = "" + junexpanded + " unexpanded jobs\n";
statusMessage += jidle + " idle jobs\n";
statusMessage += jrunning + " running jobs\n";
statusMessage += jremoved + " removed jobs\n";
statusMessage += reallyCompletedJobs + " completed jobs\n";
statusMessage += jheld + " held jobs\n";
statusMessage += jsubmission_error + " submission_errors\n";
logger.debug(statusMessage);
xtandemCondorAnalysis.setStatusMessage(statusMessage);
}
// <c>
// <a n="ProcId"><i>0</i></a>
public void startElementc(String nameSpaceUri, Attributes attrs) {
this.empty = false;
currentProcId = null;
currentJobStatus = null;
currentRemoteHost = null;
currentLastRemoteHost = null;
}
public void startElementa(String nameSpaceUri, Attributes attrs) {
// logger.debug("startElementgroup begin");
// <group label="performance parameters" type="parameters">
this.inName = attrs.getValue("n");
}
public void endElementi(String nameSpaceUri, String data)
throws MSMSException {
if (inName.equals("ProcId")) {
this.currentProcId = new Integer(data);
// logger.debug(currentProcId);
} else if (inName.equals("JobStatus")) {
// <a n="JobStatus"><i>2</i></a>
this.currentJobStatus = new Integer(data);
// logger.debug(currentProcId);
}
}
public void endElements(String nameSpaceUri, String data)
throws MSMSException {
if (inName.equals("RemoteHost")) {
// <a n="RemoteHost"><s>slot1@proteus3</s></a>
this.currentRemoteHost = data;
// logger.debug(currentProcId);
} else if (inName.equals("LastRemoteHost")) {
// <a n="LastRemoteHost"><s>slot1@proteus4</s></a>
this.currentLastRemoteHost = data;
// logger.debug(currentProcId);
}
}
public void endElementa(String nameSpaceUri, String data) {
this.inName = "";
}
public void endElementc(String nameSpaceUri, String data)
throws MSMSException {
/*
* 0 Unexpanded U 1 Idle I 2 Running R 3 Removed X 4 Completed C 5 Held
* H 6 Submission_err E
*
if (currentJobStatus == 0) {
this.junexpanded += 1;
} else if (currentJobStatus == 1) {
this.jidle += 1;
} else if (currentJobStatus == 2) {
this.jrunning += 1;
} else if (currentJobStatus == 3) {
this.jremoved += 1;
} else if (currentJobStatus == 4) {
this.jcompleted += 1;
} else if (currentJobStatus == 5) {
this.jheld += 1;
} else if (currentJobStatus == 6) {
this.jsubmission_error += 1;
}
logger.debug("currentRemoteHost:" + this.currentRemoteHost
+ " currentLastRemoteHost" + this.currentLastRemoteHost + " "
+ currentJobStatus);
}
}
*/
}
void TandemCondorProcess::parseCondorJobNumber(QString condor_job) {
// Submitting job(s)...
// 3 job(s) submitted to cluster 3.
QRegExp txt_submit("([0-9]*) job\\(s\\) submitted to cluster ([0-9]*).");
if (txt_submit.indexIn(condor_job, 0) != -1) {
_condor_cluster_number = txt_submit.cap(2).toUInt();
_condor_job_size = txt_submit.cap(1).toUInt();
}
else {
throw pappso::PappsoException(QObject::tr("unable to find HTCondor job numbers in %1").arg(condor_job));
}
}
......@@ -41,9 +41,15 @@ public:
virtual void prepareXmlDatabaseFile();
virtual void run();
private :
void parseCondorJobNumber(QString condor_job);
void surveyCondorJob();
private:
QTemporaryDir * _p_tmp_dir;
QString _condor_submit_command;
unsigned int _condor_cluster_number;
unsigned int _condor_job_size;
};
......
......@@ -38,6 +38,8 @@
#include "mainwindow.h"
#include "project_view/projectwindow.h"
#include "../core/tandem_run/tandembatchprocess.h"
#include "../core/tandem_run/tandemcondorprocess.h"
#include <QSettings>
WorkerThread::WorkerThread(MainWindow * p_main_window)
{
......@@ -51,10 +53,10 @@ WorkerThread::WorkerThread(MainWindow * p_main_window)
connect(_p_work_monitor, &WorkMonitor::workerMessage, p_main_window,&MainWindow::doDisplayLoadingMessage);
connect(_p_work_monitor, &WorkMonitor::workerMessagePercent, p_main_window,&MainWindow::doDisplayLoadingMessagePercent);
connect(_p_work_monitor, &WorkMonitor::workerAppendText, p_main_window,&MainWindow::doWorkerAppendText);
connect(p_main_window, &MainWindow::operateXpipFile, this,&WorkerThread::doXpipFileLoad);
connect(this, &WorkerThread::projectReady, p_main_window,&MainWindow::doProjectReady);
connect(p_main_window, &MainWindow::operateLoadingResults, this,&WorkerThread::doLoadingResults);
connect(p_main_window, &MainWindow::operateRunningXtandem, this,&WorkerThread::doRunningXtandem);
......@@ -72,7 +74,7 @@ WorkerThread::WorkerThread(MainWindow * p_main_window)
connect(p_main_window, &MainWindow::operateWritingOdsFile, this,&WorkerThread::doWritingOdsFile);
connect(this, &WorkerThread::operationFailed, p_main_window,&MainWindow::doOperationFailed);
connect(this, &WorkerThread::operationFinished, p_main_window,&MainWindow::doOperationFinished);
#else
// Qt4 code
//worker message
......@@ -112,7 +114,7 @@ WorkerThread::WorkerThread(ProjectWindow * p_project_window)
#if QT_VERSION >= 0x050000
// Qt5 code
//worker message
connect(_p_work_monitor, &WorkMonitor::workerMessage, p_project_window,&ProjectWindow::doDisplayLoadingMessage);
connect(_p_work_monitor, &WorkMonitor::workerMessagePercent, p_project_window,&ProjectWindow::doDisplayLoadingMessagePercent);
......@@ -172,7 +174,7 @@ void WorkerThread::doXpipFileLoad(QString filename) {
try {
QFileInfo new_xpip_file(filename);
emit loadingMessage(tr("loading XPIP file"));
qDebug() << "WorkerThread::doXpipFileLoad new_xpip_file "<< new_xpip_file.absoluteFilePath();
qDebug() << "WorkerThread::doXpipFileLoad new_xpip_file "<< new_xpip_file.absoluteFilePath();
XpipFile xpip_file(new_xpip_file);
ProjectSp project_sp = xpip_file.getProjectSp(_p_work_monitor);
......@@ -333,8 +335,17 @@ void WorkerThread::doRunningXtandem(TandemRunBatch tandem_run_batch) {
emit loadingMessage(tr("Running X!Tandem, please wait"));
qDebug() << "WorkerThread::doRunningXtandem tandem_run_batch " << tandem_run_batch._tandem_bin_path;
TandemBatchProcess xt_process (_p_work_monitor, tandem_run_batch);
xt_process.run();
QSettings settings;
QString default_location = settings.value("condor/tmp_dir", "").toString();
if (default_location.isEmpty()) {
TandemBatchProcess xt_process (_p_work_monitor, tandem_run_batch);
xt_process.run();
}
else {
TandemCondorProcess xt_process (_p_work_monitor, tandem_run_batch);
xt_process.run();
}
emit operationFinished();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment