]> git.proxmox.com Git - proxmox-backup.git/commitdiff
move src/backup/read_chunk.rs to pbs-datastore/src/local_chunk_reader.rs
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 27 Sep 2021 09:10:14 +0000 (11:10 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 27 Sep 2021 09:10:14 +0000 (11:10 +0200)
pbs-datastore/src/lib.rs
pbs-datastore/src/local_chunk_reader.rs [new file with mode: 0644]
src/api2/admin/datastore.rs
src/backup/mod.rs
src/backup/read_chunk.rs [deleted file]

index fcc368ff3e65a1cf47a0307d3199fc4581c7e26b..d50a64a5b46693748d8902cb59f2910502e602b2 100644 (file)
@@ -201,3 +201,6 @@ pub use datastore::{check_backup_owner, DataStore};
 
 mod snapshot_reader;
 pub use snapshot_reader::SnapshotReader;
+
+mod local_chunk_reader;
+pub use local_chunk_reader::LocalChunkReader;
diff --git a/pbs-datastore/src/local_chunk_reader.rs b/pbs-datastore/src/local_chunk_reader.rs
new file mode 100644 (file)
index 0000000..0f818c0
--- /dev/null
@@ -0,0 +1,95 @@
+use std::future::Future;
+use std::pin::Pin;
+use std::sync::Arc;
+
+use anyhow::{bail, Error};
+
+use pbs_tools::crypt_config::CryptConfig;
+use pbs_api_types::CryptMode;
+
+use crate::data_blob::DataBlob;
+use crate::read_chunk::{ReadChunk, AsyncReadChunk};
+use crate::DataStore;
+
+#[derive(Clone)]
+pub struct LocalChunkReader {
+    store: Arc<DataStore>,
+    crypt_config: Option<Arc<CryptConfig>>,
+    crypt_mode: CryptMode,
+}
+
+impl LocalChunkReader {
+    pub fn new(store: Arc<DataStore>, crypt_config: Option<Arc<CryptConfig>>, crypt_mode: CryptMode) -> Self {
+        Self {
+            store,
+            crypt_config,
+            crypt_mode,
+        }
+    }
+
+    fn ensure_crypt_mode(&self, chunk_mode: CryptMode) -> Result<(), Error> {
+        match self.crypt_mode {
+            CryptMode::Encrypt => {
+                match chunk_mode {
+                    CryptMode::Encrypt => Ok(()),
+                    CryptMode::SignOnly | CryptMode::None => bail!("Index and chunk CryptMode don't match."),
+                }
+            },
+            CryptMode::SignOnly | CryptMode::None => {
+                match chunk_mode {
+                    CryptMode::Encrypt => bail!("Index and chunk CryptMode don't match."),
+                    CryptMode::SignOnly | CryptMode::None => Ok(()),
+                }
+            },
+        }
+    }
+}
+
+impl ReadChunk for LocalChunkReader {
+    fn read_raw_chunk(&self, digest: &[u8; 32]) -> Result<DataBlob, Error> {
+        let chunk = self.store.load_chunk(digest)?;
+        self.ensure_crypt_mode(chunk.crypt_mode()?)?;
+        Ok(chunk)
+    }
+
+    fn read_chunk(&self, digest: &[u8; 32]) -> Result<Vec<u8>, Error> {
+        let chunk = ReadChunk::read_raw_chunk(self, digest)?;
+
+        let raw_data = chunk.decode(self.crypt_config.as_ref().map(Arc::as_ref), Some(digest))?;
+
+        Ok(raw_data)
+    }
+}
+
+impl AsyncReadChunk for LocalChunkReader {
+    fn read_raw_chunk<'a>(
+        &'a self,
+        digest: &'a [u8; 32],
+    ) -> Pin<Box<dyn Future<Output = Result<DataBlob, Error>> + Send + 'a>> {
+        Box::pin(async move{
+            let (path, _) = self.store.chunk_path(digest);
+
+            let raw_data = tokio::fs::read(&path).await?;
+
+            let chunk = DataBlob::load_from_reader(&mut &raw_data[..])?;
+            self.ensure_crypt_mode(chunk.crypt_mode()?)?;
+
+            Ok(chunk)
+        })
+    }
+
+    fn read_chunk<'a>(
+        &'a self,
+        digest: &'a [u8; 32],
+    ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Error>> + Send + 'a>> {
+        Box::pin(async move {
+            let chunk = AsyncReadChunk::read_raw_chunk(self, digest).await?;
+
+            let raw_data = chunk.decode(self.crypt_config.as_ref().map(Arc::as_ref), Some(digest))?;
+
+            // fixme: verify digest?
+
+            Ok(raw_data)
+        })
+    }
+}
index 77e24513ca6a9c0b5b0da8798b08491f1c9a61d4..97b5b7fa368c23f7ba8889241f63ac69553c0c01 100644 (file)
@@ -39,7 +39,10 @@ use pbs_api_types::{ Authid, BackupContent, Counts, CryptMode,
 
 };
 use pbs_client::pxar::create_zip;
