{"record":{"id":"59a34e434c40ad65","repo":"AdguardTeam/AdGuardHome","slug":"putting-data-w","errorCode":null,"errorMessage":"putting data: %w","messagePattern":"putting data: %w","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/aghuser/sessionstorage.go","lineNumber":367,"sourceCode":"\tif err != nil {\n\t\treturn fmt.Errorf(\"starting transaction: %w\", err)\n\t}\n\n\tneedRollback := true\n\tdefer func() {\n\t\tif needRollback {\n\t\t\terr = errors.WithDeferred(err, tx.Rollback())\n\t\t}\n\t}()\n\n\tbkt, err := tx.CreateBucketIfNotExists([]byte(bboltBucketSessions))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"creating bucket: %w\", err)\n\t}\n\n\terr = bkt.Put(s.Token[:], bboltEncode(s))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"putting data: %w\", err)\n\t}\n\n\tneedRollback = false\n\terr = tx.Commit()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"committing transaction: %w\", err)\n\t}\n\n\treturn nil\n}\n\n// FindByToken implements the [SessionStorage] interface for *DefaultSessionStorage.\nfunc (ds *DefaultSessionStorage) FindByToken(ctx context.Context, t SessionToken) (s *Session, err error) {\n\tds.mu.Lock()\n\tdefer ds.mu.Unlock()\n\n\ts, ok := ds.sessions[t]\n\tif !ok {","sourceCodeStart":349,"sourceCodeEnd":385,"githubUrl":"https://github.com/AdguardTeam/AdGuardHome/blob/b41aefbe51c8dde65e2c50f093996afa0502edf9/internal/aghuser/sessionstorage.go#L349-L385","documentation":"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.","triggerScenarios":"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.","commonSituations":"Corrupted sessions.db; disk full; empty token produced by a broken ID generator.","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"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// reject zero tokens before storing\nif s.Token == (SessionToken{}) { return errors.Error(\"empty token\") }","typeGuard":null,"tryCatchPattern":"if errors.Is(err, bbolt.ErrKeyRequired) { /* fix token generation upstream */ }","preventionTips":["Never persist zero-value tokens","Test session creation on full-disk conditions"],"tags":["bbolt","put","sessions"],"backgroundTag":"database-write-failed","analyzedSha":"b41aefbe51c8dde65e2c50f093996afa0502edf9","analyzedAt":"2026-08-27T04:57:55.097Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}