Implemented tests for batch API
This commit is contained in:
parent
3c23bf12e7
commit
b16c0983c6
@ -1,12 +1,12 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
var util = require('util');
|
||||||
|
var EventEmitter = require('events').EventEmitter;
|
||||||
var JobRunner = require('./job_runner');
|
var JobRunner = require('./job_runner');
|
||||||
var JobQueuePool = require('./job_queue_pool');
|
var JobQueuePool = require('./job_queue_pool');
|
||||||
var JobQueueConsumer = require('./job_queue_consumer');
|
var JobQueueConsumer = require('./job_queue_consumer');
|
||||||
var JobSubscriber = require('./job_subscriber');
|
var JobSubscriber = require('./job_subscriber');
|
||||||
var UserDatabaseMetadataService = require('./user_database_metadata_service');
|
var UserDatabaseMetadataService = require('./user_database_metadata_service');
|
||||||
var EventEmitter = require('events').EventEmitter;
|
|
||||||
var util = require('util');
|
|
||||||
|
|
||||||
function Batch(metadataBackend) {
|
function Batch(metadataBackend) {
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
@ -19,20 +19,22 @@ util.inherits(Batch, EventEmitter);
|
|||||||
|
|
||||||
Batch.prototype.start = function () {
|
Batch.prototype.start = function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
this.jobQueuePool = new JobQueuePool();
|
var jobRunner = this.jobRunner;
|
||||||
|
var metadataBackend = this.metadataBackend;
|
||||||
|
var jobQueuePool = new JobQueuePool();
|
||||||
|
|
||||||
// subscribe to message exchange broker in order to know what queues are available
|
// subscribe to message exchange broker in order to know what queues are available
|
||||||
this.jobSubscriber.subscribe(function onMessage(channel, host) {
|
this.jobSubscriber.subscribe(function onMessage(channel, host) {
|
||||||
var jobQueueConsumer = self.jobQueuePool.get(host);
|
var jobQueueConsumer = jobQueuePool.get(host);
|
||||||
|
|
||||||
// if queue consumer is not registered yet
|
// if queue consumer is not registered yet
|
||||||
if (!jobQueueConsumer) {
|
if (!jobQueueConsumer) {
|
||||||
|
|
||||||
// creates new one
|
// creates new one
|
||||||
jobQueueConsumer = new JobQueueConsumer(self.metadataBackend, host);
|
jobQueueConsumer = new JobQueueConsumer(metadataBackend, host);
|
||||||
|
|
||||||
// register it in batch service
|
// register it in batch service
|
||||||
self.jobQueuePool.add(host, jobQueueConsumer);
|
jobQueuePool.add(host, jobQueueConsumer);
|
||||||
|
|
||||||
// while read from queue then perform job
|
// while read from queue then perform job
|
||||||
jobQueueConsumer.on('data', function (jobId) {
|
jobQueueConsumer.on('data', function (jobId) {
|
||||||
@ -40,7 +42,7 @@ Batch.prototype.start = function () {
|
|||||||
// limit one job at the same time per queue (queue <1:1> db intance)
|
// limit one job at the same time per queue (queue <1:1> db intance)
|
||||||
jobQueueConsumer.pause();
|
jobQueueConsumer.pause();
|
||||||
|
|
||||||
var job = self.jobRunner.run(jobId);
|
var job = jobRunner.run(jobId);
|
||||||
|
|
||||||
job.on('done', function () {
|
job.on('done', function () {
|
||||||
// next job
|
// next job
|
||||||
@ -57,10 +59,10 @@ Batch.prototype.start = function () {
|
|||||||
})
|
})
|
||||||
.on('error', function (err) {
|
.on('error', function (err) {
|
||||||
console.error(err.stack || err);
|
console.error(err.stack || err);
|
||||||
self.jobQueuePool.remove(host);
|
jobQueuePool.remove(host);
|
||||||
})
|
})
|
||||||
.on('end', function () {
|
.on('end', function () {
|
||||||
self.jobQueuePool.remove(host);
|
jobQueuePool.remove(host);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -29,7 +29,8 @@
|
|||||||
"step": "~0.0.5",
|
"step": "~0.0.5",
|
||||||
"step-profiler": "~0.1.0",
|
"step-profiler": "~0.1.0",
|
||||||
"topojson": "0.0.8",
|
"topojson": "0.0.8",
|
||||||
"underscore": "~1.6.0"
|
"underscore": "~1.6.0",
|
||||||
|
"queue-async": "^1.0.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"redis": "0.7.1",
|
"redis": "0.7.1",
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
var _ = require('underscore');
|
||||||
|
var queue = require('queue-async');
|
||||||
var Batch = require('../../batch/batch');
|
var Batch = require('../../batch/batch');
|
||||||
var JobPublisher = require('../../batch/job_publisher');
|
var JobPublisher = require('../../batch/job_publisher');
|
||||||
var JobQueueProducer = require('../../batch/job_queue_producer');
|
var JobQueueProducer = require('../../batch/job_queue_producer');
|
||||||
@ -85,4 +87,43 @@ describe('batch', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should perform all job enqueued', function (done) {
|
||||||
|
var jobs = [
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table',
|
||||||
|
'select * from private_table'
|
||||||
|
];
|
||||||
|
|
||||||
|
var jobsQueue = queue(jobs.length);
|
||||||
|
|
||||||
|
jobs.forEach(function(job) {
|
||||||
|
jobsQueue.defer(createJob, job);
|
||||||
|
});
|
||||||
|
|
||||||
|
jobsQueue.awaitAll(function (err, jobsCreated) {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
var jobsDone = 0;
|
||||||
|
|
||||||
|
batch.on('job:done', function (jobId) {
|
||||||
|
_.find(jobsCreated, function(job) {
|
||||||
|
if (jobId === job.jobId) {
|
||||||
|
jobsDone += 1;
|
||||||
|
}
|
||||||
|
if (jobsDone === jobs.length) {
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user