Move create_dir_all to AccountsDB::new (#7465)
AppendVec create doesn't need to try and create paths every time and it can stall while snapshot create is happening.
This commit is contained in:
@ -230,6 +230,7 @@ mod tests {
|
|||||||
let snapshot_package_output_path = temp_dir.join("snapshots_output");
|
let snapshot_package_output_path = temp_dir.join("snapshots_output");
|
||||||
fs::create_dir_all(&snapshot_package_output_path).unwrap();
|
fs::create_dir_all(&snapshot_package_output_path).unwrap();
|
||||||
|
|
||||||
|
fs::create_dir_all(&accounts_dir).unwrap();
|
||||||
// Create some storage entries
|
// Create some storage entries
|
||||||
let storage_entries: Vec<_> = (0..5)
|
let storage_entries: Vec<_> = (0..5)
|
||||||
.map(|i| Arc::new(AccountStorageEntry::new(&accounts_dir, 0, i, 10)))
|
.map(|i| Arc::new(AccountStorageEntry::new(&accounts_dir, 0, i, 10)))
|
||||||
|
@ -407,7 +407,7 @@ impl Default for AccountsDB {
|
|||||||
|
|
||||||
impl AccountsDB {
|
impl AccountsDB {
|
||||||
pub fn new(paths: Vec<PathBuf>) -> Self {
|
pub fn new(paths: Vec<PathBuf>) -> Self {
|
||||||
if !paths.is_empty() {
|
let new = if !paths.is_empty() {
|
||||||
Self {
|
Self {
|
||||||
paths: RwLock::new(paths),
|
paths: RwLock::new(paths),
|
||||||
temp_paths: None,
|
temp_paths: None,
|
||||||
@ -422,7 +422,14 @@ impl AccountsDB {
|
|||||||
temp_paths: Some(temp_dirs),
|
temp_paths: Some(temp_dirs),
|
||||||
..Self::default()
|
..Self::default()
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
{
|
||||||
|
let paths = new.paths.read().unwrap();
|
||||||
|
for path in paths.iter() {
|
||||||
|
std::fs::create_dir_all(path).expect("Create directory failed.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
new
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use solana_sdk::{account::Account, clock::Epoch, hash::Hash, pubkey::Pubkey};
|
use solana_sdk::{account::Account, clock::Epoch, hash::Hash, pubkey::Pubkey};
|
||||||
use std::{
|
use std::{
|
||||||
fmt,
|
fmt,
|
||||||
fs::{create_dir_all, remove_file, OpenOptions},
|
fs::{remove_file, OpenOptions},
|
||||||
io,
|
io,
|
||||||
io::{Cursor, Seek, SeekFrom, Write},
|
io::{Cursor, Seek, SeekFrom, Write},
|
||||||
mem,
|
mem,
|
||||||
@ -95,9 +95,6 @@ impl AppendVec {
|
|||||||
pub fn new(file: &Path, create: bool, size: usize) -> Self {
|
pub fn new(file: &Path, create: bool, size: usize) -> Self {
|
||||||
if create {
|
if create {
|
||||||
let _ignored = remove_file(file);
|
let _ignored = remove_file(file);
|
||||||
if let Some(parent) = file.parent() {
|
|
||||||
create_dir_all(parent).expect("Create directory failed");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut data = OpenOptions::new()
|
let mut data = OpenOptions::new()
|
||||||
|
Reference in New Issue
Block a user