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