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

execute condor batch process

parent ea8b1a84
No related branches found
No related tags found
No related merge requests found
......@@ -38,6 +38,8 @@ TandemBatchProcess::TandemBatchProcess(WorkMonitorInterface * p_monitor, const T
_p_monitor = p_monitor;
}
TandemBatchProcess::~TandemBatchProcess() {
}
void TandemBatchProcess::writeXmlDatabaseFile (QXmlStreamWriter * p_out) {
p_out->setAutoFormatting(true);
p_out->writeStartDocument("1.0");
......@@ -65,18 +67,19 @@ void TandemBatchProcess::writeXmlDatabaseFile (QXmlStreamWriter * p_out) {
}
void TandemBatchProcess::prepareXmlDatabaseFile() {
_xml_database_file.setAutoRemove(false);
_tmp_database_file.setAutoRemove(true);
if (_xml_database_file.open())
if (_tmp_database_file.open())
{
_xml_database_file = QFileInfo( _tmp_database_file.fileName()).absoluteFilePath();
QXmlStreamWriter * p_out = new QXmlStreamWriter();
p_out->setDevice(&_xml_database_file);
p_out->setDevice(&_tmp_database_file);
writeXmlDatabaseFile(p_out);
_xml_database_file.close();
_tmp_database_file.close();
delete p_out;
} else
{
throw pappso::PappsoException(QObject::tr("error : cannot open the XML database file : %1\n").arg(_xml_database_file.fileName()));
throw pappso::PappsoException(QObject::tr("error : cannot open the XML database file : %1\n").arg(_tmp_database_file.fileName()));
}
}
......@@ -127,7 +130,7 @@ void TandemBatchProcess::writeXmlInputFile (QXmlStreamWriter * p_out, const QStr
p_out->writeStartElement("note");
p_out->writeAttribute("type","input");
p_out->writeAttribute("label","list path, taxonomy information");
p_out->writeCharacters(_xml_database_file.fileName());
p_out->writeCharacters(_xml_database_file);
p_out->writeEndElement();
......
......@@ -38,12 +38,13 @@ class TandemBatchProcess
{
public:
TandemBatchProcess(WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch);
virtual ~TandemBatchProcess();
virtual void run();
protected:
void writeXmlDatabaseFile (QXmlStreamWriter * p_out);
void writeXmlInputFile (QXmlStreamWriter * p_out, const QString & mz_file);
void prepareXmlDatabaseFile();
virtual void prepareXmlDatabaseFile();
private:
void runOne(const QString & mz_file);
......@@ -51,10 +52,13 @@ protected:
QString _preset_file;
TandemRunBatch _tandem_run_batch;
WorkMonitorInterface * _p_monitor;
QTemporaryFile _xml_database_file;
QString _xml_database_file;
int _max_xt_time_ms = (60000 * 60 * 24); //1 day
private:
int _max_xt_time_ms = (60000 * 60 * 24); //1 day
QTemporaryFile _tmp_database_file;
};
#endif // TANDEMBATCHPROCESS_H
......@@ -30,6 +30,8 @@
#include "tandemcondorprocess.h"
#include <QDebug>
#include <pappsomspp/pappsoexception.h>
#include <QSettings>
#include <QProcess>
TandemCondorProcess::TandemCondorProcess(WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch) : TandemBatchProcess(p_monitor, tandem_run_batch) {
/*
......@@ -46,14 +48,87 @@ TandemCondorProcess::TandemCondorProcess(WorkMonitorInterface * p_monitor, const
Arguments = /gorgone/pappso/tmp/temp_condor_job93294001891239208719639434471283743/xtandem_param2054956555872858570.xml
Queue
*/
QSettings settings;
QString condor_tmp_dir = QString("%1/xtpcpp").arg(settings.value("condor/tmp_dir", "/gorgone/pappso/temp").toString());
_p_tmp_dir = new QTemporaryDir(condor_tmp_dir);
_condor_submit_command = settings.value("condor/submit", "/usr/bin/condor_submit").toString();
if (!_p_tmp_dir->isValid()) {
// dir.path() returns the unique directory path
throw pappso::PappsoException(QObject::tr("problem creating condor temporary directory in %1\n").arg(condor_tmp_dir));
}
}
TandemCondorProcess::~TandemCondorProcess () {
delete _p_tmp_dir;
}
void TandemCondorProcess::prepareXmlDatabaseFile() {
QFile xml_database_file(QString("%1/database.xml").arg(_p_tmp_dir->path()));
if (xml_database_file.open(QIODevice::WriteOnly))
{
_xml_database_file = QFileInfo( xml_database_file.fileName()).absoluteFilePath();
QXmlStreamWriter * p_out = new QXmlStreamWriter();
p_out->setDevice(&xml_database_file);
writeXmlDatabaseFile(p_out);
xml_database_file.close();
delete p_out;
} else
{
throw pappso::PappsoException(QObject::tr("error : cannot open the XML database file : %1\n").arg(xml_database_file.fileName()));
}
}
void TandemCondorProcess::run() {
qDebug() << "TandeCondorProcess::run begin " << _tandem_run_batch._preset_file;
qDebug() << "TandeCondorProcess::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);
_preset_file = _tandem_run_batch._preset_file;
prepareXmlDatabaseFile();
//condor submit file :
QFile submit_file(QString("%1/submit.txt").arg(_p_tmp_dir->path()));
QTextStream * p_out = nullptr;
if (submit_file.open(QIODevice::WriteOnly))
{
p_out = new QTextStream();
p_out->setDevice(&submit_file);
*p_out << "Universe = vanilla" << endl;
*p_out << "notification = Error" << endl;
*p_out << "Rank = Mips" << endl;
*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;
/*
Log = /gorgone/pappso/tmp/temp_condor_job93294001891239208719639434471283743/submit_condor.log
Output = /gorgone/pappso/tmp/temp_condor_job93294001891239208719639434471283743/tandem.$(Process).out
Error = /gorgone/pappso/tmp/temp_condor_job93294001891239208719639434471283743/tandem.$(Process).error
Arguments = /gorgone/pappso/tmp/temp_condor_job93294001891239208719639434471283743/xtandem_param2054956555872858570.xml
Queue
*/
} else
{
throw pappso::PappsoException(QObject::tr("error : cannot open condor submit file : %1\n").arg(submit_file.fileName()));
}
std::vector<QTemporaryFile *> input_file_list;
int i=0;
......@@ -61,19 +136,23 @@ void TandemCondorProcess::run() {
for (QString mz_file : _tandem_run_batch._mz_file_list) {
QTemporaryFile * p_xml_input_file = new QTemporaryFile();
QTemporaryFile * p_xml_input_file = new QTemporaryFile(_p_tmp_dir->path());
input_file_list.push_back(p_xml_input_file);
p_xml_input_file->setAutoRemove(false);
if (p_xml_input_file->open())
{
QXmlStreamWriter * p_out = new QXmlStreamWriter();
p_out->setDevice(p_xml_input_file);
QXmlStreamWriter * p_xml_out = new QXmlStreamWriter();
p_xml_out->setDevice(p_xml_input_file);
writeXmlInputFile(p_out, mz_file);
writeXmlInputFile(p_xml_out, mz_file);
p_xml_input_file->close();
delete p_out;
delete p_xml_out;
*p_out << "Arguments = \"" << QFileInfo( p_xml_input_file->fileName()).absolutePath() << "\"" << endl;
*p_out << "Queue" << endl;
} else
{
throw pappso::PappsoException(QObject::tr("error : cannot open the XML X!Tandem input file : %1\n").arg(p_xml_input_file->fileName()));
......@@ -83,5 +162,50 @@ void TandemCondorProcess::run() {
for (QTemporaryFile * p_xml_input_file: input_file_list) {
delete p_xml_input_file;
}
if (p_out != nullptr) {
submit_file.close();
delete p_out;
}
//now run condor job on submit_file
QStringList arguments;
arguments << QFileInfo( submit_file.fileName()).absoluteFilePath();
QProcess * condor_process = new QProcess();
//hk_process->setWorkingDirectory(QFileInfo(_hardklor_exe).absolutePath());
condor_process->start(_condor_submit_command, arguments);
if (!condor_process->waitForStarted()) {
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 (!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));
}
*/
QByteArray result = condor_process->readAll();
QProcess::ExitStatus Status = condor_process->exitStatus();
if (Status != 0)
{
// != QProcess::NormalExit
throw pappso::PappsoException(QObject::tr("error executing HTCondor Status != 0 : %1 %2\n%3").arg(_tandem_run_batch._tandem_bin_path).arg(arguments.join(" ").arg(result.data())));
}
delete condor_process;
qDebug() << "TandeCondorProcess::run end" ;
}
......@@ -31,13 +31,19 @@
#define TANDEMCONDORPROCESS_H
#include "tandembatchprocess.h"
#include <QTemporaryDir>
class TandemCondorProcess: public TandemBatchProcess
{
public:
TandemCondorProcess(WorkMonitorInterface * p_monitor, const TandemRunBatch & tandem_run_batch);
virtual ~TandemCondorProcess();
virtual void prepareXmlDatabaseFile();
virtual void run();
private:
QTemporaryDir * _p_tmp_dir;
QString _condor_submit_command;
};
......
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