Retrying if the HTTP connection drops while reading the body

[?]
Dec 25, 2020, 6:01 PM
VBMXB443FGZL6DLT6KAP2ICFCCQNXCUMDEUL67HB4CNKFMBBNSSAC

Dependencies

  • [2] IQ4FCHPZ HTTP connections: pooling + retry on error
  • [3] FBXYP7QM Forgot to add remote::http
  • [4] Q45QHPO4 Feedback on network stuff

Change contents

  • replacement in pijul/src/remote/http.rs at line 22
    [2.157][2.157:190]()
    ) -> Result<(), anyhow::Error> {
    [2.157]
    [2.190]
    ) -> Result<libpijul::pristine::Hash, anyhow::Error> {
  • replacement in pijul/src/remote/http.rs at line 31
    [2.578][2.578:697]()
    let mut res = loop {
    let res = if let Ok(res) = client.get(&url).query(&[("change", &c32)]).send().await {
    [2.578]
    [2.697]
    'outer: loop {
    let mut res = if let Ok(res) = client.get(&url).query(&[("change", &c32)]).send().await {
    delay = 1f64;
  • replacement in pijul/src/remote/http.rs at line 42
    [2.984][2.984:1063]()
    if res.status().is_success() {
    break res;
    } else {
    [2.984]
    [2.1063]
    if !res.status().is_success() {
  • replacement in pijul/src/remote/http.rs at line 48
    [2.1193][2.1193:1324]()
    };
    while let Some(chunk) = res.chunk().await? {
    debug!("writing {:?}", chunk.len());
    f.write_all(&chunk)?;
    [2.1193]
    [2.1324]
    loop {
    match res.chunk().await {
    Ok(Some(chunk)) => {
    debug!("writing {:?}", chunk.len());
    f.write_all(&chunk)?;
    }
    Ok(None) => break 'outer,
    Err(_) => {
    error!("Error while downloading {:?}, retrying", url);
    tokio::time::delay_for(std::time::Duration::from_secs_f64(delay)).await;
    delay *= 2.;
    break;
    }
    }
    }
    std::fs::rename(&path_, &path_.with_extension("change"))?;
  • replacement in pijul/src/remote/http.rs at line 65
    [2.1330][2.1330:1404]()
    std::fs::rename(&path_, &path_.with_extension("change"))?;
    Ok(())
    [2.1330]
    [3.207]
    Ok(c)
  • replacement in pijul/src/remote/http.rs at line 99
    [2.1867][2.1867:1944]()
    t.await??;
    if send.send(*c).await.is_err() {
    [2.1867]
    [2.1944]
    let c = t.await??;
    if send.send(c).await.is_err() {