Skip to content

Commit 6287165

Browse files
authored
Merge pull request #425 from AdExNetwork/naiive-redis-loop
Inifinite loop for getting available db connection
2 parents 71af607 + 7d7ae0c commit 6287165

File tree

1 file changed

+28
-31
lines changed

1 file changed

+28
-31
lines changed

sentry/src/db.rs

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -473,9 +473,6 @@ pub mod redis_pool {
473473

474474
#[derive(Debug, Error)]
475475
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,
479476
#[error("A redis error occurred")]
480477
Redis(#[from] RedisError),
481478
}
@@ -486,37 +483,37 @@ pub mod redis_pool {
486483
type Error = Error;
487484

488485
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+
}
515514
}
516515
}
517516
}
518-
519-
Err(Error::OutOfBound)
520517
}
521518

522519
async fn recycle(&self, database: &mut Database) -> RecycleResult<Self::Error> {

0 commit comments

Comments
 (0)