Skip to content

Commit

Permalink
spawn check_and_delete_old_databases
Browse files Browse the repository at this point in the history
  • Loading branch information
oxarbitrage committed Jun 15, 2022
1 parent 189970a commit 7a57981
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 14 deletions.
24 changes: 14 additions & 10 deletions zebra-state/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,16 +132,20 @@ impl Default for Config {
/// - The directory name has a prefix `v`.
/// - The directory name without the prefix can be parsed as an unsigned number.
/// - The parsed number is lower than the hardcoded `DATABASE_FORMAT_VERSION`.
pub fn check_and_delete_old_databases(cache_dir: PathBuf) {
let cache_dir = cache_dir.join("state");
if let Some(read_dir) = read_dir(cache_dir.clone()) {
for entry in read_dir.flatten() {
if let Some(dir_name) = parse_dir_name(entry) {
if let Some(version_number) = parse_version_number(dir_name.clone()) {
if version_number < crate::constants::DATABASE_FORMAT_VERSION {
let delete_path = cache_dir.join(dir_name);
if remove_dir_all(delete_path.clone()).is_ok() {
info!("deleted outdated state directory {:?}", delete_path);
pub async fn check_and_delete_old_databases(config: Config) {
if !config.ephemeral && config.delete_old_database {
info!("checking old database versions");

let cache_dir = config.cache_dir.join("state");
if let Some(read_dir) = read_dir(cache_dir.clone()) {
for entry in read_dir.flatten() {
if let Some(dir_name) = parse_dir_name(entry) {
if let Some(version_number) = parse_version_number(dir_name.clone()) {
if version_number < crate::constants::DATABASE_FORMAT_VERSION {
let delete_path = cache_dir.join(dir_name);
if remove_dir_all(delete_path.clone()).is_ok() {
info!("deleted outdated state directory {:?}", delete_path);
}
}
}
}
Expand Down
19 changes: 15 additions & 4 deletions zebrad/src/commands/start.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,9 @@ impl StartCmd {
let config = app_config().clone();
info!(?config);

if !config.state.ephemeral && config.state.delete_old_database {
info!("checking old database versions");
zebra_state::check_and_delete_old_databases(config.state.cache_dir.clone());
}
let mut old_databases_task_handle = tokio::spawn(
zebra_state::check_and_delete_old_databases(config.state.clone()).in_current_span(),
);

info!("initializing node state");
let (state_service, read_only_state_service, latest_chain_tip, chain_tip_change) =
Expand Down Expand Up @@ -234,6 +233,8 @@ impl StartCmd {
// startup tasks
let groth16_download_handle_fused = (&mut groth16_download_handle).fuse();
pin!(groth16_download_handle_fused);
let old_databases_task_handle_fused = (&mut old_databases_task_handle).fuse();
pin!(old_databases_task_handle_fused);

// Wait for tasks to finish
let exit_status = loop {
Expand Down Expand Up @@ -296,6 +297,16 @@ impl StartCmd {
exit_when_task_finishes = false;
Ok(())
}

// The same for the old databases task, we expect it to finish while Zebra is running.
old_databases_result = &mut old_databases_task_handle_fused => {
old_databases_result
.unwrap_or_else(|_| panic!(
"unexpected panic deleting old database directories"));

exit_when_task_finishes = false;
Ok(())
}
};

// Stop Zebra if a task finished and returned an error,
Expand Down

0 comments on commit 7a57981

Please sign in to comment.