[pbs-devel] [PATCH proxmox-backup] datastore: replace deprecated `archive_type` function

Christian Ebner c.ebner at proxmox.com
Wed Jul 3 12:11:00 CEST 2024


Commit ea584a75 "move more api types for the client" deprecated
the `archive_type` function in favor of the associated function
`ArchiveType::from_path`.

Replace all remaining callers of the deprecated function with its
replacement.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
 pbs-datastore/src/datastore.rs       |  8 ++++----
 pbs-datastore/src/snapshot_reader.rs | 21 ++++++++++++---------
 proxmox-backup-client/src/main.rs    |  4 ++--
 src/api2/backup/mod.rs               |  4 ++--
 src/api2/reader/mod.rs               |  4 ++--
 src/api2/tape/restore.rs             |  4 ++--
 src/backup/verify.rs                 |  4 ++--
 src/server/pull.rs                   |  6 +++---
 8 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs
index f95da7615..3699eb52f 100644
--- a/pbs-datastore/src/datastore.rs
+++ b/pbs-datastore/src/datastore.rs
@@ -29,7 +29,7 @@ use crate::dynamic_index::{DynamicIndexReader, DynamicIndexWriter};
 use crate::fixed_index::{FixedIndexReader, FixedIndexWriter};
 use crate::hierarchy::{ListGroups, ListGroupsType, ListNamespaces, ListNamespacesRecursive};
 use crate::index::IndexFile;
-use crate::manifest::{archive_type, ArchiveType};
+use crate::manifest::ArchiveType;
 use crate::task_tracking::{self, update_active_operations};
 use crate::DataBlob;
 
