AdguardTeam/AdGuardHome · error
putting data: %w
Error message
putting data: %w
What it means
store() failed on bkt.Put of the encoded session — bbolt reports ErrBucketNotFound, ErrKeyRequired (empty token key), or allocation failures. The transaction is rolled back via errors.WithDeferred.
Source
Thrown at internal/aghuser/sessionstorage.go:367
if err != nil {
return fmt.Errorf("starting transaction: %w", err)
}
needRollback := true
defer func() {
if needRollback {
err = errors.WithDeferred(err, tx.Rollback())
}
}()
bkt, err := tx.CreateBucketIfNotExists([]byte(bboltBucketSessions))
if err != nil {
return fmt.Errorf("creating bucket: %w", err)
}
err = bkt.Put(s.Token[:], bboltEncode(s))
if err != nil {
return fmt.Errorf("putting data: %w", err)
}
needRollback = false
err = tx.Commit()
if err != nil {
return fmt.Errorf("committing transaction: %w", err)
}
return nil
}
// FindByToken implements the [SessionStorage] interface for *DefaultSessionStorage.
func (ds *DefaultSessionStorage) FindByToken(ctx context.Context, t SessionToken) (s *Session, err error) {
ds.mu.Lock()
defer ds.mu.Unlock()
s, ok := ds.sessions[t]
if !ok {View on GitHub (pinned to b41aefbe51)
Solutions
- Check the wrapped error: ErrKeyRequired means the token generation upstream failed
- Free disk space / check filesystem
- Delete the rebuildable sessions db if corruption is confirmed
Defensive patterns
Strategy: try-catch
Validate before calling
// reject zero tokens before storing
if s.Token == (SessionToken{}) { return errors.Error("empty token") } Try / catch
if errors.Is(err, bbolt.ErrKeyRequired) { /* fix token generation upstream */ } Prevention
- Never persist zero-value tokens
- Test session creation on full-disk conditions
When it happens
Trigger: Putting a session whose Token is the zero value (empty key), a bucket that vanished mid-transaction, or allocation failure on a full/corrupt db.
Common situations: Corrupted sessions.db; disk full; empty token produced by a broken ID generator.
Related errors
- loading sessions: %w
- processing sessions: %w
- iterating over sessions: %w
- deleting sessions: %w
- length of the data is less than expected: got %d
AI-assisted analysis of AdguardTeam/AdGuardHome@b41aefbe51 (2026-08-27).
Data as JSON: /api/errors/59a34e434c40ad65.
Report an issue: GitHub.