Heavy rewrite

This commit is contained in:
2014-08-31 23:22:45 +05:30
parent f8bb6f9781
commit 4a09d48f55
3 changed files with 191 additions and 105 deletions
+71 -39
View File
@@ -1,44 +1,76 @@
/*global describe, it, before, beforeEach, after, afterEach, should */
var JobManager = require('../src/JobManager.js').JobManager;
var utils = require('../src/utils.js');
var range = utils.range;
var should = require('should');
var wrks = range(400000);
wrks.forEach( function(v,k){
wrks[k] = function(data,cb){
var self = this;
process.nextTick(function(){
// console.log( 'I am done: ', v );
cb( null, data);
} );
var NO_WORKERS = 5;
var workers = [], i;
for ( i = 0; i < NO_WORKERS; i ++) {
workers[i] = function( data, cb ){
console.log(i, ' Processing ', data );
setTimeout( function(){
console.log( 'Iam ', i, ' Processed ', data );
}, i*10 );
};
wrks[k].id = v;
workers[i].name = i;
}
var NO_TASKS=100;
var tasks = utils.range( NO_TASKS );
var TEST_CONCURENCY = 3;
describe('JobManager', function(){
describe('Initialization', function(){
var jm = new JobManager( { concurrency: TEST_CONCURENCY });
jm.work = function( task, worker, cb ){
worker( task , cb );
};
jm.workers = workers;
jm.tasks = tasks;
jm.onError = function(err, task, worker ){
console.log( 'Error...', arguments );
};
jm.onLoadMore = function( cb ){
console.log( 'Loading......');
this.tasks = this.tasks.concat( tasks );
return cb();
};
it('should Initialize properly', function(done){
jm.concurrency = jm.workers.length -1;
jm.updateState();
jm.tmpPool.should.have.length(NO_WORKERS);
jm.concurrency = jm.workers.length +1;
jm.updateState();
jm.tmpPool.should.have.length(NO_WORKERS*2);
jm.tasks.should.have.length( NO_TASKS );
jm.workers.should.have.length( NO_WORKERS );
jm.runningTasks.should.be.equal(0);
done();
});
it('getFromPool, returnToPool', function(done){
var store = [], i, w;
for( i =0; i< jm.concurrency; i++ ){
w = jm.getFromPool();
jm.runningTasks.should.be.equal( i+1);
should.exist( w );
store.push(w);
}
for( i =0; i< 6; i++ ){
w = jm.getFromPool();
jm.runningTasks.should.be.equal( jm.concurrency );
should.not.exist( w );
}
store.forEach( function(v, i){
jm.returnToPool(v);
jm.runningTasks.should.be.equal( jm.concurrency-i-1 );
});
jm.runningTasks.should.be.equal( 0 );
done();
});
});
});
var tStart = 0;
var getTasks = function(){
var i, out=[];
for( i = 0; i< 1000; i++, tStart++ ){
out[i] = tStart;
}
return out;
};
var tasks = getTasks();
var jm = new JobManager({concurrency:3});
jm.tasks = tasks;
jm.workers = wrks;
jm.onError = function(err, task, worker ){
console.log( 'Error...', arguments );
};
jm.work = function(task, worker, cb){
// console.log( 'Worker ', worker.id, ' with ', task );
return worker( task, cb );
};
jm.onLoadMore = function( cb ){
console.log( 'Loading......');
this.tasks = this.tasks.concat( getTasks() );
return cb();
};
jm.start();
+58
View File
@@ -0,0 +1,58 @@
var JobManager = require('../src/JobManager.js').JobManager;
var utils = require('../src/utils.js');
var range = utils.range;
var async = require('async');
var wrks = range(4);
wrks.forEach( function(v,k){
wrks[k] = function(data,cb){
console.log( 'S ', data );
setTimeout( function(){
console.log( 'E ', data );
cb();
} , ( 1 ) * 1000 );
};
wrks[k].id = v;
});
var tStart = 0;
var getTasks = function(){
var i, out=[];
for( i = 0; i< 50; i++, tStart++ ){
out[i] = tStart;
}
return out;
};
var tasks = getTasks();
if(0){
console.log( tasks.length );
var y = 0;
async.eachLimit( tasks, 300, function( data, cb ){
setTimeout( function(){
console.log( data );
cb();
} , 1);
}, console.log );
return;
}
var jm = new JobManager({concurrency: 6});
jm.tasks = tasks;
jm.workers = wrks;
jm.onError = function(err, task, worker ){
console.log( 'Error...', arguments );
};
jm.work = function(task, worker, cb){
// console.log( 'Worker ', worker.id, ' with ', task );
return worker( task, cb );
};
jm.onLoadMore = function( cb ){
console.log( 'Loading......');
this.tasks = this.tasks.concat( getTasks() );
return cb();
};
// jm.start();
jm._start();