Replaces fs-err in clean_orphaned_account_snapshot_dirs() (#34902)
* Replaces fs-err in clean_orphaned_account_snapshot_dirs() * pr: revert info message format changes
This commit is contained in:
parent
c30db7ad92
commit
b150de6d10
|
@ -607,7 +607,7 @@ impl Validator {
|
||||||
&config.snapshot_config.bank_snapshots_dir,
|
&config.snapshot_config.bank_snapshots_dir,
|
||||||
&config.account_snapshot_paths,
|
&config.account_snapshot_paths,
|
||||||
)
|
)
|
||||||
.map_err(|err| format!("Failed to clean orphaned account snapshot directories: {err:?}"))?;
|
.map_err(|err| format!("failed to clean orphaned account snapshot directories: {err}"))?;
|
||||||
timer.stop();
|
timer.stop();
|
||||||
info!("Cleaning orphaned account snapshot directories done. {timer}");
|
info!("Cleaning orphaned account snapshot directories done. {timer}");
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,6 @@ use {
|
||||||
snapshot_hash::StartingSnapshotHashes,
|
snapshot_hash::StartingSnapshotHashes,
|
||||||
snapshot_utils::{
|
snapshot_utils::{
|
||||||
self, clean_orphaned_account_snapshot_dirs, move_and_async_delete_path_contents,
|
self, clean_orphaned_account_snapshot_dirs, move_and_async_delete_path_contents,
|
||||||
SnapshotError,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
solana_sdk::{
|
solana_sdk::{
|
||||||
|
@ -67,7 +66,7 @@ const PROCESS_SLOTS_HELP_STRING: &str =
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
pub(crate) enum LoadAndProcessLedgerError {
|
pub(crate) enum LoadAndProcessLedgerError {
|
||||||
#[error("failed to clean orphaned account snapshot directories: {0}")]
|
#[error("failed to clean orphaned account snapshot directories: {0}")]
|
||||||
CleanOrphanedAccountSnapshotDirectories(#[source] SnapshotError),
|
CleanOrphanedAccountSnapshotDirectories(#[source] std::io::Error),
|
||||||
|
|
||||||
#[error("failed to create all run and snapshot directories: {0}")]
|
#[error("failed to create all run and snapshot directories: {0}")]
|
||||||
CreateAllAccountsRunAndSnapshotDirectories(#[source] std::io::Error),
|
CreateAllAccountsRunAndSnapshotDirectories(#[source] std::io::Error),
|
||||||
|
|
|
@ -32,7 +32,7 @@ use {
|
||||||
cmp::Ordering,
|
cmp::Ordering,
|
||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
fmt, fs,
|
fmt, fs,
|
||||||
io::{BufReader, BufWriter, Error as IoError, Read, Seek, Write},
|
io::{BufReader, BufWriter, Error as IoError, Read, Result as IoResult, Seek, Write},
|
||||||
num::NonZeroUsize,
|
num::NonZeroUsize,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
process::ExitStatus,
|
process::ExitStatus,
|
||||||
|
@ -616,7 +616,7 @@ pub fn move_and_async_delete_path(path: impl AsRef<Path>) {
|
||||||
pub fn clean_orphaned_account_snapshot_dirs(
|
pub fn clean_orphaned_account_snapshot_dirs(
|
||||||
bank_snapshots_dir: impl AsRef<Path>,
|
bank_snapshots_dir: impl AsRef<Path>,
|
||||||
account_snapshot_paths: &[PathBuf],
|
account_snapshot_paths: &[PathBuf],
|
||||||
) -> Result<()> {
|
) -> IoResult<()> {
|
||||||
// Create the HashSet of the account snapshot hardlink directories referenced by the snapshot dirs.
|
// Create the HashSet of the account snapshot hardlink directories referenced by the snapshot dirs.
|
||||||
// This is used to clean up any hardlinks that are no longer referenced by the snapshot dirs.
|
// This is used to clean up any hardlinks that are no longer referenced by the snapshot dirs.
|
||||||
let mut account_snapshot_dirs_referenced = HashSet::new();
|
let mut account_snapshot_dirs_referenced = HashSet::new();
|
||||||
|
@ -624,20 +624,37 @@ pub fn clean_orphaned_account_snapshot_dirs(
|
||||||
for snapshot in snapshots {
|
for snapshot in snapshots {
|
||||||
let account_hardlinks_dir = snapshot.snapshot_dir.join(SNAPSHOT_ACCOUNTS_HARDLINKS);
|
let account_hardlinks_dir = snapshot.snapshot_dir.join(SNAPSHOT_ACCOUNTS_HARDLINKS);
|
||||||
// loop through entries in the snapshot_hardlink_dir, read the symlinks, add the target to the HashSet
|
// loop through entries in the snapshot_hardlink_dir, read the symlinks, add the target to the HashSet
|
||||||
for entry in fs_err::read_dir(&account_hardlinks_dir)? {
|
let read_dir = fs::read_dir(&account_hardlinks_dir).map_err(|err| {
|
||||||
|
IoError::other(format!(
|
||||||
|
"failed to read account hardlinks dir '{}': {err}",
|
||||||
|
account_hardlinks_dir.display(),
|
||||||
|
))
|
||||||
|
})?;
|
||||||
|
for entry in read_dir {
|
||||||
let path = entry?.path();
|
let path = entry?.path();
|
||||||
let target = fs_err::read_link(&path)?;
|
let target = fs::read_link(&path).map_err(|err| {
|
||||||
|
IoError::other(format!(
|
||||||
|
"failed to read symlink '{}': {err}",
|
||||||
|
path.display(),
|
||||||
|
))
|
||||||
|
})?;
|
||||||
account_snapshot_dirs_referenced.insert(target);
|
account_snapshot_dirs_referenced.insert(target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop through the account snapshot hardlink directories, if the directory is not in the account_snapshot_dirs_referenced set, delete it
|
// loop through the account snapshot hardlink directories, if the directory is not in the account_snapshot_dirs_referenced set, delete it
|
||||||
for account_snapshot_path in account_snapshot_paths {
|
for account_snapshot_path in account_snapshot_paths {
|
||||||
for entry in fs_err::read_dir(account_snapshot_path)? {
|
let read_dir = fs::read_dir(account_snapshot_path).map_err(|err| {
|
||||||
|
IoError::other(format!(
|
||||||
|
"failed to read account snapshot dir '{}': {err}",
|
||||||
|
account_snapshot_path.display(),
|
||||||
|
))
|
||||||
|
})?;
|
||||||
|
for entry in read_dir {
|
||||||
let path = entry?.path();
|
let path = entry?.path();
|
||||||
if !account_snapshot_dirs_referenced.contains(&path) {
|
if !account_snapshot_dirs_referenced.contains(&path) {
|
||||||
info!(
|
info!(
|
||||||
"Removing orphaned account snapshot hardlink directory: {}",
|
"Removing orphaned account snapshot hardlink directory '{}'...",
|
||||||
path.display()
|
path.display()
|
||||||
);
|
);
|
||||||
move_and_async_delete_path(&path);
|
move_and_async_delete_path(&path);
|
||||||
|
|
Loading…
Reference in New Issue