some internal combinator-influenced api cleanup
The download methods used to take the destination by value and return them again, since this was required when using combinators before we had `async fn`. But this is just an ugly left-over now. Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
		@ -44,8 +44,8 @@ async fn run() -> Result<(), Error> {
 | 
			
		||||
 | 
			
		||||
    let mut bytes = 0;
 | 
			
		||||
    for _ in 0..100 {
 | 
			
		||||
        let writer = DummyWriter { bytes: 0 };
 | 
			
		||||
        let writer = client.speedtest(writer).await?;
 | 
			
		||||
        let mut writer = DummyWriter { bytes: 0 };
 | 
			
		||||
        client.speedtest(&mut writer).await?;
 | 
			
		||||
        println!("Received {} bytes", writer.bytes);
 | 
			
		||||
        bytes += writer.bytes;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -2199,7 +2199,7 @@ async fn catalog_shell(param: Value) -> Result<(), Error> {
 | 
			
		||||
        true,
 | 
			
		||||
    ).await?;
 | 
			
		||||
 | 
			
		||||
    let tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
    let mut tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
        .write(true)
 | 
			
		||||
        .read(true)
 | 
			
		||||
        .custom_flags(libc::O_TMPFILE)
 | 
			
		||||
@ -2216,7 +2216,7 @@ async fn catalog_shell(param: Value) -> Result<(), Error> {
 | 
			
		||||
        Arc::new(BufferedDynamicReadAt::new(reader));
 | 
			
		||||
    let decoder = proxmox_backup::pxar::fuse::Accessor::new(reader, archive_size).await?;
 | 
			
		||||
 | 
			
		||||
    let tmpfile = client.download(CATALOG_NAME, tmpfile).await?;
 | 
			
		||||
    client.download(CATALOG_NAME, &mut tmpfile).await?;
 | 
			
		||||
    let index = DynamicIndexReader::new(tmpfile)
 | 
			
		||||
        .map_err(|err| format_err!("unable to read catalog index - {}", err))?;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -91,7 +91,7 @@ impl BackupReader {
 | 
			
		||||
        &self,
 | 
			
		||||
        file_name: &str,
 | 
			
		||||
        output: W,
 | 
			
		||||
    ) -> Result<W, Error> {
 | 
			
		||||
    ) -> Result<(), Error> {
 | 
			
		||||
        let path = "download";
 | 
			
		||||
        let param = json!({ "file-name": file_name });
 | 
			
		||||
        self.h2.download(path, Some(param), output).await
 | 
			
		||||
@ -103,7 +103,7 @@ impl BackupReader {
 | 
			
		||||
    pub async fn speedtest<W: Write + Send>(
 | 
			
		||||
        &self,
 | 
			
		||||
        output: W,
 | 
			
		||||
    ) -> Result<W, Error> {
 | 
			
		||||
    ) -> Result<(), Error> {
 | 
			
		||||
        self.h2.download("speedtest", None, output).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -112,7 +112,7 @@ impl BackupReader {
 | 
			
		||||
        &self,
 | 
			
		||||
        digest: &[u8; 32],
 | 
			
		||||
        output: W,
 | 
			
		||||
    ) -> Result<W, Error> {
 | 
			
		||||
    ) -> Result<(), Error> {
 | 
			
		||||
        let path = "chunk";
 | 
			
		||||
        let param = json!({ "digest": digest_to_hex(digest) });
 | 
			
		||||
        self.h2.download(path, Some(param), output).await
 | 
			
		||||
@ -127,7 +127,8 @@ impl BackupReader {
 | 
			
		||||
 | 
			
		||||
        use std::convert::TryFrom;
 | 
			
		||||
 | 
			
		||||
        let raw_data = self.download(MANIFEST_BLOB_NAME, Vec::with_capacity(64*1024)).await?;
 | 
			
		||||
        let mut raw_data = Vec::with_capacity(64 * 1024);
 | 
			
		||||
        self.download(MANIFEST_BLOB_NAME, &mut raw_data).await?;
 | 
			
		||||
        let blob = DataBlob::from_raw(raw_data)?;
 | 
			
		||||
        blob.verify_crc()?;
 | 
			
		||||
        let data = blob.decode(self.crypt_config.as_ref().map(Arc::as_ref))?;
 | 
			
		||||
@ -146,13 +147,13 @@ impl BackupReader {
 | 
			
		||||
        name: &str,
 | 
			
		||||
    ) -> Result<DataBlobReader<File>, Error> {
 | 
			
		||||
 | 
			
		||||
        let tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
        let mut tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
            .write(true)
 | 
			
		||||
            .read(true)
 | 
			
		||||
            .custom_flags(libc::O_TMPFILE)
 | 
			
		||||
            .open("/tmp")?;
 | 
			
		||||
 | 
			
		||||
        let mut tmpfile = self.download(name, tmpfile).await?;
 | 
			
		||||
        self.download(name, &mut tmpfile).await?;
 | 
			
		||||
 | 
			
		||||
        let (csum, size) = compute_file_csum(&mut tmpfile)?;
 | 
			
		||||
        manifest.verify_file(name, &csum, size)?;
 | 
			
		||||
@ -172,13 +173,13 @@ impl BackupReader {
 | 
			
		||||
        name: &str,
 | 
			
		||||
    ) -> Result<DynamicIndexReader, Error> {
 | 
			
		||||
 | 
			
		||||
        let tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
        let mut tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
            .write(true)
 | 
			
		||||
            .read(true)
 | 
			
		||||
            .custom_flags(libc::O_TMPFILE)
 | 
			
		||||
            .open("/tmp")?;
 | 
			
		||||
 | 
			
		||||
        let tmpfile = self.download(name, tmpfile).await?;
 | 
			
		||||
        self.download(name, &mut tmpfile).await?;
 | 
			
		||||
 | 
			
		||||
        let index = DynamicIndexReader::new(tmpfile)
 | 
			
		||||
            .map_err(|err| format_err!("unable to read dynamic index '{}' - {}", name, err))?;
 | 
			
		||||
@ -200,13 +201,13 @@ impl BackupReader {
 | 
			
		||||
        name: &str,
 | 
			
		||||
    ) -> Result<FixedIndexReader, Error> {
 | 
			
		||||
 | 
			
		||||
        let tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
        let mut tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
            .write(true)
 | 
			
		||||
            .read(true)
 | 
			
		||||
            .custom_flags(libc::O_TMPFILE)
 | 
			
		||||
            .open("/tmp")?;
 | 
			
		||||
 | 
			
		||||
        let tmpfile = self.download(name, tmpfile).await?;
 | 
			
		||||
        self.download(name, &mut tmpfile).await?;
 | 
			
		||||
 | 
			
		||||
        let index = FixedIndexReader::new(tmpfile)
 | 
			
		||||
            .map_err(|err| format_err!("unable to read fixed index '{}' - {}", name, err))?;
 | 
			
		||||
 | 
			
		||||
@ -466,7 +466,7 @@ impl HttpClient {
 | 
			
		||||
        &mut self,
 | 
			
		||||
        path: &str,
 | 
			
		||||
        output: &mut (dyn Write + Send),
 | 
			
		||||
    ) ->  Result<(), Error> {
 | 
			
		||||
    ) -> Result<(), Error> {
 | 
			
		||||
        let mut req = Self::request_builder(&self.server, "GET", path, None).unwrap();
 | 
			
		||||
 | 
			
		||||
        let client = self.client.clone();
 | 
			
		||||
@ -707,7 +707,7 @@ impl H2Client {
 | 
			
		||||
        path: &str,
 | 
			
		||||
        param: Option<Value>,
 | 
			
		||||
        mut output: W,
 | 
			
		||||
    ) -> Result<W, Error> {
 | 
			
		||||
    ) -> Result<(), Error> {
 | 
			
		||||
        let request = Self::request_builder("localhost", "GET", path, param, None).unwrap();
 | 
			
		||||
 | 
			
		||||
        let response_future = self.send_request(request, None).await?;
 | 
			
		||||
@ -727,7 +727,7 @@ impl H2Client {
 | 
			
		||||
            output.write_all(&chunk)?;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Ok(output)
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub async fn upload(
 | 
			
		||||
 | 
			
		||||
@ -47,13 +47,13 @@ async fn download_manifest(
 | 
			
		||||
    filename: &std::path::Path,
 | 
			
		||||
) -> Result<std::fs::File, Error> {
 | 
			
		||||
 | 
			
		||||
    let tmp_manifest_file = std::fs::OpenOptions::new()
 | 
			
		||||
    let mut tmp_manifest_file = std::fs::OpenOptions::new()
 | 
			
		||||
        .write(true)
 | 
			
		||||
        .create(true)
 | 
			
		||||
        .read(true)
 | 
			
		||||
        .open(&filename)?;
 | 
			
		||||
 | 
			
		||||
    let mut tmp_manifest_file = reader.download(MANIFEST_BLOB_NAME, tmp_manifest_file).await?;
 | 
			
		||||
    reader.download(MANIFEST_BLOB_NAME, &mut tmp_manifest_file).await?;
 | 
			
		||||
 | 
			
		||||
    tmp_manifest_file.seek(SeekFrom::Start(0))?;
 | 
			
		||||
 | 
			
		||||
@ -77,13 +77,13 @@ async fn pull_single_archive(
 | 
			
		||||
    tmp_path.set_extension("tmp");
 | 
			
		||||
 | 
			
		||||
    worker.log(format!("sync archive {}", archive_name));
 | 
			
		||||
    let tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
    let mut tmpfile = std::fs::OpenOptions::new()
 | 
			
		||||
        .write(true)
 | 
			
		||||
        .create(true)
 | 
			
		||||
        .read(true)
 | 
			
		||||
        .open(&tmp_path)?;
 | 
			
		||||
 | 
			
		||||
    let tmpfile = reader.download(archive_name, tmpfile).await?;
 | 
			
		||||
    reader.download(archive_name, &mut tmpfile).await?;
 | 
			
		||||
 | 
			
		||||
    match archive_type(archive_name)? {
 | 
			
		||||
        ArchiveType::DynamicIndex => {
 | 
			
		||||
@ -124,7 +124,7 @@ async fn try_client_log_download(
 | 
			
		||||
        .open(&tmp_path)?;
 | 
			
		||||
 | 
			
		||||
    // Note: be silent if there is no log - only log successful download
 | 
			
		||||
    if let Ok(_) = reader.download(CLIENT_LOG_BLOB_NAME, tmpfile).await {
 | 
			
		||||
    if let Ok(()) = reader.download(CLIENT_LOG_BLOB_NAME, tmpfile).await {
 | 
			
		||||
        if let Err(err) = std::fs::rename(&tmp_path, &path) {
 | 
			
		||||
            bail!("Atomic rename file {:?} failed - {}", path, err);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user