AdguardTeam/AdGuardHome · error
closing database: %w
Error message
closing database: %w
What it means
During stats reset (clear, triggered by handleStatsReset or setLimit), the code closes the old bbolt database before recreating it; db.Close() failed and is wrapped as 'closing database'.
Source
Thrown at internal/stats/stats.go:543
func (s *StatsCtx) clear() (err error) {
defer func() { err = errors.Annotate(err, "clearing: %w") }()
db := s.db.Swap(nil)
if db != nil {
var tx *bbolt.Tx
tx, err = db.Begin(true)
if err != nil {
s.logger.Error("opening transaction", slogutil.KeyError, err)
} else if err = finishTxn(tx, false); err != nil {
// Don't wrap the error since it's informative enough as is.
return err
}
// Active transactions will continue using database, but new ones won't
// be created.
err = db.Close()
if err != nil {
return fmt.Errorf("closing database: %w", err)
}
// All active transactions are now closed.
s.logger.Debug("database closed")
}
err = os.Remove(s.filename)
if err != nil {
s.logger.Error("removing", slogutil.KeyError, err)
}
err = s.openDB()
if err != nil {
s.logger.Error("opening database", slogutil.KeyError, err)
}
// Use defer to unlock the mutex as soon as possible.
defer s.logger.Debug("cleared")View on GitHub (pinned to b41aefbe51)
Solutions
- Retry the reset once the system is idle / no concurrent stats queries are running
- Check for leaked transactions or long-running readers on the DB
- If the DB is corrupt, stop the service and remove the stats file
Defensive patterns
Strategy: retry
Try / catch
if err := s.Clear(); err != nil { log.Printf("reset failed: %v; retrying", err); time.Sleep(time.Second); err = s.Clear() } Prevention
- Quiesce stats queries before reset
- Avoid changing limit under load
When it happens
Trigger: Resetting stats (POST to the stats reset endpoint) or changing the limit while the database has open transactions or is otherwise unable to close cleanly.
Common situations: Concurrent reads/writes still holding transactions when reset happens; file descriptor or lock issues on the stats DB path.
Related errors
- opening database: %w
- opening a transaction: %w
- opening transaction: %w
- creating bucket: %w
- putting unit to database: %w
AI-assisted analysis of AdguardTeam/AdGuardHome@b41aefbe51 (2026-08-27).
Data as JSON: /api/errors/e6096619395719c7.
Report an issue: GitHub.