From 7386e7324aed533e28b26e666525a036e6dac47a Mon Sep 17 00:00:00 2001 From: Holden Rohrer Date: Sat, 18 Jan 2020 15:46:15 -0500 Subject: Implemented bug fix for maxr in schedule.js Rankings may have been messed up because as new insertions get added, the data.length changes per write. --- tools/schedule.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'tools/schedule.js') diff --git a/tools/schedule.js b/tools/schedule.js index 18278f0..033fddb 100644 --- a/tools/schedule.js +++ b/tools/schedule.js @@ -1,7 +1,5 @@ // A mixed paradigm scheduler -// RECOMMENDED: Adjust maxr with each round, unless this is determined to be potentially circumventable (maybe maxr ranks remain constant as long as they are recalc on insertion---so function-style?) - const bs = require('binary-search'); // The core managed data type: a queue will be pushed a number of these and asked to manage it. @@ -14,7 +12,7 @@ exports.Job = function(data, prio=0, wt=1){ this.data = data; //A set of work to be done (like character writes) this.prio = prio; // If a.prio > b.prio, all of `a.data` will be sent before any of `b.data` this.wt = wt; // After numerous calls, (amount called of a/amount called of b) = a.wt/b.wt if a.prio = b.prio - this.maxr = data.length/wt; // A utility calculation: If a job has a lower maxr, it will run out of data earlier. + this.maxr = () => this.data.length/this.wt; // A utility calculation: If a job has a lower maxr, it will run out of data earlier. // Mutable Properties this.wacc = 0; // mutable property: Queue will change this to keep track between dequeues of how much "left over" push real estate this should have. @@ -31,7 +29,7 @@ exports.Queue = function(delayms, maxExport, call){ if (! (job instanceof exports.Job)) job = new exports.Job(job); let prio = job.prio; if (!jobs[prio]) jobs[prio] = []; - jobs[prio].splice(0, Math.abs(bs(jobs[prio], job, (el, ne) => el.maxr - ne.maxr)), job); + jobs[prio].splice(0, Math.abs(bs(jobs[prio], job, (el, ne) => el.maxr() - ne.maxr())), job); prios.splice(0, Math.abs(bs(prios, prio, (el, ne) => el-ne)), prio); // prios is meant to be sorted least to most, and each job layer is too (by "maximum number of rounds"). // These were sorted like this so that getNumOrAll could use [0] or [.length-1] or .pop instead of having to re-sort lists repetitively. if (open) dequeue(); -- cgit