Close closes all open databases.
(ctx context.Context)
| 434 | |
| 435 | // Close closes all open databases. |
| 436 | func (c *ReplicateCommand) Close(ctx context.Context) error { |
| 437 | for _, monitor := range c.directoryMonitors { |
| 438 | monitor.Close() |
| 439 | } |
| 440 | c.directoryMonitors = nil |
| 441 | |
| 442 | if c.Server != nil { |
| 443 | if err := c.Server.Close(); err != nil { |
| 444 | slog.Error("error closing control server", "error", err) |
| 445 | } |
| 446 | } |
| 447 | if c.Store != nil { |
| 448 | if err := c.Store.Close(ctx); err != nil { |
| 449 | if errors.Is(err, litestream.ErrShutdownInterrupted) { |
| 450 | slog.Warn("shutdown sync skipped by user interrupt", "error", err) |
| 451 | } else { |
| 452 | slog.Error("failed to close database", "error", err) |
| 453 | } |
| 454 | } |
| 455 | } |
| 456 | if c.Config.MCPAddr != "" && c.MCP != nil { |
| 457 | if err := c.MCP.Close(); err != nil { |
| 458 | slog.Error("error closing MCP server", "error", err) |
| 459 | } |
| 460 | } |
| 461 | return nil |
| 462 | } |
| 463 | |
| 464 | // SetDone sets the done channel used for interrupt handling during shutdown. |
| 465 | // When the channel is closed, the shutdown sync retry loop exits. |