@@ -377,7 +377,7 @@ impl DataStore {
         P: AsRef<Path>,
     {
         let filename = filename.as_ref();
-        let out: Box<dyn IndexFile + Send> = match archive_type(filename)? {
+        let out: Box<dyn IndexFile + Send> = match ArchiveType::from_path(filename)? {
             ArchiveType::DynamicIndex => Box::new(self.open_dynamic_reader(filename)?),
             ArchiveType::FixedIndex => Box::new(self.open_fixed_reader(filename)?),
             _ => bail!("cannot open index file of unknown type: {:?}", filename),
@@ -936,7 +936,7 @@ impl DataStore {
                     continue;
                 }
             };
-            if let Ok(archive_type) = archive_type(&path) {
+            if let Ok(archive_type) = ArchiveType::from_path(&path) {
                 if archive_type == ArchiveType::FixedIndex
                     || archive_type == ArchiveType::DynamicIndex
                 {
@@ -1012,7 +1012,7 @@ impl DataStore {
 
             match std::fs::File::open(&img) {
                 Ok(file) => {
-                    if let Ok(archive_type) = archive_type(&img) {
+                    if let Ok(archive_type) = ArchiveType::from_path(&img) {
                         if archive_type == ArchiveType::FixedIndex {
                             let index = FixedIndexReader::new(file).map_err(|e| {
                                 format_err!("can't read index '{}' - {}", img.to_string_lossy(), e)
diff --git a/pbs-datastore/src/snapshot_reader.rs b/pbs-datastore/src/snapshot_reader.rs
index ec7a48e54..f9c772079 100644
--- a/pbs-datastore/src/snapshot_reader.rs
+++ b/pbs-datastore/src/snapshot_reader.rs
@@ -14,7 +14,7 @@ use crate::backup_info::BackupDir;
 use crate::dynamic_index::DynamicIndexReader;
 use crate::fixed_index::FixedIndexReader;
 use crate::index::IndexFile;
-use crate::manifest::{archive_type, ArchiveType, CLIENT_LOG_BLOB_NAME, MANIFEST_BLOB_NAME};
+use crate::manifest::{ArchiveType, CLIENT_LOG_BLOB_NAME, MANIFEST_BLOB_NAME};
 use crate::DataStore;
 
 /// Helper to access the contents of a datastore backup snapshot
@@ -138,13 +138,16 @@ impl<'a, F: Fn(&[u8; 32]) -> bool> Iterator for SnapshotChunkIterator<'a, F> {
                 if self.current_index.is_none() {
                     if let Some(filename) = self.todo_list.pop() {
                         let file = self.snapshot_reader.open_file(&filename)?;
-                        let index: Box<dyn IndexFile + Send> = match archive_type(&filename)? {
-                            ArchiveType::FixedIndex => Box::new(FixedIndexReader::new(file)?),
-                            ArchiveType::DynamicIndex => Box::new(DynamicIndexReader::new(file)?),
-                            _ => bail!(
-                                "SnapshotChunkIterator: got unknown file type - internal error"
-                            ),
-                        };
+                        let index: Box<dyn IndexFile + Send> =
+                            match ArchiveType::from_path(&filename)? {
+                                ArchiveType::FixedIndex => Box::new(FixedIndexReader::new(file)?),
+                                ArchiveType::DynamicIndex => {
+                                    Box::new(DynamicIndexReader::new(file)?)
+                                }
+                                _ => bail!(
+                                    "SnapshotChunkIterator: got unknown file type - internal error"
+                                ),
+                            };
 
                         let datastore = DataStore::lookup_datastore(
                             self.snapshot_reader.datastore_name(),
@@ -178,7 +181,7 @@ impl<'a, F: Fn(&[u8; 32]) -> bool> SnapshotChunkIterator<'a, F> {
         let mut todo_list = Vec::new();
 
         for filename in snapshot_reader.file_list() {
-            match archive_type(filename)? {
+            match ArchiveType::from_path(filename)? {
                 ArchiveType::FixedIndex | ArchiveType::DynamicIndex => {
                     todo_list.push(filename.to_owned());
                 }
diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs
index 003abaef2..6a7d09047 100644
--- a/proxmox-backup-client/src/main.rs
+++ b/proxmox-backup-client/src/main.rs
@@ -55,7 +55,7 @@ use pbs_datastore::dynamic_index::{BufferedDynamicReader, DynamicIndexReader, Lo
 use pbs_datastore::fixed_index::FixedIndexReader;
 use pbs_datastore::index::IndexFile;
 use pbs_datastore::manifest::{
-    archive_type, ArchiveType, BackupManifest, ENCRYPTED_KEY_BLOB_NAME, MANIFEST_BLOB_NAME,
+    ArchiveType, BackupManifest, ENCRYPTED_KEY_BLOB_NAME, MANIFEST_BLOB_NAME,
 };
 use pbs_datastore::read_chunk::AsyncReadChunk;
 use pbs_datastore::CATALOG_NAME;
@@ -1361,7 +1361,7 @@ async fn dump_image<W: Write>(
 
 fn parse_archive_type(name: &str) -> (String, ArchiveType) {
     if name.ends_with(".didx") || name.ends_with(".fidx") || name.ends_with(".blob") {
-        (name.into(), archive_type(name).unwrap())
+        (name.into(), ArchiveType::from_path(name).unwrap())
     } else if has_pxar_filename_extension(name, false) {
         (format!("{}.didx", name), ArchiveType::DynamicIndex)
     } else if name.ends_with(".img") {
diff --git a/src/api2/backup/mod.rs b/src/api2/backup/mod.rs
index 013043dd0..915fb2a84 100644
--- a/src/api2/backup/mod.rs
+++ b/src/api2/backup/mod.rs
@@ -23,7 +23,7 @@ use pbs_api_types::{
 };
 use pbs_config::CachedUserInfo;
 use pbs_datastore::index::IndexFile;
-use pbs_datastore::manifest::{archive_type, ArchiveType};
+use pbs_datastore::manifest::ArchiveType;
 use pbs_datastore::{DataStore, PROXMOX_BACKUP_PROTOCOL_ID_V1};
 use pbs_tools::json::{required_array_param, required_integer_param, required_string_param};
 use proxmox_rest_server::{H2Service, WorkerTask};
@@ -839,7 +839,7 @@ fn download_previous(
         path.push(&archive_name);
 
         {
-            let index: Option<Box<dyn IndexFile>> = match archive_type(&archive_name)? {
+            let index: Option<Box<dyn IndexFile>> = match ArchiveType::from_path(&archive_name)? {
                 ArchiveType::FixedIndex => {
                     let index = env.datastore.open_fixed_reader(&path)?;
                     Some(Box::new(index))
diff --git a/src/api2/reader/mod.rs b/src/api2/reader/mod.rs
index 42b428385..23492f64c 100644
--- a/src/api2/reader/mod.rs
+++ b/src/api2/reader/mod.rs
@@ -23,7 +23,7 @@ use pbs_api_types::{
 };
 use pbs_config::CachedUserInfo;
 use pbs_datastore::index::IndexFile;
-use pbs_datastore::manifest::{archive_type, ArchiveType};
+use pbs_datastore::manifest::ArchiveType;
 use pbs_datastore::{DataStore, PROXMOX_BACKUP_READER_PROTOCOL_ID_V1};
 use pbs_tools::json::required_string_param;
 use proxmox_rest_server::{H2Service, WorkerTask};
@@ -261,7 +261,7 @@ fn download_file(
 
         env.log(format!("download {:?}", path.clone()));
 
-        let index: Option<Box<dyn IndexFile + Send>> = match archive_type(&file_name)? {
+        let index: Option<Box<dyn IndexFile + Send>> = match ArchiveType::from_path(&file_name)? {
             ArchiveType::FixedIndex => {
                 let index = env.datastore.open_fixed_reader(&path)?;
                 Some(Box::new(index))
diff --git a/src/api2/tape/restore.rs b/src/api2/tape/restore.rs
index 7b96acb6c..79200d1b9 100644
--- a/src/api2/tape/restore.rs
+++ b/src/api2/tape/restore.rs
@@ -28,7 +28,7 @@ use pbs_config::CachedUserInfo;
 use pbs_datastore::dynamic_index::DynamicIndexReader;
 use pbs_datastore::fixed_index::FixedIndexReader;
 use pbs_datastore::index::IndexFile;
-use pbs_datastore::manifest::{archive_type, ArchiveType, BackupManifest, MANIFEST_BLOB_NAME};
+use pbs_datastore::manifest::{ArchiveType, BackupManifest, MANIFEST_BLOB_NAME};
 use pbs_datastore::{DataBlob, DataStore};
 use pbs_tape::{
     BlockReadError, MediaContentHeader, TapeRead, PROXMOX_BACKUP_CONTENT_HEADER_MAGIC_1_0,
@@ -1100,7 +1100,7 @@ fn restore_snapshots_to_tmpdir(
                     let mut archive_path = tmp_path.to_owned();
                     archive_path.push(&item.filename);
 
-                    let index: Box<dyn IndexFile> = match archive_type(&item.filename)? {
+                    let index: Box<dyn IndexFile> = match ArchiveType::from_path(&item.filename)? {
                         ArchiveType::DynamicIndex => {
                             Box::new(DynamicIndexReader::open(&archive_path)?)
                         }
diff --git a/src/backup/verify.rs b/src/backup/verify.rs
index c972e5328..8dde7dacc 100644
--- a/src/backup/verify.rs
+++ b/src/backup/verify.rs
@@ -14,7 +14,7 @@ use pbs_api_types::{
 };
 use pbs_datastore::backup_info::{BackupDir, BackupGroup, BackupInfo};
 use pbs_datastore::index::IndexFile;
-use pbs_datastore::manifest::{archive_type, ArchiveType, BackupManifest, FileInfo};
+use pbs_datastore::manifest::{ArchiveType, BackupManifest, FileInfo};
 use pbs_datastore::{DataBlob, DataStore, StoreProgress};
 use proxmox_sys::fs::lock_dir_noblock_shared;
 
@@ -407,7 +407,7 @@ pub fn verify_backup_dir_with_lock(
     for info in manifest.files() {
         let result = proxmox_lang::try_block!({
             task_log!(verify_worker.worker, "  check {}", info.filename);
-            match archive_type(&info.filename)? {
+            match ArchiveType::from_path(&info.filename)? {
                 ArchiveType::FixedIndex => verify_fixed_index(verify_worker, backup_dir, info),
                 ArchiveType::DynamicIndex => verify_dynamic_index(verify_worker, backup_dir, info),
                 ArchiveType::Blob => verify_blob(backup_dir, info),
diff --git a/src/server/pull.rs b/src/server/pull.rs
index 14744e9c8..d144e2f2d 100644
--- a/src/server/pull.rs
+++ b/src/server/pull.rs
@@ -27,7 +27,7 @@ use pbs_datastore::dynamic_index::DynamicIndexReader;
 use pbs_datastore::fixed_index::FixedIndexReader;
 use pbs_datastore::index::IndexFile;
 use pbs_datastore::manifest::{
-    archive_type, ArchiveType, BackupManifest, FileInfo, CLIENT_LOG_BLOB_NAME, MANIFEST_BLOB_NAME,
+    ArchiveType, BackupManifest, FileInfo, CLIENT_LOG_BLOB_NAME, MANIFEST_BLOB_NAME,
 };
 use pbs_datastore::read_chunk::AsyncReadChunk;
 use pbs_datastore::{
@@ -753,7 +753,7 @@ async fn pull_single_archive<'a>(
 
     let mut tmpfile = std::fs::OpenOptions::new().read(true).open(&tmp_path)?;
 
-    match archive_type(archive_name)? {
+    match ArchiveType::from_path(archive_name)? {
         ArchiveType::DynamicIndex => {
             let index = DynamicIndexReader::new(tmpfile).map_err(|err| {
                 format_err!("unable to read dynamic index {:?} - {}", tmp_path, err)
@@ -874,7 +874,7 @@ async fn pull_snapshot<'a>(
         path.push(&item.filename);
 
         if path.exists() {
-            match archive_type(&item.filename)? {
+            match ArchiveType::from_path(&item.filename)? {
                 ArchiveType::DynamicIndex => {
                     let index = DynamicIndexReader::open(&path)?;
                     let (csum, size) = index.compute_csum();
-- 
2.39.2





More information about the pbs-devel mailing list