forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

spindle/{db,engine}: emit StatusTimeout events

Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>

anirudh.fi 6d10fb1c fa3beeb9

verified
Changed files
+28 -7
spindle
+4
spindle/db/events.go
···
func (d *DB) StatusSuccess(workflowId models.WorkflowId, n *notifier.Notifier) error {
return d.createStatusEvent(workflowId, models.StatusKindSuccess, nil, nil, n)
}
+
+
func (d *DB) StatusTimeout(workflowId models.WorkflowId, n *notifier.Notifier) error {
+
return d.createStatusEvent(workflowId, models.StatusKindTimeout, nil, nil, n)
+
}
+15 -7
spindle/engine/engine.go
···
err = e.StartSteps(ctx, w.Steps, wid, w.Image)
if err != nil {
-
e.l.Error("workflow failed!", "wid", wid.String(), "error", err.Error())
-
-
dbErr := e.db.StatusFailed(wid, err.Error(), -1, e.n)
-
if dbErr != nil {
-
return dbErr
+
if errors.Is(err, ErrTimedOut) {
+
dbErr := e.db.StatusTimeout(wid, e.n)
+
if dbErr != nil {
+
return dbErr
+
}
+
} else {
+
dbErr := e.db.StatusFailed(wid, err.Error(), -1, e.n)
+
if dbErr != nil {
+
return dbErr
+
}
}
return fmt.Errorf("starting steps image: %w", err)
···
<-tailDone
stepCancel()
-
return fmt.Errorf("step timed out after %v", stepTimeout)
+
return ErrTimedOut
}
if waitErr != nil {
···
if state.ExitCode != 0 {
e.l.Error("workflow failed!", "workflow_id", wid.String(), "error", state.Error, "exit_code", state.ExitCode, "oom_killed", state.OOMKilled)
-
return fmt.Errorf("error: %s, exit code: %d, oom: %t", state.Error, state.ExitCode, state.OOMKilled)
+
if state.OOMKilled {
+
return ErrOOMKilled
+
}
+
return ErrWorkflowFailed
}
}
+9
spindle/engine/errors.go
···
+
package engine
+
+
import "errors"
+
+
var (
+
ErrOOMKilled = errors.New("oom killed")
+
ErrTimedOut = errors.New("timed out")
+
ErrWorkflowFailed = errors.New("workflow failed")
+
)