- 修复tasksch中任务panic导致的BUG

This commit is contained in:
gazebo
2019-04-17 12:26:51 +08:00
parent ab6e30d630
commit 36e117f313
3 changed files with 18 additions and 7 deletions

View File

@@ -123,7 +123,9 @@ func (task *ParallelTask) Run() {
chanRetVal = retVal
goto end
} 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)
task.finishedOneJob(len(job), err)
if err == nil {
@@ -146,11 +148,7 @@ func (task *ParallelTask) Run() {
}
end:
// globals.SugarLogger.Debugf("ParallelTask.Run %s, put to chann chanRetVal:%v", task.Name, chanRetVal)
task.locker.RLock()
if task.Status < TaskStatusEndBegin {
task.subFinishChan <- chanRetVal
}
task.locker.RUnlock()
task.subFinishChan <- chanRetVal
})
}
for _, job := range task.jobList {

View File

@@ -39,7 +39,9 @@ func (task *SeqTask) Run() {
goto EndFor
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)
if taskErr = err; taskErr != nil {
globals.SugarLogger.Infof("SeqTask.Run %s step:%d failed with error:%v", task.Name, i, err)

View File

@@ -352,3 +352,14 @@ func (t *BaseTask) buildTaskErrFromDetail() (err error) {
}
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
}