-use pbs_datastore::{check_backup_owner, DataStore, BackupDir, BackupGroup, StoreProgress, CATALOG_NAME};
+use pbs_datastore::{
+    check_backup_owner, DataStore, BackupDir, BackupGroup, StoreProgress, LocalChunkReader,
+    CATALOG_NAME,
+};
 use pbs_datastore::backup_info::BackupInfo;
 use pbs_datastore::cached_chunk_reader::CachedChunkReader;
 use pbs_datastore::catalog::{ArchiveEntry, CatalogReader};
@@ -60,7 +63,6 @@ use proxmox_rest_server::{WorkerTask, formatter};
 use crate::api2::node::rrd::create_value_from_rrd;
 use crate::backup::{
     verify_all_backups, verify_backup_group, verify_backup_dir, verify_filter,
-    LocalChunkReader,
 };
 
 use crate::server::jobstate::Job;
index 59078c1d579964341a8fbf3c360e0768decd3b99..ca060c9fe33f0f33cfeb6ca56a22b62d5509410a 100644 (file)
@@ -3,9 +3,5 @@
 // Note: .pcat1 => Proxmox Catalog Format version 1
 pub const CATALOG_NAME: &str = "catalog.pcat1.didx";
 
-// Split
-mod read_chunk;
-pub use read_chunk::*;
-
 mod verify;
 pub use verify::*;
diff --git a/src/backup/read_chunk.rs b/src/backup/read_chunk.rs
deleted file mode 100644 (file)
index 028db31..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-use std::future::Future;
-use std::pin::Pin;
-use std::sync::Arc;
-
-use anyhow::{bail, Error};
-
-use pbs_tools::crypt_config::CryptConfig;
-use pbs_api_types::CryptMode;
-use pbs_datastore::data_blob::DataBlob;
-use pbs_datastore::read_chunk::{ReadChunk, AsyncReadChunk};
-use pbs_datastore::DataStore;
-
-#[derive(Clone)]
-pub struct LocalChunkReader {
-    store: Arc<DataStore>,
-    crypt_config: Option<Arc<CryptConfig>>,
-    crypt_mode: CryptMode,
-}
-
-impl LocalChunkReader {
-    pub fn new(store: Arc<DataStore>, crypt_config: Option<Arc<CryptConfig>>, crypt_mode: CryptMode) -> Self {
-        Self {
-            store,
-            crypt_config,
-            crypt_mode,
-        }
-    }
-
-    fn ensure_crypt_mode(&self, chunk_mode: CryptMode) -> Result<(), Error> {
-        match self.crypt_mode {
-            CryptMode::Encrypt => {
-                match chunk_mode {
-                    CryptMode::Encrypt => Ok(()),
-                    CryptMode::SignOnly | CryptMode::None => bail!("Index and chunk CryptMode don't match."),
-                }
-            },
-            CryptMode::SignOnly | CryptMode::None => {
-                match chunk_mode {
-                    CryptMode::Encrypt => bail!("Index and chunk CryptMode don't match."),
-                    CryptMode::SignOnly | CryptMode::None => Ok(()),
-                }
-            },
-        }
-    }
-}
-
-impl ReadChunk for LocalChunkReader {
-    fn read_raw_chunk(&self, digest: &[u8; 32]) -> Result<DataBlob, Error> {
-        let chunk = self.store.load_chunk(digest)?;
-        self.ensure_crypt_mode(chunk.crypt_mode()?)?;
-        Ok(chunk)
-    }
-
-    fn read_chunk(&self, digest: &[u8; 32]) -> Result<Vec<u8>, Error> {
-        let chunk = ReadChunk::read_raw_chunk(self, digest)?;
-
-        let raw_data = chunk.decode(self.crypt_config.as_ref().map(Arc::as_ref), Some(digest))?;
-
-        Ok(raw_data)
-    }
-}
-
-impl AsyncReadChunk for LocalChunkReader {
-    fn read_raw_chunk<'a>(
-        &'a self,
-        digest: &'a [u8; 32],
-    ) -> Pin<Box<dyn Future<Output = Result<DataBlob, Error>> + Send + 'a>> {
-        Box::pin(async move{
-            let (path, _) = self.store.chunk_path(digest);
-
-            let raw_data = tokio::fs::read(&path).await?;
-
-            let chunk = DataBlob::load_from_reader(&mut &raw_data[..])?;
-            self.ensure_crypt_mode(chunk.crypt_mode()?)?;
-
-            Ok(chunk)
-        })
-    }
-
-    fn read_chunk<'a>(
-        &'a self,
-        digest: &'a [u8; 32],
-    ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Error>> + Send + 'a>> {
-        Box::pin(async move {
-            let chunk = AsyncReadChunk::read_raw_chunk(self, digest).await?;
-
-            let raw_data = chunk.decode(self.crypt_config.as_ref().map(Arc::as_ref), Some(digest))?;
-
-            // fixme: verify digest?
-
-            Ok(raw_data)
-        })
-    }
-}