multi-tasks 3.1.5 → 3.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/package.json +1 -1
- package/workers/Multithread.js +8 -2
package/README.md
CHANGED
|
@@ -263,12 +263,13 @@ Unlike `retry_fails` (which re-runs only the failed tasks), `restart` re-runs **
|
|
|
263
263
|
|
|
264
264
|
### Changelog:
|
|
265
265
|
|
|
266
|
+
- 3.1.6 Fix silent task loss under heavy load with maxTaskRetries
|
|
266
267
|
- 3.1.5 Update README
|
|
267
|
-
- 3.1.4 Rewrite
|
|
268
|
+
- 3.1.4 Rewrite methods multiTasks.resume/retry_fails/restart
|
|
268
269
|
- 3.1.3 Update README
|
|
269
270
|
- 3.1.2 Update README
|
|
270
271
|
- 3.1.1 Fix readme documentation
|
|
271
|
-
- 3.1.0 Support worker broadcast
|
|
272
|
+
- 3.1.0 Support worker broadcast and system events; default numberOfWorkers is now "50%" of CPU cores
|
|
272
273
|
- 3.0.4 numberOfWorkers accepts a percentage string of CPU cores, e.g. "50%"
|
|
273
274
|
- 3.0.3 Support 'maxTaskRetries'
|
|
274
275
|
- 3.0.2 Support 'taskTimeout'
|
package/package.json
CHANGED
package/workers/Multithread.js
CHANGED
|
@@ -309,7 +309,7 @@ function runTask(config, subTask, subTaskLog){
|
|
|
309
309
|
resultData = data;
|
|
310
310
|
}).catch((ex)=>{
|
|
311
311
|
errors.push({ex: serializeError(ex)});
|
|
312
|
-
}).finally(()=>{
|
|
312
|
+
}).finally(async ()=>{
|
|
313
313
|
let {startTimestamp} = subTaskLog;
|
|
314
314
|
let endTimestamp = new Date()*1;
|
|
315
315
|
let cost = endTimestamp - startTimestamp;
|
|
@@ -325,8 +325,14 @@ function runTask(config, subTask, subTaskLog){
|
|
|
325
325
|
let retryCount = TaskMgr.incrementTaskRetry(subTask.subid);
|
|
326
326
|
if(retryCount <= config.maxTaskRetries){
|
|
327
327
|
console.warn(`[Task Retry] "${subTask.subid}" failed, retry (${retryCount}/${config.maxTaskRetries})`);
|
|
328
|
-
TaskMgr.mvTask(subTask.subid, 'running', 'new', ()=>{});
|
|
329
328
|
retried = true;
|
|
329
|
+
//等 rename 落盘再 resolve/请求新任务: fire-and-forget 的异步 rename 会随 worker 被
|
|
330
|
+
//autoClose 杀掉而消亡, 任务文件滞留 running 被静默丢弃(高负载偶发丢任务的根因, 勿回退)
|
|
331
|
+
try{
|
|
332
|
+
await TaskMgr.mvTaskPromise(subTask.subid, 'running', 'new');
|
|
333
|
+
}catch(newPath){
|
|
334
|
+
console.warn(`[Task Retry] "${subTask.subid}" failed to move back to new, left in running (recoverable via resume)`);
|
|
335
|
+
};
|
|
330
336
|
};
|
|
331
337
|
};
|
|
332
338
|
TaskMgr.saveTaskLog(subTask.subid, subTaskLog);
|