[pbs-devel] [PATCH proxmox-backup] client: catalog: improve error message for missing catalog
Fabian Grünbichler
f.gruenbichler at proxmox.com
Tue Jul 16 10:49:15 CEST 2024
> Christian Ebner <c.ebner at proxmox.com> hat am 15.07.2024 15:46 CEST geschrieben:
>
>
> 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)
> ```
alternatively, couldn't we adapt the CLI call like we did the API endpoint, and print a file listing using the metadata archive? mounting and then calling find seems a bit roundabout, if we can easily offer the information directly?
> Reported in the community forum:
> https://forum.proxmox.com/threads/150713/
>
> Signed-off-by: Christian Ebner <c.ebner at 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 at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
More information about the pbs-devel
mailing list