Restore snapshot hard linking
This commit is contained in:
parent
3bd4c38a84
commit
872a249e97
|
@ -135,22 +135,6 @@ impl Ord for SlotSnapshotPaths {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SlotSnapshotPaths {
|
|
||||||
fn copy_snapshot_directory<P: AsRef<Path>>(&self, snapshot_hardlink_dir: P) -> Result<()> {
|
|
||||||
// Create a new directory in snapshot_hardlink_dir
|
|
||||||
let new_slot_hardlink_dir = snapshot_hardlink_dir.as_ref().join(self.slot.to_string());
|
|
||||||
let _ = fs::remove_dir_all(&new_slot_hardlink_dir);
|
|
||||||
fs::create_dir_all(&new_slot_hardlink_dir)?;
|
|
||||||
|
|
||||||
// Copy the snapshot
|
|
||||||
fs::copy(
|
|
||||||
&self.snapshot_file_path,
|
|
||||||
&new_slot_hardlink_dir.join(self.slot.to_string()),
|
|
||||||
)?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn package_snapshot<P: AsRef<Path>, Q: AsRef<Path>>(
|
pub fn package_snapshot<P: AsRef<Path>, Q: AsRef<Path>>(
|
||||||
bank: &Bank,
|
bank: &Bank,
|
||||||
snapshot_files: &SlotSnapshotPaths,
|
snapshot_files: &SlotSnapshotPaths,
|
||||||
|
@ -162,7 +146,7 @@ pub fn package_snapshot<P: AsRef<Path>, Q: AsRef<Path>>(
|
||||||
snapshot_version: SnapshotVersion,
|
snapshot_version: SnapshotVersion,
|
||||||
) -> Result<AccountsPackage> {
|
) -> Result<AccountsPackage> {
|
||||||
// Hard link all the snapshots we need for this package
|
// Hard link all the snapshots we need for this package
|
||||||
let snapshot_hard_links_dir = tempfile::Builder::new()
|
let snapshot_tmpdir = tempfile::Builder::new()
|
||||||
.prefix(&format!("{}{}-", TMP_SNAPSHOT_DIR_PREFIX, bank.slot()))
|
.prefix(&format!("{}{}-", TMP_SNAPSHOT_DIR_PREFIX, bank.slot()))
|
||||||
.tempdir_in(snapshot_path)?;
|
.tempdir_in(snapshot_path)?;
|
||||||
|
|
||||||
|
@ -173,9 +157,17 @@ pub fn package_snapshot<P: AsRef<Path>, Q: AsRef<Path>>(
|
||||||
snapshot_storages.len()
|
snapshot_storages.len()
|
||||||
);
|
);
|
||||||
|
|
||||||
// Any errors from this point on will cause the above AccountsPackage to drop, clearing
|
// Hard link the snapshot into a tmpdir, to ensure its not removed prior to packaging.
|
||||||
// any temporary state created for the AccountsPackage (like the snapshot_hard_links_dir)
|
{
|
||||||
snapshot_files.copy_snapshot_directory(snapshot_hard_links_dir.path())?;
|
let snapshot_hardlink_dir = snapshot_tmpdir
|
||||||
|
.as_ref()
|
||||||
|
.join(snapshot_files.slot.to_string());
|
||||||
|
fs::create_dir_all(&snapshot_hardlink_dir)?;
|
||||||
|
fs::hard_link(
|
||||||
|
&snapshot_files.snapshot_file_path,
|
||||||
|
&snapshot_hardlink_dir.join(snapshot_files.slot.to_string()),
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
|
||||||
let snapshot_package_output_file = get_snapshot_archive_path(
|
let snapshot_package_output_file = get_snapshot_archive_path(
|
||||||
&snapshot_package_output_path,
|
&snapshot_package_output_path,
|
||||||
|
@ -187,7 +179,7 @@ pub fn package_snapshot<P: AsRef<Path>, Q: AsRef<Path>>(
|
||||||
bank.slot(),
|
bank.slot(),
|
||||||
bank.block_height(),
|
bank.block_height(),
|
||||||
status_cache_slot_deltas,
|
status_cache_slot_deltas,
|
||||||
snapshot_hard_links_dir,
|
snapshot_tmpdir,
|
||||||
snapshot_storages,
|
snapshot_storages,
|
||||||
snapshot_package_output_file,
|
snapshot_package_output_file,
|
||||||
bank.get_accounts_hash(),
|
bank.get_accounts_hash(),
|
||||||
|
|
Loading…
Reference in New Issue