@@ -135,10 +135,12 @@ func (p *RedisProvider) Init(maxlifetime int64, configs string) (err error) {
135135// Read returns raw session store by session ID.
136136func (p * RedisProvider ) Read (sid string ) (session.RawStore , error ) {
137137 psid := p .prefix + sid
138- if ! p .Exist (sid ) {
138+ if exist , err := p .Exist (sid ); err == nil && ! exist {
139139 if err := p .c .Set (graceful .GetManager ().HammerContext (), psid , "" , p .duration ).Err (); err != nil {
140140 return nil , err
141141 }
142+ } else if err != nil {
143+ return nil , err
142144 }
143145
144146 var kv map [any ]any
@@ -159,9 +161,9 @@ func (p *RedisProvider) Read(sid string) (session.RawStore, error) {
159161}
160162
161163// Exist returns true if session with given ID exists.
162- func (p * RedisProvider ) Exist (sid string ) bool {
164+ func (p * RedisProvider ) Exist (sid string ) ( bool , error ) {
163165 v , err := p .c .Exists (graceful .GetManager ().HammerContext (), p .prefix + sid ).Result ()
164- return err == nil && v == 1
166+ return err == nil && v == 1 , err
165167}
166168
167169// Destroy deletes a session by session ID.
@@ -174,13 +176,18 @@ func (p *RedisProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err
174176 poldsid := p .prefix + oldsid
175177 psid := p .prefix + sid
176178
177- if p .Exist (sid ) {
179+ if exist , err := p .Exist (sid ); err != nil {
180+ return nil , err
181+ } else if exist {
178182 return nil , fmt .Errorf ("new sid '%s' already exists" , sid )
179- } else if ! p .Exist (oldsid ) {
183+ }
184+ if exist , err := p .Exist (oldsid ); err == nil && ! exist {
180185 // Make a fake old session.
181- if err = p .c .Set (graceful .GetManager ().HammerContext (), poldsid , "" , p .duration ).Err (); err != nil {
186+ if err : = p .c .Set (graceful .GetManager ().HammerContext (), poldsid , "" , p .duration ).Err (); err != nil {
182187 return nil , err
183188 }
189+ } else if err != nil {
190+ return nil , err
184191 }
185192
186193 // do not use Rename here, because the old sid and new sid may be in different redis cluster slot.
@@ -211,12 +218,9 @@ func (p *RedisProvider) Regenerate(oldsid, sid string) (_ session.RawStore, err
211218}
212219
213220// Count counts and returns number of sessions.
214- func (p * RedisProvider ) Count () int {
221+ func (p * RedisProvider ) Count () ( int , error ) {
215222 size , err := p .c .DBSize (graceful .GetManager ().HammerContext ()).Result ()
216- if err != nil {
217- return 0
218- }
219- return int (size )
223+ return int (size ), err
220224}
221225
222226// GC calls GC to clean expired sessions.
0 commit comments