From 5f58e8285d329cd3b36903d1ae9d8c2227a5a974 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Fri, 12 Dec 2025 17:04:15 +0900 Subject: [PATCH] spindle: more verbose error messages Change-Id: tyompoynovxlszkosmyllxynonqznvkq Signed-off-by: Seongmin Lee --- spindle/db/events.go | 20 ++----------------- spindle/engines/nixery/engine.go | 34 ++++++++++++++++++++++---------- spindle/server.go | 8 ++++---- 3 files changed, 30 insertions(+), 32 deletions(-) diff --git a/spindle/db/events.go b/spindle/db/events.go index e37aee71..ca2dee45 100644 --- a/spindle/db/events.go +++ b/spindle/db/events.go @@ -18,7 +18,7 @@ type Event struct { EventJson string `json:"event"` } -func (d *DB) InsertEvent(event Event, notifier *notifier.Notifier) error { +func (d *DB) insertEvent(event Event, notifier *notifier.Notifier) error { _, err := d.Exec( `insert into events (rkey, nsid, event, created) values (?, ?, ?, ?)`, event.Rkey, @@ -70,22 +70,6 @@ func (d *DB) GetEvents(cursor int64) ([]Event, error) { return evts, nil } -func (d *DB) CreateStatusEvent(rkey string, s tangled.PipelineStatus, n *notifier.Notifier) error { - eventJson, err := json.Marshal(s) - if err != nil { - return err - } - - event := Event{ - Rkey: rkey, - Nsid: tangled.PipelineStatusNSID, - Created: time.Now().UnixNano(), - EventJson: string(eventJson), - } - - return d.InsertEvent(event, n) -} - func (d *DB) createStatusEvent( workflowId models.WorkflowId, statusKind models.StatusKind, @@ -116,7 +100,7 @@ func (d *DB) createStatusEvent( EventJson: string(eventJson), } - return d.InsertEvent(event, n) + return d.insertEvent(event, n) } diff --git a/spindle/engines/nixery/engine.go b/spindle/engines/nixery/engine.go index 7b371a98..698e6763 100644 --- a/spindle/engines/nixery/engine.go +++ b/spindle/engines/nixery/engine.go @@ -179,7 +179,11 @@ func (e *Engine) SetupWorkflow(ctx context.Context, wid models.WorkflowId, wf *m return err } e.registerCleanup(wid, func(ctx context.Context) error { - return e.docker.NetworkRemove(ctx, networkName(wid)) + err := e.docker.NetworkRemove(ctx, networkName(wid)) + if err != nil { + return fmt.Errorf("removing network: %w", err) + } + return nil }) addl := wf.Data.(addlFields) @@ -229,16 +233,20 @@ func (e *Engine) SetupWorkflow(ctx context.Context, wid models.WorkflowId, wf *m return fmt.Errorf("creating container: %w", err) } e.registerCleanup(wid, func(ctx context.Context) error { - err = e.docker.ContainerStop(ctx, resp.ID, container.StopOptions{}) + err := e.docker.ContainerStop(ctx, resp.ID, container.StopOptions{}) if err != nil { - return err + return fmt.Errorf("stopping container: %w", err) } - return e.docker.ContainerRemove(ctx, resp.ID, container.RemoveOptions{ + err = e.docker.ContainerRemove(ctx, resp.ID, container.RemoveOptions{ RemoveVolumes: true, RemoveLinks: false, Force: false, }) + if err != nil { + return fmt.Errorf("removing container: %w", err) + } + return nil }) err = e.docker.ContainerStart(ctx, resp.ID, container.StartOptions{}) @@ -394,12 +402,7 @@ func (e *Engine) tailStep(ctx context.Context, wfLogger *models.WorkflowLogger, } func (e *Engine) DestroyWorkflow(ctx context.Context, wid models.WorkflowId) error { - e.cleanupMu.Lock() - key := wid.String() - - fns := e.cleanup[key] - delete(e.cleanup, key) - e.cleanupMu.Unlock() + fns := e.drainCleanups(wid) for _, fn := range fns { if err := fn(ctx); err != nil { @@ -417,6 +420,17 @@ func (e *Engine) registerCleanup(wid models.WorkflowId, fn cleanupFunc) { e.cleanup[key] = append(e.cleanup[key], fn) } +func (e *Engine) drainCleanups(wid models.WorkflowId) []cleanupFunc { + e.cleanupMu.Lock() + key := wid.String() + + fns := e.cleanup[key] + delete(e.cleanup, key) + e.cleanupMu.Unlock() + + return fns +} + func networkName(wid models.WorkflowId) string { return fmt.Sprintf("workflow-network-%s", wid) } diff --git a/spindle/server.go b/spindle/server.go index 6ce9464d..bf51ccf1 100644 --- a/spindle/server.go +++ b/spindle/server.go @@ -302,7 +302,7 @@ func (s *Spindle) processPipeline(ctx context.Context, src eventconsumer.Source, tpl.TriggerMetadata.Repo.Repo, ) if err != nil { - return err + return fmt.Errorf("failed to get repo: %w", err) } pipelineId := models.PipelineId{ @@ -323,7 +323,7 @@ func (s *Spindle) processPipeline(ctx context.Context, src eventconsumer.Source, Name: w.Name, }, fmt.Sprintf("unknown engine %#v", w.Engine), -1, s.n) if err != nil { - return err + return fmt.Errorf("db.StatusFailed: %w", err) } continue @@ -337,7 +337,7 @@ func (s *Spindle) processPipeline(ctx context.Context, src eventconsumer.Source, ewf, err := s.engs[w.Engine].InitWorkflow(*w, tpl) if err != nil { - return err + return fmt.Errorf("init workflow: %w", err) } // inject TANGLED_* env vars after InitWorkflow @@ -354,7 +354,7 @@ func (s *Spindle) processPipeline(ctx context.Context, src eventconsumer.Source, Name: w.Name, }, s.n) if err != nil { - return err + return fmt.Errorf("db.StatusPending: %w", err) } } } -- 2.43.0