From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 6D408B8CB3 for ; Mon, 11 Mar 2024 15:58:48 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4DF37B6E0 for ; Mon, 11 Mar 2024 15:58:18 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Mon, 11 Mar 2024 15:58:17 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 65D1C403EC for ; Mon, 11 Mar 2024 15:58:17 +0100 (CET) Date: Mon, 11 Mar 2024 15:58:11 +0100 From: Fabian =?iso-8859-1?q?Gr=FCnbichler?= To: Proxmox Backup Server development discussion References: <20240305092703.126906-1-c.ebner@proxmox.com> <20240305092703.126906-16-c.ebner@proxmox.com> In-Reply-To: <20240305092703.126906-16-c.ebner@proxmox.com> MIME-Version: 1.0 User-Agent: astroid/0.16.0 (https://github.com/astroidmail/astroid) Message-Id: <1710165122.z4rcn3glg4.astroid@yuna.none> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SPAM-LEVEL: Spam detection results: 0 AWL 0.065 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: Re: [pbs-devel] [RFC v2 proxmox-backup 15/36] client: restore: read payload from dedicated index X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2024 14:58:48 -0000 On March 5, 2024 10:26 am, Christian Ebner wrote: > Whenever a split pxar archive is encountered, instantiate and attach > the required dedicated reader instance to the decoder instance on > restore. >=20 > Piping the output to stdout is not possible, this would require a > decoder instance which can decode the input stream, while maintaining > the pxar stream format as output. >=20 > Signed-off-by: Christian Ebner > --- > changes since version 1: > - no changes >=20 > proxmox-backup-client/src/main.rs | 34 ++++++++++++++++++++++++++++--- > 1 file changed, 31 insertions(+), 3 deletions(-) >=20 > diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/sr= c/main.rs > index fd9a4b97..e609aa16 100644 > --- a/proxmox-backup-client/src/main.rs > +++ b/proxmox-backup-client/src/main.rs > @@ -1214,7 +1214,7 @@ async fn dump_image( > fn parse_archive_type(name: &str) -> (String, ArchiveType) { > if name.ends_with(".didx") || name.ends_with(".fidx") || name.ends_w= ith(".blob") { > (name.into(), archive_type(name).unwrap()) > - } else if name.ends_with(".pxar") { > + } else if name.ends_with(".pxar") || name.ends_with(".pxar.meta") { > (format!("{}.didx", name), ArchiveType::DynamicIndex) I guess we could also handle .pxar.pld here, and map it to its .meta counterpart just for convenience's sake? ideally, the user could pass in either of the three "names" since only either .pxar or the split archives should exist, and any of the three variants probably means the user wants to restore the corresponding pxar archive, even if referred to by a slightly "wrong" name? > } else if name.ends_with(".img") { > (format!("{}.fidx", name), ArchiveType::FixedIndex) > @@ -1456,7 +1456,7 @@ async fn restore( > =20 > let chunk_reader =3D RemoteChunkReader::new( > client.clone(), > - crypt_config, > + crypt_config.clone(), > file_info.chunk_crypt_mode(), > most_used, > ); > @@ -1516,8 +1516,33 @@ async fn restore( > } > =20 > if let Some(target) =3D target { > + let mut decoder =3D pxar::decoder::Decoder::from_std(reader)= ?; > + if let Some(archive_base_name) =3D archive_name.strip_suffix= (".pxar.meta.didx") { > + let payload_archive_name =3D format!("{archive_base_name= }.pxar.pld.didx"); > + > + let payload_index =3D client > + .download_dynamic_index(&manifest, &payload_archive_= name) > + .await?; > + > + let payload_most_used =3D payload_index.find_most_used_c= hunks(8); > + > + let payload_chunk_reader =3D RemoteChunkReader::new( > + client.clone(), > + crypt_config, > + file_info.chunk_crypt_mode(), > + payload_most_used, > + ); > + > + let payload_reader =3D > + BufferedDynamicReader::new(payload_index, payload_ch= unk_reader); > + > + decoder =3D decoder.redirect_payload_input(pxar::decoder= ::sync::StandardReader::new( > + payload_reader, > + )); > + } > + > pbs_client::pxar::extract_archive( > - pxar::decoder::Decoder::from_std(reader)?, > + decoder, > Path::new(target), > feature_flags, > |path| { > @@ -1527,6 +1552,9 @@ async fn restore( > ) > .map_err(|err| format_err!("error extracting archive - {:#}"= , err))?; > } else { > + if archive_name.ends_with(".pxar.meta.didx") { > + bail!("unable to pipe pxar meta archive"); > + } > let mut writer =3D std::fs::OpenOptions::new() > .write(true) > .open("/dev/stdout") > --=20 > 2.39.2 >=20 >=20 >=20 > _______________________________________________ > pbs-devel mailing list > pbs-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel >=20 >=20 >=20