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 6683991931 for ; Thu, 4 Apr 2024 15:29:54 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 46CF51ABA for ; Thu, 4 Apr 2024 15:29:54 +0200 (CEST) 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 ; Thu, 4 Apr 2024 15:29:52 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 69A794508D for ; Thu, 4 Apr 2024 15:29:52 +0200 (CEST) Message-ID: Date: Thu, 4 Apr 2024 15:29:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion , =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= References: <20240328123707.336951-1-c.ebner@proxmox.com> <20240328123707.336951-27-c.ebner@proxmox.com> <1712221423.nn1rmw1ae6.astroid@yuna.none> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <1712221423.nn1rmw1ae6.astroid@yuna.none> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.370 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_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks 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 Subject: Re: [pbs-devel] [PATCH v3 proxmox-backup 26/58] client: mount: make split pxar archives mountable 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: Thu, 04 Apr 2024 13:29:54 -0000 On 4/4/24 11:43, Fabian Grünbichler wrote: > On March 28, 2024 1:36 pm, Christian Ebner wrote: >> Cover the cases where the pxar archive was uploaded as split payload >> data and metadata streams. Instantiate the required reader and >> decoder instances to access the metadata and payload data archives. >> >> Signed-off-by: Christian Ebner >> --- >> changes since version 2: >> - use mpxar and ppxar file extensions >> - use helpers for archive names and fuse reader >> >> proxmox-backup-client/src/mount.rs | 54 ++++++++++++++++++++---------- >> 1 file changed, 37 insertions(+), 17 deletions(-) >> >> diff --git a/proxmox-backup-client/src/mount.rs b/proxmox-backup-client/src/mount.rs >> index 4a2f83357..7bcd581be 100644 >> --- a/proxmox-backup-client/src/mount.rs >> +++ b/proxmox-backup-client/src/mount.rs >> @@ -21,17 +21,16 @@ use pbs_api_types::BackupNamespace; >> use pbs_client::tools::key_source::get_encryption_key_password; >> use pbs_client::{BackupReader, RemoteChunkReader}; >> use pbs_datastore::cached_chunk_reader::CachedChunkReader; >> -use pbs_datastore::dynamic_index::BufferedDynamicReader; >> use pbs_datastore::index::IndexFile; >> use pbs_key_config::load_and_decrypt_key; >> use pbs_tools::crypt_config::CryptConfig; >> use pbs_tools::json::required_string_param; >> >> +use crate::helper; >> use crate::{ >> complete_group_or_snapshot, complete_img_archive_name, complete_namespace, >> complete_pxar_archive_name, complete_repository, connect, dir_or_last_from_group, >> - extract_repository_from_value, optional_ns_param, record_repository, BufferedDynamicReadAt, >> - REPO_URL_SCHEMA, >> + extract_repository_from_value, optional_ns_param, record_repository, REPO_URL_SCHEMA, >> }; >> >> #[sortable] >> @@ -219,7 +218,10 @@ async fn mount_do(param: Value, pipe: Option) -> Result { >> } >> }; >> >> - let server_archive_name = if archive_name.ends_with(".pxar") { >> + let server_archive_name = if archive_name.ends_with(".pxar") >> + || archive_name.ends_with(".mpxar") >> + || archive_name.ends_with(".ppxar") >> + { >> if target.is_none() { >> bail!("use the 'mount' command to mount pxar archives"); >> } >> @@ -246,6 +248,16 @@ async fn mount_do(param: Value, pipe: Option) -> Result { >> let (manifest, _) = client.download_manifest().await?; >> manifest.check_fingerprint(crypt_config.as_ref().map(Arc::as_ref))?; >> >> + let base_name = server_archive_name >> + .strip_suffix(".mpxar.didx") >> + .or_else(|| server_archive_name.strip_suffix(".ppxar.didx")); >> + >> + let server_archive_name = if let Some(base) = base_name { >> + format!("{base}.mpxar.didx") >> + } else { >> + server_archive_name.to_owned() >> + }; >> + > > should this be switched to the get_pxar_archive_names helper? Yes, indeed! Moved the helper invocation up here and removed the latter (now unneeded) one. > >> let file_info = manifest.lookup_file_info(&server_archive_name)?; >> >> let daemonize = || -> Result<(), Error> { >> @@ -283,20 +295,28 @@ async fn mount_do(param: Value, pipe: Option) -> Result { >> futures::future::select(interrupt_int.recv().boxed(), interrupt_term.recv().boxed()); >> >> if server_archive_name.ends_with(".didx") { >> - let index = client >> - .download_dynamic_index(&manifest, &server_archive_name) >> - .await?; >> - let most_used = index.find_most_used_chunks(8); >> - let chunk_reader = RemoteChunkReader::new( >> + let (archive_name, payload_archive_name) = >> + helper::get_pxar_archive_names(&server_archive_name); > > and then we can skip this one here ;) > >> + let (reader, archive_size) = helper::get_pxar_fuse_reader( >> + &archive_name, >> client.clone(), >> - crypt_config, >> - file_info.chunk_crypt_mode(), >> - most_used, >> - ); >> - let reader = BufferedDynamicReader::new(index, chunk_reader); >> - let archive_size = reader.archive_size(); >> - let reader: pbs_pxar_fuse::Reader = Arc::new(BufferedDynamicReadAt::new(reader)); >> - let decoder = pbs_pxar_fuse::Accessor::new(reader, archive_size).await?; >> + &manifest, >> + crypt_config.clone(), >> + ) >> + .await?; >> + >> + let decoder = if let Some(payload_archive_name) = payload_archive_name { >> + let (payload_reader, _) = helper::get_pxar_fuse_reader( >> + &payload_archive_name, >> + client.clone(), >> + &manifest, >> + crypt_config.clone(), >> + ) >> + .await?; >> + pbs_pxar_fuse::Accessor::new(reader, archive_size, Some(payload_reader)).await? >> + } else { >> + pbs_pxar_fuse::Accessor::new(reader, archive_size, None).await? >> + }; >> >> let session = >> pbs_pxar_fuse::Session::mount(decoder, options, false, Path::new(target.unwrap())) >> -- >> 2.39.2 >> >> >> >> _______________________________________________ >> pbs-devel mailing list >> pbs-devel@lists.proxmox.com >> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel >> >> >> > > > _______________________________________________ > pbs-devel mailing list > pbs-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel > >