Переглянути джерело

Улучшение работы с очередью, поправка багов

Book Pauk 4 роки тому
батько
коміт
01eb545f15

+ 14 - 3
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}`;

+ 3 - 2
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