ScuttleBot
perf: async topology provisioning — don't block API startup Topology provisioning (ChanServ REGISTER + AMODE for all channels and bots) was blocking the API server from starting. With 6 channels × 12 bots, this took ~90s during which the API returned 502 and relays/watchdog saw the server as down. Now provisioning runs in a goroutine so the API starts immediately.
Commit
1250865af71c95f182733b93e4807eebc83e3f3eb1b82c67f1a59d526ef20afe
Parent
e0d99ffb703a67b…
1 file changed
+5
-3
+5
-3
| --- cmd/scuttlebot/main.go | ||
| +++ cmd/scuttlebot/main.go | ||
| @@ -220,13 +220,15 @@ | ||
| 220 | 220 | Voice: sc.Voice, |
| 221 | 221 | Autojoin: sc.Autojoin, |
| 222 | 222 | Modes: sc.Modes, |
| 223 | 223 | }) |
| 224 | 224 | } |
| 225 | - if err := topoMgr.Provision(staticChannels); err != nil { | |
| 226 | - log.Error("topology provision failed", "err", err) | |
| 227 | - } | |
| 225 | + go func() { | |
| 226 | + if err := topoMgr.Provision(staticChannels); err != nil { | |
| 227 | + log.Error("topology provision failed", "err", err) | |
| 228 | + } | |
| 229 | + }() | |
| 228 | 230 | topoMgr.StartReaper(ctx) |
| 229 | 231 | go func() { |
| 230 | 232 | <-ctx.Done() |
| 231 | 233 | topoMgr.Close() |
| 232 | 234 | }() |
| 233 | 235 |
| --- cmd/scuttlebot/main.go | |
| +++ cmd/scuttlebot/main.go | |
| @@ -220,13 +220,15 @@ | |
| 220 | Voice: sc.Voice, |
| 221 | Autojoin: sc.Autojoin, |
| 222 | Modes: sc.Modes, |
| 223 | }) |
| 224 | } |
| 225 | if err := topoMgr.Provision(staticChannels); err != nil { |
| 226 | log.Error("topology provision failed", "err", err) |
| 227 | } |
| 228 | topoMgr.StartReaper(ctx) |
| 229 | go func() { |
| 230 | <-ctx.Done() |
| 231 | topoMgr.Close() |
| 232 | }() |
| 233 |
| --- cmd/scuttlebot/main.go | |
| +++ cmd/scuttlebot/main.go | |
| @@ -220,13 +220,15 @@ | |
| 220 | Voice: sc.Voice, |
| 221 | Autojoin: sc.Autojoin, |
| 222 | Modes: sc.Modes, |
| 223 | }) |
| 224 | } |
| 225 | go func() { |
| 226 | if err := topoMgr.Provision(staticChannels); err != nil { |
| 227 | log.Error("topology provision failed", "err", err) |
| 228 | } |
| 229 | }() |
| 230 | topoMgr.StartReaper(ctx) |
| 231 | go func() { |
| 232 | <-ctx.Done() |
| 233 | topoMgr.Close() |
| 234 | }() |
| 235 |