@@ -12,7 +12,8 @@ const JOB = require('./job.js'),
12
12
later = require ( 'later' ) ;
13
13
14
14
const DELAY_BETWEEN_CHECKS = 1000 ,
15
- MAXIMUM_IN_LINE_JOBS_PER_NAME = 10 ;
15
+ MAXIMUM_IN_LINE_JOBS_PER_NAME = 10 ,
16
+ THE_VERY_TOP_TIMEOUT = 1000 * 60 * 55 ; // 55min
16
17
17
18
/**
18
19
* Manager obviously manages jobs running: monitors jobs collection & IPC messages, runs jobs dividing then if necessary, starts and manages
@@ -388,26 +389,29 @@ class Manager {
388
389
return new Promise ( ( resolve , reject ) => {
389
390
job . prepare ( this , this . db ) . then ( ( ) => {
390
391
log . d ( 'prepared %j' , job . id ) ;
391
- this . run ( job ) . then ( ( upd ) => {
392
- log . d ( 'result in start, %j' , upd ) ;
393
392
394
- let idx = this . running [ job . name ] . indexOf ( '' + job . _id ) ;
395
- if ( idx !== - 1 ) {
396
- this . running [ job . name ] . splice ( idx , 1 ) ;
397
- }
398
- log . d ( 'running in start: %j' , this . running [ job . name ] ) ;
393
+ /**
394
+ * Remove job from master queue allowing other jobs to step in
395
+ */
396
+ let clear = ( ) => {
397
+ let idx = this . running [ job . name ] . indexOf ( '' + job . _id ) ;
398
+ if ( idx !== - 1 ) {
399
+ this . running [ job . name ] . splice ( idx , 1 ) ;
400
+ }
401
+ log . d ( 'cleared manager from job, %s:%s, still running %j' , job . name , job . id , this . running [ job . name ] ) ;
402
+ this . schedule ( job ) . catch ( e => log . e . bind ( log , 'Error when clearing job: %j' , e ) ) ;
403
+ } ,
404
+ timeout = setTimeout ( clear , THE_VERY_TOP_TIMEOUT ) ;
399
405
400
- this . schedule ( job ) ;
406
+ this . run ( job ) . then ( ( upd ) => {
407
+ log . d ( 'result in start, %j' , upd ) ;
408
+ clearTimeout ( timeout ) ;
409
+ clear ( ) ;
401
410
resolve ( upd ? upd . result : undefined ) ;
402
411
} , ( error ) => {
403
412
log . d ( 'error in start, %j' , error . message || error . code || error . stack || error ) ;
404
-
405
- let idx = this . running [ job . name ] . indexOf ( '' + job . _id ) ;
406
- if ( idx !== - 1 ) {
407
- this . running [ job . name ] . splice ( idx , 1 ) ;
408
- }
409
-
410
- this . schedule ( job ) ;
413
+ clearTimeout ( timeout ) ;
414
+ clear ( ) ;
411
415
reject ( error ) ;
412
416
} ) ;
413
417
} , e => {
0 commit comments