Test replication
Dependencies
- [2]
UZXIRPR3Restarting after various failures - [3]
ENEREHTWRestart and rewind the server during failover (requires policykit) - [4]
NPSWSVZNInit - [5]
6Z6PYXTSTesting and debugging - [6]
QISO3HXBDebug++ - [7]
FIIWK33FFixing lock issues
Change contents
- replacement in src/main.rs at line 113
let mut race = tokio::spawn(race(host.clone(),path.clone(),is_leader.clone(),db.clone(),process_lock.clone(),));let mut race = tokio::spawn(race(host.clone(), is_leader.clone(), db.clone())); - edit in src/main.rs at line 120
));let mut check = tokio::spawn(check_postgres(host.clone(),port,password.clone(),db_name.clone(),path.clone(),lead.clone(),db.clone(),process_lock.clone(), - replacement in src/main.rs at line 152
}}, - edit in src/main.rs at line 157
e = &mut check => {error!("check postgres stopped: {:?}", e);break} - replacement in src/main.rs at line 182
path: String,mut leader: Receiver<String>,leader: Receiver<String>, - edit in src/main.rs at line 184
process_lock: Arc<Mutex<()>>, - replacement in src/main.rs at line 186
match race_(host.clone(),path.clone(),leader.clone(),pool.clone(),process_lock.clone(),).await{match race_(host.clone(), leader.clone(), pool.clone()).await { - edit in src/main.rs at line 199
path: String, - edit in src/main.rs at line 201
process_lock: Arc<Mutex<()>>, - edit in src/main.rs at line 301
async fn check_postgres(host: String,port: u16,password: String,db_name: String,path: String,leader: Arc<Sender<String>>,pool: Arc<Mutex<Option<tokio_postgres::Client>>>,process_lock: Arc<Mutex<()>>,) -> Result<(), anyhow::Error> {loop {let leader = leader.borrow().to_string();if leader != host {let mut needs_rewind = false;let pool_ = { pool.lock().await.take() };if let Some(pool_) = pool_ {needs_rewind = pool_.query_opt("SELECT 1 FROM pg_stat_wal_receiver", &[]).await?.is_none();*pool.lock().await = Some(pool_);}if needs_rewind {debug!("leader: {:?}", leader);rewind(&process_lock, &path, port, &db_name, &leader, &password).await}}tokio::time::sleep(std::time::Duration::from_secs(10)).await}}