- 修复tasksch中任务panic导致的BUG
This commit is contained in:
@@ -123,7 +123,9 @@ func (task *ParallelTask) Run() {
|
|||||||
chanRetVal = retVal
|
chanRetVal = retVal
|
||||||
goto end
|
goto end
|
||||||
} else {
|
} else {
|
||||||
result, err := task.worker(task, job, task.params...)
|
result, err := task.callWorker(func() (retVal interface{}, err error) {
|
||||||
|
return task.worker(task, job, task.params...)
|
||||||
|
})
|
||||||
// globals.SugarLogger.Debugf("ParallelTask.Run %s, after call worker result:%v, err:%v", task.Name, result, err)
|
// globals.SugarLogger.Debugf("ParallelTask.Run %s, after call worker result:%v, err:%v", task.Name, result, err)
|
||||||
task.finishedOneJob(len(job), err)
|
task.finishedOneJob(len(job), err)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@@ -146,11 +148,7 @@ func (task *ParallelTask) Run() {
|
|||||||
}
|
}
|
||||||
end:
|
end:
|
||||||
// globals.SugarLogger.Debugf("ParallelTask.Run %s, put to chann chanRetVal:%v", task.Name, chanRetVal)
|
// globals.SugarLogger.Debugf("ParallelTask.Run %s, put to chann chanRetVal:%v", task.Name, chanRetVal)
|
||||||
task.locker.RLock()
|
task.subFinishChan <- chanRetVal
|
||||||
if task.Status < TaskStatusEndBegin {
|
|
||||||
task.subFinishChan <- chanRetVal
|
|
||||||
}
|
|
||||||
task.locker.RUnlock()
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
for _, job := range task.jobList {
|
for _, job := range task.jobList {
|
||||||
|
|||||||
@@ -39,7 +39,9 @@ func (task *SeqTask) Run() {
|
|||||||
goto EndFor
|
goto EndFor
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
result, err := task.worker(task, i, task.params...)
|
result, err := task.callWorker(func() (retVal interface{}, err error) {
|
||||||
|
return task.worker(task, i, task.params...)
|
||||||
|
})
|
||||||
task.finishedOneJob(1, err)
|
task.finishedOneJob(1, err)
|
||||||
if taskErr = err; taskErr != nil {
|
if taskErr = err; taskErr != nil {
|
||||||
globals.SugarLogger.Infof("SeqTask.Run %s step:%d failed with error:%v", task.Name, i, err)
|
globals.SugarLogger.Infof("SeqTask.Run %s step:%d failed with error:%v", task.Name, i, err)
|
||||||
|
|||||||
@@ -352,3 +352,14 @@ func (t *BaseTask) buildTaskErrFromDetail() (err error) {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (task *BaseTask) callWorker(worker func() (retVal interface{}, err error)) (retVal interface{}, err error) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
globals.SugarLogger.Errorf("callWorker panic:%v", r)
|
||||||
|
err = fmt.Errorf("panic, r:%v", r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
retVal, err = worker()
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user