From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id B54AE1FF2A1 for ; Mon, 15 Jul 2024 15:46:18 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C487B4564; Mon, 15 Jul 2024 15:46:45 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 15 Jul 2024 15:46:28 +0200 Message-Id: <20240715134628.86889-1-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.021 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 Subject: [pbs-devel] [PATCH proxmox-backup] client: catalog: improve error message for missing catalog 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: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" Commit c0302805c "client: backup: conditionally write catalog for file level backups" drops encoding of the dedicated catalog when archives are encoded as split metadata/data archives with the `change-detection-mode` set to `data` or `metadata`. Since the catalog is not present anymore, accessing these snapshots via the `proxmox-backup-client catalog` command is obsolete for these cases, one should opt for the `proxmox-backup-client mount` command to inspect these archives instead. Improve the error message one gets when trying to access such snapshots by checking if the catalog is present in the manifest and if not, check if it contains a split pxar archive. A caller now gets the following error message: ``` no catalog for split pxar archives, use `mount` instead to inspect content ``` instead of the rather generic ``` Unable to open dynamic index "//catalog.pcat1.didx" - No such file or directory (os error 2) ``` Reported in the community forum: https://forum.proxmox.com/threads/150713/ Signed-off-by: Christian Ebner --- proxmox-backup-client/src/catalog.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/proxmox-backup-client/src/catalog.rs b/proxmox-backup-client/src/catalog.rs index 276457c1d..7e3bdd4e9 100644 --- a/proxmox-backup-client/src/catalog.rs +++ b/proxmox-backup-client/src/catalog.rs @@ -14,6 +14,7 @@ use pbs_client::tools::key_source::get_encryption_key_password; use pbs_client::{BackupReader, RemoteChunkReader}; use pbs_tools::crypt_config::CryptConfig; use pbs_tools::json::required_string_param; +use pbs_datastore::manifest::{BackupManifest, FileInfo}; use crate::helper; use crate::{ @@ -24,6 +25,24 @@ use crate::{ IndexFile, Shell, CATALOG_NAME, KEYFD_SCHEMA, REPO_URL_SCHEMA, }; +fn lookup_catalog_file_info(manifest: &BackupManifest) -> Result<&FileInfo, Error> { + let file_info = match manifest.lookup_file_info(CATALOG_NAME) { + Ok(file_info) => file_info, + Err(err) => { + for file_info in manifest.files() { + if file_info.filename.ends_with(".mpxar.didx") { + bail!( + "no catalog for split pxar archives, use `mount` instead to inspect content" + ); + } + } + return Err(err); + } + }; + + Ok(file_info) +} + #[api( input: { properties: { @@ -89,14 +108,14 @@ async fn dump_catalog(param: Value) -> Result { let (manifest, _) = client.download_manifest().await?; manifest.check_fingerprint(crypt_config.as_ref().map(Arc::as_ref))?; + let file_info = lookup_catalog_file_info(&manifest)?; + let index = client .download_dynamic_index(&manifest, CATALOG_NAME) .await?; let most_used = index.find_most_used_chunks(8); - let file_info = manifest.lookup_file_info(CATALOG_NAME)?; - let chunk_reader = RemoteChunkReader::new( client.clone(), crypt_config, @@ -207,6 +226,8 @@ async fn catalog_shell(param: Value) -> Result<(), Error> { let (manifest, _) = client.download_manifest().await?; manifest.check_fingerprint(crypt_config.as_ref().map(Arc::as_ref))?; + lookup_catalog_file_info(&manifest)?; + let decoder = helper::get_pxar_fuse_accessor( &server_archive_name, client.clone(), -- 2.39.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel