Fix round-robin index calculation and job rejection.

If no render nodes were registered, the modulo on nodes.length
would push NaN into index, causing an unrecoverable state.
Not deleting rejected jobs also leaked memory.
This commit is contained in:
2023-06-16 12:26:36 +02:00
parent 28c5f821d8
commit fc6647e873

View File

@@ -58,12 +58,14 @@ app.post("/jobs", async (req, res) => {
jobs['queued'][jobId] = req.body; jobs['queued'][jobId] = req.body;
jobs['queued'][jobId]['jobId'] = jobId; jobs['queued'][jobId]['jobId'] = jobId;
console.log(`Queued Job ${jobId}`); console.log(`Received Job ${jobId}`);
let nodes = Array.from(wss.clients); let nodes = Array.from(wss.clients);
nodeIndex = (nodeIndex + 1) % nodes.length; nodeIndex = nodes.length === 0 ? 0 : ++nodeIndex % nodes.length;
var client = nodes[nodeIndex]; var client = nodes[nodeIndex];
if(!client) { if(!client) {
res.status(503).json({ 'message': 'No render nodes available', 'jobId': jobId, 'details': JSON.stringify(nodes) }); res.status(503).json({ 'message': 'No render nodes available', 'jobId': jobId });
delete jobs['queued'][jobId];
console.log(`Rejected Job ${jobId}! No render nodes available`);
return; return;
} }
client.send(JSON.stringify({"job": req.body})); client.send(JSON.stringify({"job": req.body}));