Switch to multiple container setup

This commit is contained in:
deadmanoz
2025-06-27 11:45:04 +08:00
parent ec3a2f29f0
commit d83a833b4d
8 changed files with 305 additions and 99 deletions

View File

@@ -201,33 +201,37 @@ impl Config {
}
fn check(&self) {
if !self.bitcoindir().is_dir() {
println!("{:?} isn't a valid directory", self.bitcoindir());
println!("Please use the --bitcoindir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if !self.blocksdir().is_dir() {
println!("{:?} isn't a valid directory", self.blocksdir());
println!("Please use the --blocksdir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
// Only check Bitcoin directories and RPC if we're running the processor
if self.process() {
if !self.bitcoindir().is_dir() {
println!("{:?} isn't a valid directory", self.bitcoindir());
println!("Please use the --bitcoindir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if !self.blocksdir().is_dir() {
println!("{:?} isn't a valid directory", self.blocksdir());
println!("Please use the --blocksdir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if self.rpc_auth().is_err() {
println!(
"No way found to authenticate the RPC client, please either set --rpccookiefile or --rpcuser and --rpcpassword.\nRun the program with '-h' for help."
);
std::process::exit(1);
}
}
// Always check BRK directory (needed by both processor and server)
if !self.brkdir().is_dir() {
println!("{:?} isn't a valid directory", self.brkdir());
println!("Please use the --brkdir parameter to set a valid path.");
println!("Run the program with '-h' for help.");
std::process::exit(1);
}
if self.rpc_auth().is_err() {
println!(
"No way found to authenticate the RPC client, please either set --rpccookiefile or --rpcuser and --rpcpassword.\nRun the program with '-h' for help."
);
std::process::exit(1);
}
}
fn read(path: &Path) -> Self {

View File

@@ -12,19 +12,31 @@ use crate::config::Config;
pub fn run() -> color_eyre::Result<()> {
let config = Config::import()?;
let rpc = config.rpc()?;
let rpc = if config.process() {
Some(config.rpc()?)
} else {
None
};
let exit = Exit::new();
let parser = brk_parser::Parser::new_with_outputs_dir(config.blocksdir(), config.outputsdir(), rpc);
let parser = if config.process() && rpc.is_some() {
Some(brk_parser::Parser::new_with_outputs_dir(
config.blocksdir(),
config.outputsdir(),
rpc.unwrap(),
))
} else {
None
};
let format = config.format();
let mut indexer = Indexer::forced_import(&config.outputsdir())?;
let wait_for_synced_node = || -> color_eyre::Result<()> {
let wait_for_synced_node = |rpc_client: &bitcoincore_rpc::Client| -> color_eyre::Result<()> {
let is_synced = || -> color_eyre::Result<bool> {
let info = rpc.get_blockchain_info()?;
let info = rpc_client.get_blockchain_info()?;
Ok(info.headers == info.blocks)
};
@@ -70,27 +82,33 @@ pub fn run() -> color_eyre::Result<()> {
};
if config.process() {
loop {
wait_for_synced_node()?;
if let (Some(rpc_client), Some(parser)) = (rpc, parser) {
loop {
wait_for_synced_node(rpc_client)?;
let block_count = rpc.get_block_count()?;
let block_count = rpc_client.get_block_count()?;
info!("{} blocks found.", block_count + 1);
info!("{} blocks found.", block_count + 1);
let starting_indexes =
indexer.index(&parser, rpc, &exit, config.check_collisions())?;
let starting_indexes =
indexer.index(&parser, rpc_client, &exit, config.check_collisions())?;
computer.compute(&mut indexer, starting_indexes, &exit)?;
computer.compute(&mut indexer, starting_indexes, &exit)?;
if let Some(delay) = config.delay() {
sleep(Duration::from_secs(delay))
}
info!("Waiting for new blocks...");
while block_count == rpc.get_block_count()? {
sleep(Duration::from_secs(1))
if let Some(delay) = config.delay() {
sleep(Duration::from_secs(delay))
}
info!("Waiting for new blocks...");
while block_count == rpc_client.get_block_count()? {
sleep(Duration::from_secs(1))
}
}
} else {
return Err(color_eyre::eyre::eyre!(
"RPC client and parser required for processing mode"
))?;
}
}