From 01eb545f150546e141a97e04d266b62f682f25a6 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sat, 5 Dec 2020 13:24:04 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D1=8C=D1=8E,=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=B1=D0=B0=D0=B3?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/Reader/BookConverter/ConvertBase.js | 17 ++++++++++++++--- server/core/Reader/ReaderWorker.js | 5 +++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/server/core/Reader/BookConverter/ConvertBase.js b/server/core/Reader/BookConverter/ConvertBase.js index 047587d5..1a70f536 100644 --- a/server/core/Reader/BookConverter/ConvertBase.js +++ b/server/core/Reader/BookConverter/ConvertBase.js @@ -42,21 +42,32 @@ class ConvertBase { throw new Error('Слишком большая очередь конвертирования. Пожалуйста, попробуйте позже.'); } + abort = (abort ? abort : () => false); + const myAbort = () => { + return q.abort() || abort(); + } + try { + if (myAbort()) + throw new Error('abort'); + const result = await utils.spawnProcess(path, { killAfter: 3600,//1 час args, onData: (data) => { - q.resetTimeout(); + if (queue.freed > 0) + q.resetTimeout(); onData(data); }, //будем периодически проверять работу конвертера и если очереди нет, то разрешаем работу пинком onData onUsage: (stats) => { - if (queue.freed > 1 && stats.cpu >= 10) + if (queue.freed > 0 && stats.cpu >= 10) { + q.resetTimeout(); onData('.'); + } }, onUsageInterval: 10, - abort + abort: myAbort }); if (result.code != 0) { const error = `${result.code}|FORLOG|, exec: ${path}, args: ${args.join(' ')}, stdout: ${result.stdout}, stderr: ${result.stderr}`; diff --git a/server/core/Reader/ReaderWorker.js b/server/core/Reader/ReaderWorker.js index 2529f231..bdddd898 100644 --- a/server/core/Reader/ReaderWorker.js +++ b/server/core/Reader/ReaderWorker.js @@ -12,7 +12,7 @@ const utils = require('../utils'); const log = new (require('../AppLogger'))().log;//singleton const cleanDirPeriod = 60*60*1000;//1 раз в час -const queue = new LimitedQueue(5, 100, 4*60*1000);//4 минуты ожидание подвижек +const queue = new LimitedQueue(5, 100, 2*60*1000 + 15000);//2 минуты ожидание подвижек let instance = null; @@ -130,7 +130,8 @@ class ReaderWorker { convertFilename = `${this.config.tempDownloadDir}/${tempFilename2}`; await this.bookConverter.convertToFb2(decompFiles, convertFilename, opts, progress => { wState.set({progress}); - q.resetTimeout(); + if (queue.freed > 0) + q.resetTimeout(); }, q.abort); //сжимаем файл в tmp, если там уже нет с тем же именем-sha256