+4
spindle/db/events.go
+4
spindle/db/events.go
···
135
135
func (d *DB) StatusSuccess(workflowId models.WorkflowId, n *notifier.Notifier) error {
136
136
return d.createStatusEvent(workflowId, models.StatusKindSuccess, nil, nil, n)
137
137
}
138
+
139
+
func (d *DB) StatusTimeout(workflowId models.WorkflowId, n *notifier.Notifier) error {
140
+
return d.createStatusEvent(workflowId, models.StatusKindTimeout, nil, nil, n)
141
+
}
+15
-7
spindle/engine/engine.go
+15
-7
spindle/engine/engine.go
···
104
104
105
105
err = e.StartSteps(ctx, w.Steps, wid, w.Image)
106
106
if err != nil {
107
-
e.l.Error("workflow failed!", "wid", wid.String(), "error", err.Error())
108
-
109
-
dbErr := e.db.StatusFailed(wid, err.Error(), -1, e.n)
110
-
if dbErr != nil {
111
-
return dbErr
107
+
if errors.Is(err, ErrTimedOut) {
108
+
dbErr := e.db.StatusTimeout(wid, e.n)
109
+
if dbErr != nil {
110
+
return dbErr
111
+
}
112
+
} else {
113
+
dbErr := e.db.StatusFailed(wid, err.Error(), -1, e.n)
114
+
if dbErr != nil {
115
+
return dbErr
116
+
}
112
117
}
113
118
114
119
return fmt.Errorf("starting steps image: %w", err)
···
245
250
<-tailDone
246
251
247
252
stepCancel()
248
-
return fmt.Errorf("step timed out after %v", stepTimeout)
253
+
return ErrTimedOut
249
254
}
250
255
251
256
if waitErr != nil {
···
259
264
260
265
if state.ExitCode != 0 {
261
266
e.l.Error("workflow failed!", "workflow_id", wid.String(), "error", state.Error, "exit_code", state.ExitCode, "oom_killed", state.OOMKilled)
262
-
return fmt.Errorf("error: %s, exit code: %d, oom: %t", state.Error, state.ExitCode, state.OOMKilled)
267
+
if state.OOMKilled {
268
+
return ErrOOMKilled
269
+
}
270
+
return ErrWorkflowFailed
263
271
}
264
272
}
265
273