Fix critical/severe issues in init, startup and shutdown

- auth: do not abort the server when authentication is disabled. auth.Init
  is now always called; with disable-authentication it sets up an ephemeral
  session store (SESSION_KEY not required) and registers no authenticators,
  so the unconditional auth.GetAuthInstance() callers (server init,
  api.New()) always get a valid instance.
- main: run the graceful-shutdown sequence on the startup-error path. runServer
  derives a cancelable context and, on a server-start failure, cancels it and
  waits so the metricstore final checkpoint / WAL rotation, archiver flush and
  taskmanager shutdown actually run before exit.
- server: log the :80 HTTP->HTTPS redirect listener error instead of dropping it.
- archiver: guard Shutdown against being called when Start never ran
  (avoids close(nil) panic / blocking on a nil workerDone).
- nats API: stop worker goroutines on shutdown via a stop channel + idempotent
  Shutdown(); workers and subscription callbacks select on stop and the
  channels are never closed, so no send-on-closed-channel can occur. Wired
  into Server.Shutdown after the NATS client is closed.
- metricstore: make Shutdown idempotent (nil shutdownFunc, early return) and
  release shutdownFuncMu before the checkpoint write.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Entire-Checkpoint: 3c179f9caa8f
This commit is contained in:
2026-06-05 10:16:28 +02:00
parent 56ae1de011
commit 1b72b0b5ad
6 changed files with 119 additions and 32 deletions

View File

@@ -222,6 +222,13 @@ func TriggerArchiving(job *schema.Job) {
func Shutdown(timeout time.Duration) error {
cclog.Info("Initiating archiver shutdown...")
// Guard against Shutdown being called when Start was never run: closing a nil
// channel and receiving from a nil workerDone would panic/block forever.
if archiveChannel == nil {
cclog.Warn("Archiver shutdown called but archiver was never started")
return nil
}
// Close channel to signal no more jobs will be accepted
close(archiveChannel)