From a6ea99541e363c104980dbd8dbd52d7058687383 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Sun, 24 Apr 2022 22:41:03 -0500 Subject: [PATCH] fix: Return from update loop when job completes (#1121) Update was running forever, which stopped jobs from timing out unless a restart occurred. This also fixes complete properly reporting an error. --- provisionerd/provisionerd.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/provisionerd/provisionerd.go b/provisionerd/provisionerd.go index add6f9b4c2..2fc0225734 100644 --- a/provisionerd/provisionerd.go +++ b/provisionerd/provisionerd.go @@ -247,6 +247,9 @@ func (p *Server) acquireJob(ctx context.Context) { func (p *Server) runJob(ctx context.Context, job *proto.AcquiredJob) { shutdown, shutdownCancel := context.WithCancel(ctx) defer shutdownCancel() + + complete, completeCancel := context.WithCancel(ctx) + defer completeCancel() go func() { ticker := time.NewTicker(p.opts.UpdateInterval) defer ticker.Stop() @@ -256,6 +259,8 @@ func (p *Server) runJob(ctx context.Context, job *proto.AcquiredJob) { return case <-ctx.Done(): return + case <-complete.Done(): + return case <-p.shutdown: p.opts.Logger.Info(ctx, "attempting graceful cancelation") shutdownCancel() @@ -816,6 +821,7 @@ func (p *Server) completeJob(job *proto.CompletedJob) { } if err != nil { p.opts.Logger.Warn(p.closeContext, "failed to complete job", slog.Error(err)) + p.failActiveJobf(err.Error()) return } break