(ctx context.Context)
| 266 | } |
| 267 | |
| 268 | func (m *model) serve(ctx context.Context) error { |
| 269 | defer m.closeAllConnectionsAndWait() |
| 270 | |
| 271 | cfg := m.cfg.Subscribe(m) |
| 272 | defer m.cfg.Unsubscribe(m) |
| 273 | |
| 274 | if err := m.initFolders(cfg); err != nil { |
| 275 | close(m.started) |
| 276 | return svcutil.AsFatalErr(err, svcutil.ExitError) |
| 277 | } |
| 278 | |
| 279 | close(m.started) |
| 280 | |
| 281 | for { |
| 282 | select { |
| 283 | case <-ctx.Done(): |
| 284 | l.Debugln(m, "context closed, stopping", ctx.Err()) |
| 285 | return ctx.Err() |
| 286 | case err := <-m.fatalChan: |
| 287 | l.Debugln(m, "fatal error, stopping", err) |
| 288 | return svcutil.AsFatalErr(err, svcutil.ExitError) |
| 289 | case <-m.promotionTimer.C: |
| 290 | slog.Debug("Promotion timer fired") |
| 291 | m.promoteConnections() |
| 292 | } |
| 293 | } |
| 294 | } |
| 295 | |
| 296 | func (m *model) initFolders(cfg config.Configuration) error { |
| 297 | clusterConfigDevices := make(deviceIDSet, len(cfg.Devices)) |
no test coverage detected