multi-tasks 3.3.0 → 3.4.0

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.
@@ -255,6 +255,21 @@ const TaskMgr = {
255
255
  callback(newPath, false);
256
256
  }
257
257
  },
258
+ //同步版: master 侧超时/崩溃归档专用(非热路径)。异步 rename 在 master 判定全部完成 exit 时
259
+ //可能未落盘, 任务滞留 running 被静默跳过; renameSync 保证返回即落盘(勿回退成 fire-and-forget 异步)
260
+ mvTaskSync: (subid, from, to)=> {
261
+ runLog.write('Move task(sync):', subid, `${from}>${to}`);
262
+ let {progressRootFolder} = main_config;
263
+ let oldPath = pathutil.resolve(progressRootFolder, `./${from}/${subid}.task.json`);
264
+ let newPath = pathutil.resolve(progressRootFolder, `./${to}/${subid}.task.json`);
265
+ try{
266
+ fs.renameSync(oldPath, newPath);
267
+ return true;
268
+ }catch(e){
269
+ runLog.warn(e);
270
+ return false;
271
+ }
272
+ },
258
273
  saveTaskResult:(subid, hasError, data)=>{
259
274
  //数据不可 JSON 序列化时不抛错(抛错会把任务吞掉)也不翻转成败: 任务跑通了只是结果存不下,
260
275
  //结果文件改写为说明占位(成功侧对象本体, 错误侧包成数组), 任务状态不受影响; 同步写用户消息文件
@@ -374,6 +389,17 @@ const TaskMgr = {
374
389
  let {taskFolderResultFailed, taskFolderFailed} = main_config;
375
390
  forEachResult(taskFolderResultFailed, taskFolderFailed, cb);
376
391
  },
392
+ forEachResult:(cb)=>{//无所谓成败遍历全部结果: 先 succ(succeeded=true) 后 errors(false), count 两段连续编号
393
+ let {taskFolderResult, taskFolderResultFailed, taskFolderFinished, taskFolderFailed} = main_config;
394
+ let offset = 0;
395
+ forEachResult(taskFolderResult, taskFolderFinished, (count, task, result)=>{
396
+ cb(count, task, result, true);
397
+ offset = count + 1;
398
+ });
399
+ forEachResult(taskFolderResultFailed, taskFolderFailed, (count, task, err)=>{
400
+ cb(offset + count, task, err, false);
401
+ });
402
+ },
377
403
  resetTaskFolders:(taskFolder)=>{
378
404
  fs.rmSync(taskFolder, {recursive: true, force: true});
379
405
  },
@@ -1,27 +1,18 @@
1
- let workers = {};
2
- let status = {};
3
-
4
- const runLog = require('../utils/runLog');
5
-
6
- const mgr = {
7
- addWorker:(worker)=>{
8
- let id = `${worker.id}`;
9
- if(workers[id] || status[id]){
10
- throw new Error('FATAL: duplicated worker!');
11
- }
12
- status[id] = {isBusy: true};
13
- runLog.write('add worker', worker.id);
14
- workers[id] = worker;
15
- },
16
- getWorker:(id)=>{
17
- return workers[`${id}`];
18
- },
19
- setBusy:(id, isBusy)=>{
20
- status[`${id}`] = {isBusy: isBusy};
21
- },
22
- isBusy:(id)=>{
23
- let s = status[`${id}`];
24
- return s ? s.isBusy : false;
25
- }
26
- };
27
- module.exports = mgr;
1
+ let workers = {};
2
+
3
+ const runLog = require('../utils/runLog');
4
+
5
+ const mgr = {
6
+ addWorker:(worker)=>{
7
+ let id = `${worker.id}`;
8
+ if(workers[id]){
9
+ throw new Error('FATAL: duplicated worker!');
10
+ }
11
+ runLog.write('add worker', worker.id);
12
+ workers[id] = worker;
13
+ },
14
+ removeWorker:(id)=>{//worker 退出(含崩溃补员)时清引用: map 只增不减会累积死 worker
15
+ delete workers[`${id}`];
16
+ }
17
+ };
18
+ module.exports = mgr;