From 6d10fb1cc026d0ba09793643d35e33e2bf2d58f9 Mon Sep 17 00:00:00 2001 From: Anirudh Oppiliappan Date: Mon, 23 Jun 2025 15:52:00 +0300 Subject: [PATCH] spindle/{db,engine}: emit StatusTimeout events Signed-off-by: Anirudh Oppiliappan --- spindle/db/events.go | 4 ++++ spindle/engine/engine.go | 22 +++++++++++++++------- spindle/engine/errors.go | 9 +++++++++ 3 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 spindle/engine/errors.go diff --git a/spindle/db/events.go b/spindle/db/events.go index 7a59759d..567e1d85 100644 --- a/spindle/db/events.go +++ b/spindle/db/events.go @@ -135,3 +135,7 @@ func (d *DB) StatusFailed(workflowId models.WorkflowId, workflowError string, ex 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) +} diff --git a/spindle/engine/engine.go b/spindle/engine/engine.go index 7a7a3739..594b9d9c 100644 --- a/spindle/engine/engine.go +++ b/spindle/engine/engine.go @@ -104,11 +104,16 @@ func (e *Engine) StartWorkflows(ctx context.Context, pipeline *models.Pipeline, 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) @@ -245,7 +250,7 @@ func (e *Engine) StartSteps(ctx context.Context, steps []models.Step, wid models <-tailDone stepCancel() - return fmt.Errorf("step timed out after %v", stepTimeout) + return ErrTimedOut } if waitErr != nil { @@ -259,7 +264,10 @@ func (e *Engine) StartSteps(ctx context.Context, steps []models.Step, wid models 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 } } diff --git a/spindle/engine/errors.go b/spindle/engine/errors.go new file mode 100644 index 00000000..47b052a6 --- /dev/null +++ b/spindle/engine/errors.go @@ -0,0 +1,9 @@ +package engine + +import "errors" + +var ( + ErrOOMKilled = errors.New("oom killed") + ErrTimedOut = errors.New("timed out") + ErrWorkflowFailed = errors.New("workflow failed") +) -- 2.51.2