Test replication

pmeunier
May 6, 2022, 6:42 AM
3YOGOAKUFTRSFYT2BY5ZA5TRTIO3YIWT7DASZLT4QH62QZEG4IOAC

Dependencies

Change contents

  • replacement in src/main.rs at line 113
    [3.1943][3.836:965](),[3.965][2.81:111](),[2.111][3.965:973](),[3.965][3.965:973]()
    let mut race = tokio::spawn(race(
    host.clone(),
    path.clone(),
    is_leader.clone(),
    db.clone(),
    process_lock.clone(),
    ));
    [3.1943]
    [3.1366]
    let mut race = tokio::spawn(race(host.clone(), is_leader.clone(), db.clone()));
  • edit in src/main.rs at line 120
    [3.2258]
    [3.2258]
    ));
    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
    [3.3589][3.3589:3603]()
    }
    [3.3589]
    [3.1590]
    },
  • edit in src/main.rs at line 157
    [3.3736]
    [3.3736]
    e = &mut check => {
    error!("check postgres stopped: {:?}", e);
    break
    }
  • replacement in src/main.rs at line 182
    [2.130][2.130:182]()
    path: String,
    mut leader: Receiver<String>,
    [2.130]
    [2.182]
    leader: Receiver<String>,
  • edit in src/main.rs at line 184
    [2.236][2.236:270]()
    process_lock: Arc<Mutex<()>>,
  • replacement in src/main.rs at line 186
    [2.285][2.285:481]()
    match race_(
    host.clone(),
    path.clone(),
    leader.clone(),
    pool.clone(),
    process_lock.clone(),
    )
    .await
    {
    [2.285]
    [2.481]
    match race_(host.clone(), leader.clone(), pool.clone()).await {
  • edit in src/main.rs at line 199
    [3.1067][3.1067:1085]()
    path: String,
  • edit in src/main.rs at line 201
    [3.1173][2.747:781]()
    process_lock: Arc<Mutex<()>>,
  • edit in src/main.rs at line 301
    [3.3137]
    [2.1105]
    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
    }
    }