tests seem to run successfully, should double check the huge merge
This commit is contained in:
parent
5a54fc5e99
commit
ffd63444b2
@ -10,7 +10,6 @@ use tokio::sync::broadcast;
|
|||||||
use web3_proxy::app::{flatten_handle, flatten_handles, Web3ProxyApp};
|
use web3_proxy::app::{flatten_handle, flatten_handles, Web3ProxyApp};
|
||||||
use web3_proxy::config::TopConfig;
|
use web3_proxy::config::TopConfig;
|
||||||
use web3_proxy::{frontend, prometheus};
|
use web3_proxy::{frontend, prometheus};
|
||||||
use anyhow::Context;
|
|
||||||
|
|
||||||
/// start the main proxy daemon
|
/// start the main proxy daemon
|
||||||
#[derive(FromArgs, PartialEq, Debug, Eq)]
|
#[derive(FromArgs, PartialEq, Debug, Eq)]
|
||||||
@ -64,6 +63,8 @@ async fn run(
|
|||||||
let app_prometheus_port = prometheus_port;
|
let app_prometheus_port = prometheus_port;
|
||||||
|
|
||||||
// TODO: should we use a watch or broadcast for these?
|
// TODO: should we use a watch or broadcast for these?
|
||||||
|
// Maybe this one ?
|
||||||
|
// let mut shutdown_receiver = shutdown_sender.subscribe();
|
||||||
let (app_shutdown_sender, _app_shutdown_receiver) = broadcast::channel(1);
|
let (app_shutdown_sender, _app_shutdown_receiver) = broadcast::channel(1);
|
||||||
|
|
||||||
let frontend_shutdown_receiver = frontend_shutdown_sender.subscribe();
|
let frontend_shutdown_receiver = frontend_shutdown_sender.subscribe();
|
||||||
@ -74,7 +75,84 @@ async fn run(
|
|||||||
broadcast::channel(1);
|
broadcast::channel(1);
|
||||||
|
|
||||||
// start the main app
|
// start the main app
|
||||||
let mut spawned_app = Web3ProxyApp::spawn(top_config, num_workers, app_shutdown_sender.clone()).await?;
|
// let mut spawned_app = Web3ProxyApp::spawn(top_config, num_workers, app_shutdown_sender.clone()).await?;
|
||||||
|
let mut spawned_app =
|
||||||
|
Web3ProxyApp::spawn(top_config.clone(), num_workers, app_shutdown_sender.clone()).await?;
|
||||||
|
|
||||||
|
// start thread for watching config
|
||||||
|
if let Some(top_config_path) = top_config_path {
|
||||||
|
let config_sender = spawned_app.new_top_config_sender;
|
||||||
|
/*
|
||||||
|
#[cfg(feature = "inotify")]
|
||||||
|
{
|
||||||
|
let mut inotify = Inotify::init().expect("Failed to initialize inotify");
|
||||||
|
|
||||||
|
inotify
|
||||||
|
.add_watch(top_config_path.clone(), WatchMask::MODIFY)
|
||||||
|
.expect("Failed to add inotify watch on config");
|
||||||
|
|
||||||
|
let mut buffer = [0u8; 4096];
|
||||||
|
|
||||||
|
// TODO: exit the app if this handle exits
|
||||||
|
thread::spawn(move || loop {
|
||||||
|
// TODO: debounce
|
||||||
|
|
||||||
|
let events = inotify
|
||||||
|
.read_events_blocking(&mut buffer)
|
||||||
|
.expect("Failed to read inotify events");
|
||||||
|
|
||||||
|
for event in events {
|
||||||
|
if event.mask.contains(EventMask::MODIFY) {
|
||||||
|
info!("config changed");
|
||||||
|
match fs::read_to_string(&top_config_path) {
|
||||||
|
Ok(top_config) => match toml::from_str(&top_config) {
|
||||||
|
Ok(top_config) => {
|
||||||
|
config_sender.send(top_config).unwrap();
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
// TODO: panic?
|
||||||
|
error!("Unable to parse config! {:#?}", err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(err) => {
|
||||||
|
// TODO: panic?
|
||||||
|
error!("Unable to read config! {:#?}", err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
// TODO: is "MODIFY" enough, or do we want CLOSE_WRITE?
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
// #[cfg(not(feature = "inotify"))]
|
||||||
|
{
|
||||||
|
thread::spawn(move || loop {
|
||||||
|
match fs::read_to_string(&top_config_path) {
|
||||||
|
Ok(new_top_config) => match toml::from_str(&new_top_config) {
|
||||||
|
Ok(new_top_config) => {
|
||||||
|
if new_top_config != top_config {
|
||||||
|
top_config = new_top_config;
|
||||||
|
config_sender.send(top_config.clone()).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
// TODO: panic?
|
||||||
|
error!("Unable to parse config! {:#?}", err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(err) => {
|
||||||
|
// TODO: panic?
|
||||||
|
error!("Unable to read config! {:#?}", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
thread::sleep(Duration::from_secs(10));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// start thread for watching config
|
// start thread for watching config
|
||||||
// if let Some(top_config_path) = top_config_path {
|
// if let Some(top_config_path) = top_config_path {
|
||||||
@ -114,6 +192,8 @@ async fn run(
|
|||||||
|
|
||||||
// wait until the app has seen its first consensus head block
|
// wait until the app has seen its first consensus head block
|
||||||
// if backups were included, wait a little longer
|
// if backups were included, wait a little longer
|
||||||
|
// let _ = spawned_app.app.head_block_receiver().changed().await;
|
||||||
|
// if backups were included, wait a little longer
|
||||||
// for _ in 0..3 {
|
// for _ in 0..3 {
|
||||||
// let _ = spawned_app.consensus_connections_watcher.changed().await;
|
// let _ = spawned_app.consensus_connections_watcher.changed().await;
|
||||||
//
|
//
|
||||||
@ -121,16 +201,19 @@ async fn run(
|
|||||||
// .consensus_connections_watcher
|
// .consensus_connections_watcher
|
||||||
// .borrow_and_update();
|
// .borrow_and_update();
|
||||||
//
|
//
|
||||||
// if *consensus.context("Channel closed!")?.backups_needed {
|
// // Let's just do a super dirty unwrap to get things going
|
||||||
|
// if consensus.unwrap().backups_needed {
|
||||||
// info!(
|
// info!(
|
||||||
// "waiting longer. found consensus with backups: {}",
|
// "waiting longer. found consensus with backups: {}",
|
||||||
// *consensus.context("Channel closed!")?.head_block.as_ref().unwrap(),
|
// consensus.unwrap().head_block.as_ref().unwrap(),
|
||||||
// );
|
// );
|
||||||
// } else {
|
// } else {
|
||||||
// // TODO: also check that we have at least one archive node connected?
|
// // TODO: also check that we have at least one archive node connected?
|
||||||
// break;
|
// break;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
let _ = spawned_app.app.head_block_receiver().changed().await;
|
||||||
|
|
||||||
|
|
||||||
// start the frontend port
|
// start the frontend port
|
||||||
let frontend_handle = tokio::spawn(frontend::serve(
|
let frontend_handle = tokio::spawn(frontend::serve(
|
||||||
|
Loading…
Reference in New Issue
Block a user