soap-htcondor
Version:
A wrapper for consuming HTCondor soap API
147 lines (134 loc) • 5.53 kB
JavaScript
;
var async = require("async")
var cautil = require("../util/classAdCons")
function Schedduler(client, options) {
this.client = client;
this.options = options;
}
Schedduler.prototype.constructor = Schedduler;
require('./job')(Schedduler);
require('./files')(Schedduler);
require('./cluster')(Schedduler);
require('./transaction')(Schedduler);
require('./classads')(Schedduler);
Schedduler.prototype.xxx = function(params, cb) {
cb(null, "Hola")
}
//-----------------------------------------
// config.DockerImage
Schedduler.prototype.createDockerJob = function(config, cb) {
var nuevas = [
cautil.createStringAttribute("Out",config.out),
cautil.createStringAttribute("Err",config.err),
cautil.createStringAttribute("Log",config.log),
cautil.createStringAttribute("Iwd",config.iwd),
cautil.createBoolAttribute("WantDocker",true),
cautil.createStringAttribute("DockerImage",config.dockerimage),
cautil.createExpressionAttribute("Requirements",'TARGET.HasDocker'),
cautil.createIntAttribute("JobUniverse",5)
]
this._createJob(nuevas, config.owner, config.universe, config.executable, config.arguments, config.requirements, cb)
}
Schedduler.prototype.createJob = function(config, cb) {
var nuevas = [
cautil.createStringAttribute("Out",config.out),
cautil.createStringAttribute("Err",config.err),
cautil.createStringAttribute("Log",config.log),
cautil.createStringAttribute("Iwd",config.iwd)
]
this._createJob(nuevas, config.owner, config.universe, config.executable, config.arguments, config.requirements, cb)
}
Schedduler.prototype.createDagJob = function(config, cb) {
var dagFileLocation=config.dagLocation;
var dagOutputFileLocation = dagFileLocation + ".dagman.out";
var dagLogFileLocation = dagFileLocation + ".dagman.log";
var stdOutLocation = dagFileLocation + ".stdout";
var stdErrLocation = dagFileLocation + ".stderr";
var dagmanLockFile = dagFileLocation + ".lock";
var workingDirectory = dagFileLocation.substring(0, dagFileLocation.lastIndexOf("/"));
var owner = config.owner;
var type = "SCHEDULER";
var executable = "/usr/bin/condor_dagman";
var argumentos = "-f -l . -Debug 3 -AutoRescue 1 -DoRescueFrom 0 " +
"-Allowversionmismatch " +
"-Lockfile " + dagmanLockFile + " " +
"-Dag " + dagFileLocation;
var requirements = "TRUE";
var nuevas = [
cautil.createStringAttribute("Owner", owner),
cautil.createStringAttribute("Iwd", workingDirectory),
cautil.createIntAttribute("JobUniverse", 7), // Scheduler Universe
cautil.createStringAttribute("Cmd", executable),
//cautil.createIntAttribute("JobStatus", 1), // Idle
cautil.createStringAttribute("Env",
"_CONDOR_MAX_DAGMAN_LOG=0;" +
"_CONDOR_DAGMAN_LOG=" + dagOutputFileLocation),
cautil.createIntAttribute("JobNotification", 0), // Never
cautil.createStringAttribute("UserLog", dagLogFileLocation),
cautil.createStringAttribute("RemoveKillSig", "SIGUSR1"),
cautil.createStringAttribute("Out", stdOutLocation),
cautil.createStringAttribute("Err", stdErrLocation),
//cautil.createStringAttribute("ShouldTransferFiles", "NO"), // Using shared FS
cautil.createExpressionAttribute("Requirements", "TRUE"),
cautil.createExpressionAttribute("OnExitRemove",
"(ExitSignal =?= 11 || " +
" (ExitCode =!= UNDEFINED && " +
" ExitCode >=0 && ExitCode <= 2))"),
cautil.createStringAttribute("Arguments",argumentos),
/*cautil.createIntAttribute("ClusterId", cl),
cautil.createIntAttribute("ProcId", jb)*/
];
this._createJob(nuevas, config.owner, type, executable, argumentos, requirements, cb)
}
Schedduler.prototype._createJob = function(nuevas, owner, type, executable, argumentos, requirements, lastcb) {
var self = this;
async.waterfall([
function(cb){
self.beginTransaction(60, cb)
},
function(tt, cb) {
self.newCluster(tt,cb)
},
function(cl,cb) {
self.newJob(tt,cl,cb)
},
function(jb,cb) {
self.createJobTemplate({
clusterId: cl,
jobId: jb,
owner: owner,
type: type,
cmd: executable,
args: argumentos,
requirements: requirements
},cb);
},
function(classAd,cb) {
nuevas.push(cautil.createIntAttribute("ClusterId", cl))
nuevas.push(cautil.createIntAttribute("ProcId", jb))
var cadd = cautil.combinar(classAd, nuevas);
self.submit(tt,cl,jb,cadd,cb)
},
function(xx,cb) {
self.commitTransaction({
transaction: tt
},cb)
},
function(res,cb) {
self.requestReschedule(cb)
},
function(cb) {
self.getJobAd(tt,cl,jb,cb)
},
function(job,cb) {
cb(null, job)
}
], function(err, job) {
if(err){
lastcb(err)
return
}
lastcb(null, job)
})
}
module.exports = Schedduler;