in action/lib/Database.js [93:132]
this.getTriggerAssignment = function(workers) {
return new Promise((resolve, reject) => {
var assignment = workers[0] || 'worker0';
if (workers.length > 1) {
this.db.view(designDoc, assignmentView, {group: true}, (err, result) => {
if (err) {
reject(err);
} else {
// a map between available workers and their number of assigned triggers
// values will be populated with the results of the assignment view
var counter = {};
workers.forEach(worker => {
counter[worker] = 0;
});
// update counter values with the number of assigned triggers
// for each worker
result.rows.forEach(row => {
if (row.key in counter) {
counter[row.key] = row.value;
}
});
// find which of the available workers has the least number of
// assigned triggers
for (availableWorker in counter) {
if (counter[availableWorker] < counter[assignment]) {
assignment = availableWorker;
}
}
resolve(assignment);
}
});
} else {
resolve(assignment);
}
});
};