MCPcopy
hub / github.com/apache/devlake / RunTask

Function RunTask

backend/core/runner/run_task.go:41–147  ·  view source on GitHub ↗

RunTask FIXME ...

(
	ctx gocontext.Context,
	basicRes context.BasicRes,
	progress chan plugin.RunningProgress,
	taskId uint64,
)

Source from the content-addressed store, hash-verified

39
40// RunTask FIXME ...
41func RunTask(
42 ctx gocontext.Context,
43 basicRes context.BasicRes,
44 progress chan plugin.RunningProgress,
45 taskId uint64,
46) (err errors.Error) {
47 db := basicRes.GetDal()
48 task := &models.Task{}
49 if err := db.First(task, dal.Where("id = ?", taskId)); err != nil {
50 return err
51 }
52 dbPipeline := &models.Pipeline{}
53 if err := db.First(dbPipeline, dal.Where("id = ? ", task.PipelineId)); err != nil {
54 return err
55 }
56
57 logger, err := getTaskLogger(basicRes.GetLogger(), task)
58 if err != nil {
59 return err
60 }
61 beganAt := time.Now()
62 if task.BeganAt != nil {
63 beganAt = *task.BeganAt
64 }
65 // make sure task status always correct even if it panicked
66 defer func() {
67 if r := recover(); r != nil {
68 var e error
69 switch et := r.(type) {
70 case error:
71 e = et
72 default:
73 e = fmt.Errorf("%v", et)
74 }
75 err = errors.Default.Wrap(e, fmt.Sprintf("run task failed with panic (%s)", utils.GatherCallFrames(0)))
76 logger.Error(err, "run task failed with panic")
77 }
78 finishedAt := time.Now()
79 spentSeconds := finishedAt.Unix() - beganAt.Unix()
80 if err != nil {
81 lakeErr := errors.AsLakeErrorType(err)
82 subTaskName := "unknown"
83 if lakeErr = lakeErr.As(errors.SubtaskErr); lakeErr != nil {
84 if meta, ok := lakeErr.GetData().(*plugin.SubTaskMeta); ok {
85 subTaskName = meta.Name
86 }
87 } else {
88 lakeErr = errors.Convert(err)
89 }
90 dbe := db.UpdateColumns(task, []dal.DalSet{
91 {ColumnName: "status", Value: models.TASK_FAILED},
92 {ColumnName: "message", Value: lakeErr.Error()},
93 {ColumnName: "error_name", Value: lakeErr.Messages().Format()},
94 {ColumnName: "finished_at", Value: finishedAt},
95 {ColumnName: "spent_seconds", Value: spentSeconds},
96 {ColumnName: "failed_sub_task", Value: subTaskName},
97 })
98 if dbe != nil {

Callers

nothing calls this directly

Calls 15

getTaskLoggerFunction · 0.85
RunPluginTaskFunction · 0.85
WrapMethod · 0.80
FormatMethod · 0.80
GetDalMethod · 0.65
FirstMethod · 0.65
GetLoggerMethod · 0.65
ErrorMethod · 0.65
AsMethod · 0.65
GetDataMethod · 0.65
UpdateColumnsMethod · 0.65
MessagesMethod · 0.65

Tested by

no test coverage detected