loop until it works
This commit is contained in:
parent
5da334fcb7
commit
4a03d2e331
@ -5,7 +5,7 @@ use migration::sea_query::table::ColumnDef;
|
|||||||
use migration::{Alias, DbErr, Migrator, MigratorTrait, Table};
|
use migration::{Alias, DbErr, Migrator, MigratorTrait, Table};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::time::sleep;
|
use tokio::time::sleep;
|
||||||
use tracing::{debug, info, warn};
|
use tracing::{debug, info, trace, warn};
|
||||||
|
|
||||||
pub use migration::sea_orm::DatabaseConnection;
|
pub use migration::sea_orm::DatabaseConnection;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ pub async fn get_db(
|
|||||||
.connect_timeout(Duration::from_secs(5))
|
.connect_timeout(Duration::from_secs(5))
|
||||||
.min_connections(min_connections)
|
.min_connections(min_connections)
|
||||||
.max_connections(max_connections)
|
.max_connections(max_connections)
|
||||||
.sqlx_logging_level(tracing::log::LevelFilter::Warn)
|
.sqlx_logging_level(tracing::log::LevelFilter::Trace)
|
||||||
.sqlx_logging(true);
|
.sqlx_logging(true);
|
||||||
|
|
||||||
Database::connect(db_opt).await
|
Database::connect(db_opt).await
|
||||||
|
@ -291,6 +291,11 @@ impl Web3Rpcs {
|
|||||||
// TODO: check known uncles
|
// TODO: check known uncles
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if hash == &H256::zero() {
|
||||||
|
// TODO: think more about this
|
||||||
|
return Err(Web3ProxyError::UnknownBlockHash(*hash));
|
||||||
|
}
|
||||||
|
|
||||||
// block not in cache. we need to ask an rpc for it
|
// block not in cache. we need to ask an rpc for it
|
||||||
let get_block_params = (*hash, false);
|
let get_block_params = (*hash, false);
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ use tokio::{
|
|||||||
task::JoinHandle,
|
task::JoinHandle,
|
||||||
time::{sleep, Instant},
|
time::{sleep, Instant},
|
||||||
};
|
};
|
||||||
use tracing::{info, trace};
|
use tracing::{info, trace, warn};
|
||||||
use web3_proxy::{
|
use web3_proxy::{
|
||||||
config::{AppConfig, TopConfig, Web3RpcConfig},
|
config::{AppConfig, TopConfig, Web3RpcConfig},
|
||||||
relational_db::get_migrated_db,
|
relational_db::get_migrated_db,
|
||||||
@ -192,12 +192,31 @@ impl TestApp {
|
|||||||
sleep(Duration::from_secs(1)).await;
|
sleep(Duration::from_secs(1)).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
info!(%db_url, "db is ready for connections");
|
// TODO: make sure mysql is actually ready for connections
|
||||||
|
sleep(Duration::from_secs(7)).await;
|
||||||
|
|
||||||
|
info!(%db_url, elapsed=%start.elapsed().as_secs_f32(), "db is ready for connections. Migrating now...");
|
||||||
|
|
||||||
// try to migrate
|
// try to migrate
|
||||||
let _ = get_migrated_db(db_url, 1, 1)
|
let start = Instant::now();
|
||||||
.await
|
let max_wait = Duration::from_secs(30);
|
||||||
.expect("failed migration");
|
loop {
|
||||||
|
if start.elapsed() > max_wait {
|
||||||
|
panic!("db took too long to start");
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Err(err) = get_migrated_db(db_url.clone(), 1, 1).await {
|
||||||
|
// not connected. sleep and then try again
|
||||||
|
warn!(?err, "unable to migrate db");
|
||||||
|
sleep(Duration::from_secs(1)).await;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// it worked! yey!
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
info!(%db_url, elapsed=%start.elapsed().as_secs_f32(), "db is migrated");
|
||||||
|
|
||||||
Some(db_data)
|
Some(db_data)
|
||||||
} else {
|
} else {
|
||||||
@ -314,7 +333,6 @@ impl Drop for TestApp {
|
|||||||
|
|
||||||
impl Drop for DbData {
|
impl Drop for DbData {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
// TODO: this doesn't seem to run
|
|
||||||
info!(%self.container_name, "killing db");
|
info!(%self.container_name, "killing db");
|
||||||
|
|
||||||
let _ = SyncCommand::new("docker")
|
let _ = SyncCommand::new("docker")
|
||||||
|
Loading…
Reference in New Issue
Block a user