From fc6647e8730cdcc5af4245b1cc165d5ab133ac5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Gro=C3=9F?= Date: Fri, 16 Jun 2023 12:26:36 +0200 Subject: [PATCH] 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. --- src/index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index e38b690..bc2d386 100644 --- a/src/index.js +++ b/src/index.js @@ -58,12 +58,14 @@ app.post("/jobs", async (req, res) => { jobs['queued'][jobId] = req.body; jobs['queued'][jobId]['jobId'] = jobId; - console.log(`Queued Job ${jobId}`); + console.log(`Received Job ${jobId}`); let nodes = Array.from(wss.clients); - nodeIndex = (nodeIndex + 1) % nodes.length; + nodeIndex = nodes.length === 0 ? 0 : ++nodeIndex % nodes.length; var client = nodes[nodeIndex]; 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; } client.send(JSON.stringify({"job": req.body}));