Skip to content

Commit

Permalink
Move create_dir_all to AccountsDB::new (solana-labs#7465)
Browse files Browse the repository at this point in the history
AppendVec create doesn't need to try and create
paths every time and it can stall while snapshot
create is happening.
  • Loading branch information
sakridge authored Dec 14, 2019
1 parent 7adc721 commit 9d5a07b
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
1 change: 1 addition & 0 deletions core/src/snapshot_packager_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ mod tests {
let snapshot_package_output_path = temp_dir.join("snapshots_output");
fs::create_dir_all(&snapshot_package_output_path).unwrap();

fs::create_dir_all(&accounts_dir).unwrap();
// Create some storage entries
let storage_entries: Vec<_> = (0..5)
.map(|i| Arc::new(AccountStorageEntry::new(&accounts_dir, 0, i, 10)))
Expand Down
9 changes: 8 additions & 1 deletion runtime/src/accounts_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ impl Default for AccountsDB {

impl AccountsDB {
pub fn new(paths: Vec<PathBuf>) -> Self {
if !paths.is_empty() {
let new = if !paths.is_empty() {
Self {
paths: RwLock::new(paths),
temp_paths: None,
Expand All @@ -422,7 +422,14 @@ impl AccountsDB {
temp_paths: Some(temp_dirs),
..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)]
Expand Down
5 changes: 1 addition & 4 deletions runtime/src/append_vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize};
use solana_sdk::{account::Account, clock::Epoch, hash::Hash, pubkey::Pubkey};
use std::{
fmt,
fs::{create_dir_all, remove_file, OpenOptions},
fs::{remove_file, OpenOptions},
io,
io::{Cursor, Seek, SeekFrom, Write},
mem,
Expand Down Expand Up @@ -95,9 +95,6 @@ impl AppendVec {
pub fn new(file: &Path, create: bool, size: usize) -> Self {
if create {
let _ignored = remove_file(file);
if let Some(parent) = file.parent() {
create_dir_all(parent).expect("Create directory failed");
}
}

let mut data = OpenOptions::new()
Expand Down

0 comments on commit 9d5a07b

Please sign in to comment.