@@ -473,9 +473,6 @@ pub mod redis_pool {
473
473
474
474
#[ derive( Debug , Error ) ]
475
475
pub enum Error {
476
- // when we can't create more databases and all are used
477
- #[ error( "No more databases can be created" ) ]
478
- OutOfBound ,
479
476
#[ error( "A redis error occurred" ) ]
480
477
Redis ( #[ from] RedisError ) ,
481
478
}
@@ -486,37 +483,37 @@ pub mod redis_pool {
486
483
type Error = Error ;
487
484
488
485
async fn create ( & self ) -> Result < Self :: Type , Self :: Error > {
489
- for mut record in self . connections . iter_mut ( ) {
490
- let database = record. value_mut ( ) . as_mut ( ) ;
491
-
492
- match database {
493
- Some ( database) if database. available => {
494
- database. available = false ;
495
- return Ok ( database. clone ( ) ) ;
496
- }
497
- // if Some but not available, skip it
498
- Some ( _) => continue ,
499
- None => {
500
- let mut redis_conn =
501
- redis_connection ( & format ! ( "{}{}" , Self :: URL , record. key( ) ) ) . await ?;
502
-
503
- // run `FLUSHDB` to clean any leftovers of previous tests
504
- // even from different test runs as there might be leftovers
505
- Self :: flush_db ( & mut redis_conn) . await ?;
506
-
507
- let database = Database {
508
- available : false ,
509
- connection : redis_conn,
510
- } ;
511
-
512
- * record. value_mut ( ) = Some ( database. clone ( ) ) ;
513
-
514
- return Ok ( database) ;
486
+ loop {
487
+ for mut record in self . connections . iter_mut ( ) {
488
+ let database = record. value_mut ( ) . as_mut ( ) ;
489
+
490
+ match database {
491
+ Some ( database) if database. available => {
492
+ database. available = false ;
493
+ return Ok ( database. clone ( ) ) ;
494
+ }
495
+ // if Some but not available, skip it
496
+ Some ( _) => continue ,
497
+ None => {
498
+ let mut redis_conn =
499
+ redis_connection ( & format ! ( "{}{}" , Self :: URL , record. key( ) ) ) . await ?;
500
+
501
+ // run `FLUSHDB` to clean any leftovers of previous tests
502
+ // even from different test runs as there might be leftovers
503
+ Self :: flush_db ( & mut redis_conn) . await ?;
504
+
505
+ let database = Database {
506
+ available : false ,
507
+ connection : redis_conn,
508
+ } ;
509
+
510
+ * record. value_mut ( ) = Some ( database. clone ( ) ) ;
511
+
512
+ return Ok ( database) ;
513
+ }
515
514
}
516
515
}
517
516
}
518
-
519
- Err ( Error :: OutOfBound )
520
517
}
521
518
522
519
async fn recycle ( & self , database : & mut Database ) -> RecycleResult < Self :: Error > {
0 commit comments