public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Christian Ebner <c.ebner@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup] client: catalog: improve error message for missing catalog
Date: Mon, 15 Jul 2024 15:46:28 +0200	[thread overview]
Message-ID: <20240715134628.86889-1-c.ebner@proxmox.com> (raw)

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 "/<snapshot-path>/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 <c.ebner@proxmox.com>
---
 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<Value, Error> {
     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


             reply	other threads:[~2024-07-15 13:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-15 13:46 Christian Ebner [this message]
2024-07-16  8:49 ` Fabian Grünbichler
2024-07-16  8:54   ` Christian Ebner
2024-07-16  9:01     ` Fabian Grünbichler
2024-07-16  9:04       ` Christian Ebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240715134628.86889-1-c.ebner@proxmox.com \
    --to=c.ebner@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal