diff options
| author | Nikolay Govorov <me@govorov.online> | 2026-04-12 15:05:40 +0100 |
|---|---|---|
| committer | Nikolay Govorov <me@govorov.online> | 2026-04-12 16:33:44 +0100 |
| commit | 87b35491a2d009a266e326f42f9a66ff31c2a57e (patch) | |
| tree | d5172ff79821b09f5a534244647560e7bd6b160c | |
| parent | dcc1deba862804ffb2f9eb622dd04bc6e6966e55 (diff) | |
| download | tar tar.gz tar.bz2 tar.lz tar.xz tar.zst zip | |
Fix graceful shutdown
Diffstat
| -rw-r--r-- | cmd/mirum-server/server.go | 18 | +10 −8 |
| -rw-r--r-- | cmd/mirum-server/server_web.go | 5 | +4 −1 |
2 files changed, 14 insertions, 9 deletions
diff --git a/cmd/mirum-server/server.go b/cmd/mirum-server/server.go index 5b4bbf0..3201256 100644 --- a/cmd/mirum-server/server.go +++ b/cmd/mirum-server/server.go @@ -30,7 +30,6 @@ type server struct { // Close releases resources owned by the server. Call exactly once, after // all HTTP servers have finished Shutdown. func (s *server) Close() { - close(s.queue) s.db.Close() } @@ -51,24 +50,27 @@ func (s *server) PurgeSessions(ctx context.Context) { } } -func (s *server) enqueue(ev *forges.PushEvent) string { - s.taskCounter.Add(1) - id := fmt.Sprintf("task-%d", s.taskCounter.Load()) +func (s *server) enqueue(ctx context.Context, ev *forges.PushEvent) (string, error) { + id := fmt.Sprintf("task-%d", s.taskCounter.Add(1)) slog.Info("push", "repo", ev.Owner+"/"+ev.Repo, "branch", ev.Branch, "sha", ev.SHA[:8], "task", id) s.tasks.Store(id, ev) - _ = s.forge.SetStatus(context.Background(), ev, forges.StatusPending, "Queued") + _ = s.forge.SetStatus(ctx, ev, forges.StatusPending, "Queued") - s.queue <- &wirepb.Task{ + select { + case s.queue <- &wirepb.Task{ Id: id, CloneUrl: s.forge.AuthURL(ev.CloneURL), Branch: ev.Branch, Sha: ev.SHA, RepoFullName: ev.Owner + "/" + ev.Repo, + }: + return id, nil + case <-ctx.Done(): + s.tasks.Delete(id) + return "", ctx.Err() } - - return id } func (s *server) complete(ctx context.Context, taskID string, success bool, errMsg string) error { diff --git a/cmd/mirum-server/server_web.go b/cmd/mirum-server/server_web.go index 8e62e53..377284c 100644 --- a/cmd/mirum-server/server_web.go +++ b/cmd/mirum-server/server_web.go @@ -216,7 +216,10 @@ func (h *webHandler) webhook(w http.ResponseWriter, r *http.Request) { return } - h.srv.enqueue(ev) + if _, err := h.srv.enqueue(r.Context(), ev); err != nil { + http.Error(w, "server shutting down", http.StatusServiceUnavailable) + return + } w.WriteHeader(http.StatusAccepted) } |
