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:
sakridge
2019-12-13 16:46:16 -08:00
committed by GitHub
parent 7adc721d96
commit 9d5a07bac4
3 changed files with 10 additions and 5 deletions

View File

@ -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)))

View File

@ -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)]

View File

@ -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()