Restarting after various failures
Dependencies
- [2]
UEGA35KUSignalling the postgres server when the leader changes, but does not become this node - [3]
ENEREHTWRestart and rewind the server during failover (requires policykit) - [4]
6Z6PYXTSTesting and debugging - [5]
NPSWSVZNInit - [6]
FIIWK33FFixing lock issues
Change contents
- replacement in src/main.rs at line 102
let process_lock = Arc::new(Mutex::new(())); - edit in src/main.rs at line 111
process_lock.clone(), - edit in src/main.rs at line 118
process_lock.clone(), - edit in src/main.rs at line 173
host: String,path: String,mut leader: Receiver<String>,pool: Arc<Mutex<Option<tokio_postgres::Client>>>,process_lock: Arc<Mutex<()>>,) {loop {match race_(host.clone(),path.clone(),leader.clone(),pool.clone(),process_lock.clone(),).await{Ok(()) => {error!("race stopped")}Err(e) => {error!("race_ error {:?}", e);}}tokio::time::sleep(std::time::Duration::from_secs(1)).await;}}async fn race_( - edit in src/main.rs at line 204
process_lock: Arc<Mutex<()>>, - replacement in src/main.rs at line 236
promote(&path).await;// promote(&process_lock, &path).await; - edit in src/main.rs at line 261
process_lock: Arc<Mutex<()>>, - replacement in src/main.rs at line 280
promote(&path).awaitpromote(&process_lock, &path).await - replacement in src/main.rs at line 292
rewind(&path, port, &db_name, leader, &password).await;rewind(&process_lock, &path, port, &db_name, leader, &password).await; - replacement in src/main.rs at line 294
reload(&path).await;reload(&process_lock, &path).await; - replacement in src/main.rs at line 297
reload(&path).await;reload(&process_lock, &path).await; - replacement in src/main.rs at line 305
async fn promote(path: &str) {async fn promote(process_lock: &Mutex<()>, path: &str) { - edit in src/main.rs at line 308
let guard = process_lock.lock().await; - edit in src/main.rs at line 317
std::mem::drop(guard); - replacement in src/main.rs at line 320
async fn reload(path: &str) {async fn reload(process_lock: &Mutex<()>, path: &str) { - edit in src/main.rs at line 323
let guard = process_lock.lock().await; - edit in src/main.rs at line 332
std::mem::drop(guard); - replacement in src/main.rs at line 335
async fn rewind(path: &str, port: u16, db_name: &str, leader: &str, password: &str) {async fn rewind(process_lock: &Mutex<()>,path: &str,port: u16,db_name: &str,leader: &str,password: &str,) { - edit in src/main.rs at line 344
let guard = process_lock.lock().await; - edit in src/main.rs at line 403
std::mem::drop(guard);