mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-31 13:54:27 +01:00
Merge 'Simulator: persist files in sim memory IO for integrity check' from Pedro Muniz
If we don't persist the files, rusqlite will open an empty file and perform integrity check on it. Reviewed-by: bit-aloo (@Shourya742) Closes #3676
This commit is contained in:
@@ -611,6 +611,8 @@ fn run_simulation_default(
|
||||
|
||||
tracing::info!("Simulation completed");
|
||||
|
||||
env.io.persist_files().unwrap();
|
||||
|
||||
if result.error.is_none() {
|
||||
let ic = integrity_check(&env.get_db_path());
|
||||
if let Err(err) = ic {
|
||||
@@ -684,6 +686,7 @@ const BANNER: &str = r#"
|
||||
"#;
|
||||
|
||||
fn integrity_check(db_path: &Path) -> anyhow::Result<()> {
|
||||
assert!(db_path.exists());
|
||||
let conn = rusqlite::Connection::open(db_path)?;
|
||||
let mut stmt = conn.prepare("SELECT * FROM pragma_integrity_check;")?;
|
||||
let mut rows = stmt.query(())?;
|
||||
|
||||
@@ -79,6 +79,11 @@ impl SimIO for SimulatorIO {
|
||||
fn close_files(&self) {
|
||||
self.files.borrow_mut().clear()
|
||||
}
|
||||
|
||||
fn persist_files(&self) -> anyhow::Result<()> {
|
||||
// Files are persisted automatically
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Clock for SimulatorIO {
|
||||
|
||||
@@ -190,6 +190,17 @@ impl SimIO for MemorySimIO {
|
||||
file.closed.set(true);
|
||||
}
|
||||
}
|
||||
|
||||
fn persist_files(&self) -> anyhow::Result<()> {
|
||||
let files = self.files.borrow();
|
||||
for (file_path, file) in files.iter() {
|
||||
if file_path.ends_with(".db") || file_path.ends_with("wal") || file_path.ends_with("lg")
|
||||
{
|
||||
std::fs::write(file_path, &*file.buffer.borrow())?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Clock for MemorySimIO {
|
||||
|
||||
@@ -20,4 +20,6 @@ pub trait SimIO: turso_core::IO {
|
||||
fn syncing(&self) -> bool;
|
||||
|
||||
fn close_files(&self);
|
||||
|
||||
fn persist_files(&self) -> anyhow::Result<()>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user