From a909d2d6438d0b53382f762cf916ee92286a9965 Mon Sep 17 00:00:00 2001 From: Dull Bananas Date: Mon, 20 May 2024 19:35:42 +0000 Subject: [PATCH] attempt 2 --- .../db_schema/src/schema_setup/diff_check.rs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/crates/db_schema/src/schema_setup/diff_check.rs b/crates/db_schema/src/schema_setup/diff_check.rs index 4e8c63faa..842fa3ebb 100644 --- a/crates/db_schema/src/schema_setup/diff_check.rs +++ b/crates/db_schema/src/schema_setup/diff_check.rs @@ -16,7 +16,7 @@ enum DumpAction { pub struct DiffChecker { snapshot_conn: PgConnection, handles: Vec>, - snapshot_sender: Option>, + snapshot_sender: Option>, error: Receiver>, // todo rename to channels //dump_receivers: Arc>>>, @@ -43,13 +43,14 @@ impl DiffChecker { let rx2 = rx.clone(); let error_t = error_t.clone(); handles.push(thread::spawn(move || if let Err(e) = std::panic::catch_unwind(move || { - while let Ok((snapshot, action)) = rx2.recv() { + while let Ok(((snapshot,conn), action)) = rx2.recv() { let snapshot_arg = format!("--snapshot={snapshot}"); let output = Command::new("pg_dump") .args(["--schema-only", &snapshot_arg]) .env("DATABASE_URL", SETTINGS.get_database_url()) .output() .expect("failed to start pg_dump process"); + std::mem::drop(conn); if !output.status.success() { panic!("{}", String::from_utf8(output.stderr).expect("")); @@ -77,7 +78,8 @@ impl DiffChecker { fn check_err(&mut self) { if let Ok(e) = self.error.try_recv() { - std::panic::resume_unwind(e); + //std::panic::resume_unwind(e); + panic!(); } } @@ -89,10 +91,15 @@ impl DiffChecker { self.check_err(); } - fn get_snapshot(&mut self) -> String { - diesel::select(pg_export_snapshot()) - .get_result::(&mut self.snapshot_conn) - .expect("pg_export_snapshot failed") + fn get_snapshot(&mut self) -> (String, PgConnection) { + let db_url = SETTINGS.get_database_url(); + let mut conn = PgConnection::establish(&db_url).expect("conn2"); + conn.batch_execute("BEGIN;").expect("begin"); + //conn.batch_execute("SELECT * FROM __diesel_schema_migrations;").expect("b"); + let snapshot = diesel::select(pg_export_snapshot()) + .get_result::(&mut conn) + .expect("pg_export_snapshot failed"); + (snapshot,conn) } pub fn get_dump(&mut self) -> Receiver {