Compare commits

..

No commits in common. "160832fb935e1697de8772e136f866b93a4246af" and "1835ab5cab354e79f05e052b4c58c3ecc2ba9617" have entirely different histories.

3 changed files with 7 additions and 47 deletions

View File

@ -114,13 +114,6 @@ const options = [
'https://github.com/engineer-man/piston/releases/download/pkgs/index', 'https://github.com/engineer-man/piston/releases/download/pkgs/index',
validators: [], validators: [],
}, },
{
key: 'max_concurrent_jobs',
desc: 'Maximum number of concurrent jobs to run at one time',
default: 64,
parser: parse_int,
validators: [(x) => x > 0 || `${x} cannot be negative`]
}
]; ];
logger.info(`Loading Configuration from environment`); logger.info(`Loading Configuration from environment`);

View File

@ -16,19 +16,6 @@ const job_states = {
let uid = 0; let uid = 0;
let gid = 0; let gid = 0;
let remainingJobSpaces = config.max_concurrent_jobs;
let jobQueue = [];
setInterval(()=>{
// Every 10ms try resolve a new job, if there is an available slot
if(jobQueue.length > 0 && remainingJobSpaces > 0){
jobQueue.shift()()
}
}, 10)
class Job { class Job {
constructor({ runtime, files, args, stdin, timeouts, memory_limits }) { constructor({ runtime, files, args, stdin, timeouts, memory_limits }) {
this.uuid = uuidv4(); this.uuid = uuidv4();
@ -61,15 +48,8 @@ class Job {
} }
async prime() { async prime() {
if(remainingJobSpaces < 1){
logger.info(`Awaiting job slot uuid=${this.uuid}`)
await new Promise((resolve)=>{
jobQueue.push(resolve)
})
}
logger.info(`Priming job uuid=${this.uuid}`); logger.info(`Priming job uuid=${this.uuid}`);
remainingJobSpaces--;
logger.debug('Writing files to job cache'); logger.debug('Writing files to job cache');
logger.debug(`Transfering ownership uid=${this.uid} gid=${this.gid}`); logger.debug(`Transfering ownership uid=${this.uid} gid=${this.gid}`);
@ -172,23 +152,21 @@ class Job {
} }
}); });
const exit_cleanup = async () => { const exit_cleanup = () => {
clear_timeout(kill_timeout); clear_timeout(kill_timeout);
proc.stderr.destroy(); proc.stderr.destroy();
proc.stdout.destroy(); proc.stdout.destroy();
await this.cleanup_processes()
}; };
proc.on('exit', async (code, signal) => { proc.on('exit', (code, signal) => {
await exit_cleanup(); exit_cleanup();
resolve({stdout, stderr, code, signal, output }); resolve({stdout, stderr, code, signal, output });
}); });
proc.on('error', async err => { proc.on('error', err => {
await exit_cleanup(); exit_cleanup();
reject({ error: err, stdout, stderr, output }); reject({ error: err, stdout, stderr, output });
}); });
@ -361,13 +339,11 @@ class Job {
async cleanup() { async cleanup() {
logger.info(`Cleaning up job uuid=${this.uuid}`); logger.info(`Cleaning up job uuid=${this.uuid}`);
await this.cleanup_processes();
await this.cleanup_filesystem(); await this.cleanup_filesystem();
remainingJobSpaces++;
} }
} }
module.exports = { module.exports = {
Job, Job,
}; };

View File

@ -145,12 +145,3 @@ default: https://github.com/engineer-man/piston/releases/download/pkgs/index
``` ```
URL for repository index, where packages will be downloaded from. URL for repository index, where packages will be downloaded from.
## Maximum Concurrent Jobs
```yaml
key: PISTON_MAX_CONCURRENT_JOBS
default: 64
```
Maximum number of jobs to run concurrently.